Files
atlantis/server/router_test.go
2024-06-17 11:22:30 -04:00

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)
}