From 2b97800dd81fcedec66be4896b5cb10f95531bb6 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Mon, 5 Jun 2023 11:04:47 +0200 Subject: [PATCH] [TESTS] testMiddlewareHook, dependency injection in integration tests (cherry picked from commit 6623630d1070c6c0f195197ad769b2aed15a50b9) (cherry picked from commit 5e30a4f95034ca6314ad633ef3053b7a553b5244) (cherry picked from commit 355a117e743f7d9c8df562f619f642aa1ff1c0c2) (cherry picked from commit 2e98ceccbce5ed6b918f89476d7713938e69c6a4) (cherry picked from commit e1687f1e20a138bf112ae1088f9ed7916e6a1a4a) --- modules/web/route.go | 4 ++++ routers/web/web.go | 4 ++++ .../integration/api_activitypub_person_test.go | 13 ++++++------- tests/integration/api_nodeinfo_test.go | 6 ++---- tests/integration/create_no_session_test.go | 6 ++---- tests/integration/integration_test.go | 17 ++++++++++++++--- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/modules/web/route.go b/modules/web/route.go index d801f1025c..3a7e690659 100644 --- a/modules/web/route.go +++ b/modules/web/route.go @@ -14,6 +14,10 @@ import ( chi "github.com/go-chi/chi/v5" ) +type KeyTestMiddlewareHookType string + +var KeyTestMiddlewareHook = KeyTestMiddlewareHookType("testMiddlewareHook") + // Bind binding an obj to a handler func Bind[T any](_ T) any { return func(ctx *context.Context) { diff --git a/routers/web/web.go b/routers/web/web.go index 1b5bc2e342..c1b7649b4b 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -167,6 +167,10 @@ func Routes(ctx gocontext.Context) *web.Route { mid = append(mid, user.GetNotificationCount) mid = append(mid, repo.GetActiveStopwatch) mid = append(mid, goGet) + middlewareHook := ctx.Value(web.KeyTestMiddlewareHook) + if middlewareHook != nil { + mid = append(mid, middlewareHook) + } others := web.NewRoute() others.Use(mid...) diff --git a/tests/integration/api_activitypub_person_test.go b/tests/integration/api_activitypub_person_test.go index 301cfba172..140cf0f034 100644 --- a/tests/integration/api_activitypub_person_test.go +++ b/tests/integration/api_activitypub_person_test.go @@ -14,7 +14,6 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/activitypub" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/routers" ap "github.com/go-ap/activitypub" "github.com/stretchr/testify/assert" @@ -22,10 +21,10 @@ import ( func TestActivityPubPerson(t *testing.T) { setting.Federation.Enabled = true - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() defer func() { setting.Federation.Enabled = false - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() }() onGiteaRun(t, func(*testing.T, *url.URL) { @@ -60,10 +59,10 @@ func TestActivityPubPerson(t *testing.T) { func TestActivityPubMissingPerson(t *testing.T) { setting.Federation.Enabled = true - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() defer func() { setting.Federation.Enabled = false - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() }() onGiteaRun(t, func(*testing.T, *url.URL) { @@ -75,10 +74,10 @@ func TestActivityPubMissingPerson(t *testing.T) { func TestActivityPubPersonInbox(t *testing.T) { setting.Federation.Enabled = true - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() defer func() { setting.Federation.Enabled = false - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() }() srv := httptest.NewServer(c) diff --git a/tests/integration/api_nodeinfo_test.go b/tests/integration/api_nodeinfo_test.go index bc2f11a7f2..3052d95be0 100644 --- a/tests/integration/api_nodeinfo_test.go +++ b/tests/integration/api_nodeinfo_test.go @@ -4,24 +4,22 @@ package integration import ( - "context" "net/http" "net/url" "testing" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/routers" "github.com/stretchr/testify/assert" ) func TestNodeinfo(t *testing.T) { setting.Federation.Enabled = true - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() defer func() { setting.Federation.Enabled = false - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() }() onGiteaRun(t, func(*testing.T, *url.URL) { diff --git a/tests/integration/create_no_session_test.go b/tests/integration/create_no_session_test.go index 9a96ed61fa..81e02e3c2c 100644 --- a/tests/integration/create_no_session_test.go +++ b/tests/integration/create_no_session_test.go @@ -4,7 +4,6 @@ package integration import ( - "context" "net/http" "net/http/httptest" "os" @@ -13,7 +12,6 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/routers" "code.gitea.io/gitea/tests" "gitea.com/go-chi/session" @@ -57,7 +55,7 @@ func TestSessionFileCreation(t *testing.T) { oldSessionConfig := setting.SessionConfig.ProviderConfig defer func() { setting.SessionConfig.ProviderConfig = oldSessionConfig - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() }() var config session.Options @@ -76,7 +74,7 @@ func TestSessionFileCreation(t *testing.T) { setting.SessionConfig.ProviderConfig = string(newConfigBytes) - c = routers.NormalRoutes(context.TODO()) + setNormalRoutes() t.Run("NoSessionOnViewIssue", func(t *testing.T) { defer tests.PrintCurrentTest(t)() diff --git a/tests/integration/integration_test.go b/tests/integration/integration_test.go index 27918a9ccc..4d9ecf3faf 100644 --- a/tests/integration/integration_test.go +++ b/tests/integration/integration_test.go @@ -40,7 +40,19 @@ import ( "github.com/xeipuuv/gojsonschema" ) -var c *web.Route +var ( + c *web.Route + testMiddlewareHook func(*gitea_context.Context) +) + +func setNormalRoutes() { + middlewareHook := func(ctx *gitea_context.Context) { + if testMiddlewareHook != nil { + testMiddlewareHook(ctx) + } + } + c = routers.NormalRoutes(context.WithValue(context.Background(), web.KeyTestMiddlewareHook, middlewareHook)) +} type NilResponseRecorder struct { httptest.ResponseRecorder @@ -87,8 +99,7 @@ func TestMain(m *testing.M) { defer cancel() tests.InitTest(true) - c = routers.NormalRoutes(context.TODO()) - + setNormalRoutes() // integration test settings... if setting.CfgProvider != nil { testingCfg := setting.CfgProvider.Section("integration-tests")