mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-28 22:28:25 +00:00
113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
package server_test
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/gorilla/mux"
|
|
"github.com/runatlantis/atlantis/server"
|
|
"github.com/runatlantis/atlantis/server/events/command"
|
|
"github.com/runatlantis/atlantis/server/events/models"
|
|
. "github.com/runatlantis/atlantis/testing"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRouter_GenerateLockURL(t *testing.T) {
|
|
cases := []struct {
|
|
AtlantisURL string
|
|
ExpURL string
|
|
}{
|
|
{
|
|
"http://localhost:4141",
|
|
"http://localhost:4141/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
{
|
|
"https://localhost:4141",
|
|
"https://localhost:4141/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
{
|
|
"https://localhost:4141/",
|
|
"https://localhost:4141/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
{
|
|
"https://example.com/basepath",
|
|
"https://example.com/basepath/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
{
|
|
"https://example.com/basepath/",
|
|
"https://example.com/basepath/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
{
|
|
"https://example.com/path/1/",
|
|
"https://example.com/path/1/lock?id=lkysow%252Fatlantis-example%252F.%252Fdefault",
|
|
},
|
|
}
|
|
|
|
queryParam := "id"
|
|
routeName := "routename"
|
|
underlyingRouter := mux.NewRouter()
|
|
underlyingRouter.HandleFunc("/lock", func(_ http.ResponseWriter, _ *http.Request) {}).Methods("GET").Queries(queryParam, "{id}").Name(routeName)
|
|
|
|
for _, c := range cases {
|
|
t.Run(c.AtlantisURL, func(t *testing.T) {
|
|
atlantisURL, err := server.ParseAtlantisURL(c.AtlantisURL)
|
|
Ok(t, err)
|
|
|
|
router := &server.Router{
|
|
AtlantisURL: atlantisURL,
|
|
LockViewRouteIDQueryParam: queryParam,
|
|
LockViewRouteName: routeName,
|
|
Underlying: underlyingRouter,
|
|
}
|
|
Equals(t, c.ExpURL, router.GenerateLockURL("lkysow/atlantis-example/./default"))
|
|
})
|
|
}
|
|
}
|
|
|
|
func setupJobsRouter(t *testing.T) *server.Router {
|
|
atlantisURL, err := server.ParseAtlantisURL("http://localhost:4141")
|
|
Ok(t, err)
|
|
|
|
underlyingRouter := mux.NewRouter()
|
|
underlyingRouter.HandleFunc("/jobs/{job-id}", func(_ http.ResponseWriter, _ *http.Request) {}).Methods("GET").Name("project-jobs-detail")
|
|
|
|
return &server.Router{
|
|
AtlantisURL: atlantisURL,
|
|
Underlying: underlyingRouter,
|
|
ProjectJobsViewRouteName: "project-jobs-detail",
|
|
}
|
|
}
|
|
|
|
func TestGenerateProjectJobURL_ShouldGenerateURLWhenJobIDSpecified(t *testing.T) {
|
|
router := setupJobsRouter(t)
|
|
jobID := uuid.New().String()
|
|
ctx := command.ProjectContext{
|
|
JobID: jobID,
|
|
}
|
|
expectedURL := fmt.Sprintf("http://localhost:4141/jobs/%s", jobID)
|
|
gotURL, err := router.GenerateProjectJobURL(ctx)
|
|
Ok(t, err)
|
|
|
|
Equals(t, expectedURL, gotURL)
|
|
}
|
|
|
|
func TestGenerateProjectJobURL_ShouldReturnErrorWhenJobIDNotSpecified(t *testing.T) {
|
|
router := setupJobsRouter(t)
|
|
ctx := command.ProjectContext{
|
|
Pull: models.PullRequest{
|
|
BaseRepo: models.Repo{
|
|
Owner: "test-owner",
|
|
Name: "test-repo",
|
|
},
|
|
Num: 1,
|
|
},
|
|
RepoRelDir: "ops/terraform/",
|
|
}
|
|
expectedErrString := "no job id in ctx"
|
|
gotURL, err := router.GenerateProjectJobURL(ctx)
|
|
require.EqualError(t, err, expectedErrString)
|
|
Equals(t, "", gotURL)
|
|
}
|