[TESTS] testMiddlewareHook, dependency injection in integration tests

(cherry picked from commit 6623630d10)
(cherry picked from commit 5e30a4f950)
(cherry picked from commit 355a117e74)
(cherry picked from commit 2e98ceccbc)
(cherry picked from commit e1687f1e20)
This commit is contained in:
Earl Warren 2023-06-05 11:04:47 +02:00
parent cf7c08031f
commit 2b97800dd8
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
6 changed files with 32 additions and 18 deletions

View file

@ -14,6 +14,10 @@ import (
chi "github.com/go-chi/chi/v5" chi "github.com/go-chi/chi/v5"
) )
type KeyTestMiddlewareHookType string
var KeyTestMiddlewareHook = KeyTestMiddlewareHookType("testMiddlewareHook")
// Bind binding an obj to a handler // Bind binding an obj to a handler
func Bind[T any](_ T) any { func Bind[T any](_ T) any {
return func(ctx *context.Context) { return func(ctx *context.Context) {

View file

@ -167,6 +167,10 @@ func Routes(ctx gocontext.Context) *web.Route {
mid = append(mid, user.GetNotificationCount) mid = append(mid, user.GetNotificationCount)
mid = append(mid, repo.GetActiveStopwatch) mid = append(mid, repo.GetActiveStopwatch)
mid = append(mid, goGet) mid = append(mid, goGet)
middlewareHook := ctx.Value(web.KeyTestMiddlewareHook)
if middlewareHook != nil {
mid = append(mid, middlewareHook)
}
others := web.NewRoute() others := web.NewRoute()
others.Use(mid...) others.Use(mid...)

View file

@ -14,7 +14,6 @@ import (
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/activitypub" "code.gitea.io/gitea/modules/activitypub"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/routers"
ap "github.com/go-ap/activitypub" ap "github.com/go-ap/activitypub"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -22,10 +21,10 @@ import (
func TestActivityPubPerson(t *testing.T) { func TestActivityPubPerson(t *testing.T) {
setting.Federation.Enabled = true setting.Federation.Enabled = true
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
defer func() { defer func() {
setting.Federation.Enabled = false setting.Federation.Enabled = false
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
}() }()
onGiteaRun(t, func(*testing.T, *url.URL) { onGiteaRun(t, func(*testing.T, *url.URL) {
@ -60,10 +59,10 @@ func TestActivityPubPerson(t *testing.T) {
func TestActivityPubMissingPerson(t *testing.T) { func TestActivityPubMissingPerson(t *testing.T) {
setting.Federation.Enabled = true setting.Federation.Enabled = true
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
defer func() { defer func() {
setting.Federation.Enabled = false setting.Federation.Enabled = false
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
}() }()
onGiteaRun(t, func(*testing.T, *url.URL) { onGiteaRun(t, func(*testing.T, *url.URL) {
@ -75,10 +74,10 @@ func TestActivityPubMissingPerson(t *testing.T) {
func TestActivityPubPersonInbox(t *testing.T) { func TestActivityPubPersonInbox(t *testing.T) {
setting.Federation.Enabled = true setting.Federation.Enabled = true
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
defer func() { defer func() {
setting.Federation.Enabled = false setting.Federation.Enabled = false
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
}() }()
srv := httptest.NewServer(c) srv := httptest.NewServer(c)

View file

@ -4,24 +4,22 @@
package integration package integration
import ( import (
"context"
"net/http" "net/http"
"net/url" "net/url"
"testing" "testing"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/routers"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestNodeinfo(t *testing.T) { func TestNodeinfo(t *testing.T) {
setting.Federation.Enabled = true setting.Federation.Enabled = true
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
defer func() { defer func() {
setting.Federation.Enabled = false setting.Federation.Enabled = false
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
}() }()
onGiteaRun(t, func(*testing.T, *url.URL) { onGiteaRun(t, func(*testing.T, *url.URL) {

View file

@ -4,7 +4,6 @@
package integration package integration
import ( import (
"context"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"os" "os"
@ -13,7 +12,6 @@ import (
"code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/routers"
"code.gitea.io/gitea/tests" "code.gitea.io/gitea/tests"
"gitea.com/go-chi/session" "gitea.com/go-chi/session"
@ -57,7 +55,7 @@ func TestSessionFileCreation(t *testing.T) {
oldSessionConfig := setting.SessionConfig.ProviderConfig oldSessionConfig := setting.SessionConfig.ProviderConfig
defer func() { defer func() {
setting.SessionConfig.ProviderConfig = oldSessionConfig setting.SessionConfig.ProviderConfig = oldSessionConfig
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
}() }()
var config session.Options var config session.Options
@ -76,7 +74,7 @@ func TestSessionFileCreation(t *testing.T) {
setting.SessionConfig.ProviderConfig = string(newConfigBytes) setting.SessionConfig.ProviderConfig = string(newConfigBytes)
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
t.Run("NoSessionOnViewIssue", func(t *testing.T) { t.Run("NoSessionOnViewIssue", func(t *testing.T) {
defer tests.PrintCurrentTest(t)() defer tests.PrintCurrentTest(t)()

View file

@ -40,7 +40,19 @@ import (
"github.com/xeipuuv/gojsonschema" "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 { type NilResponseRecorder struct {
httptest.ResponseRecorder httptest.ResponseRecorder
@ -87,8 +99,7 @@ func TestMain(m *testing.M) {
defer cancel() defer cancel()
tests.InitTest(true) tests.InitTest(true)
c = routers.NormalRoutes(context.TODO()) setNormalRoutes()
// integration test settings... // integration test settings...
if setting.CfgProvider != nil { if setting.CfgProvider != nil {
testingCfg := setting.CfgProvider.Section("integration-tests") testingCfg := setting.CfgProvider.Section("integration-tests")