]> source.dussan.org Git - gitea.git/commitdiff
Fix install page context, make the install page tests really test (#24858)
authorwxiaoguang <wxiaoguang@gmail.com>
Tue, 23 May 2023 01:29:15 +0000 (09:29 +0800)
committerGitHub <noreply@github.com>
Tue, 23 May 2023 01:29:15 +0000 (09:29 +0800)
Fix #24856

Rename "context.contextKey" to "context.WebContextKey", this context is
for web context only. But the Context itself is not renamed, otherwise
it would cause a lot of changes (if we really want to rename it, there
could be a separate PR).

The old test code doesn't really test, the "install page" gets broken
not only one time, so use new test code to make sure the "install page"
could work.

cmd/web.go
modules/context/context.go
modules/context/package.go
modules/web/handler.go
routers/install/install.go
routers/install/routes.go
routers/install/routes_test.go
routers/web/web.go
services/auth/auth.go

index bc344db54017ccc8f1c043e72bd4c5e43516f263..da6c987ff845e15ee966036ff03a7bfa4556fa48 100644 (file)
@@ -142,10 +142,8 @@ func runWeb(ctx *cli.Context) error {
                                return err
                        }
                }
-               installCtx, cancel := context.WithCancel(graceful.GetManager().HammerContext())
-               c := install.Routes(installCtx)
+               c := install.Routes()
                err := listen(c, false)
-               cancel()
                if err != nil {
                        log.Critical("Unable to open listener for installer. Is Gitea already running?")
                        graceful.GetManager().DoGracefulShutdown()
index 1e15081479ff872e131ee7ce60dc5ef2cba96704..9e351432c4cd7f23698a4c8ed2a80cc06d1e8858 100644 (file)
@@ -68,12 +68,12 @@ func (ctx *Context) TrHTMLEscapeArgs(msg string, args ...string) string {
        return ctx.Locale.Tr(msg, trArgs...)
 }
 
-type contextKeyType struct{}
+type webContextKeyType struct{}
 
-var contextKey interface{} = contextKeyType{}
+var WebContextKey = webContextKeyType{}
 
-func GetContext(req *http.Request) *Context {
-       ctx, _ := req.Context().Value(contextKey).(*Context)
+func GetWebContext(req *http.Request) *Context {
+       ctx, _ := req.Context().Value(WebContextKey).(*Context)
        return ctx
 }
 
@@ -86,7 +86,7 @@ type ValidateContext struct {
 func GetValidateContext(req *http.Request) (ctx *ValidateContext) {
        if ctxAPI, ok := req.Context().Value(apiContextKey).(*APIContext); ok {
                ctx = &ValidateContext{Base: ctxAPI.Base}
-       } else if ctxWeb, ok := req.Context().Value(contextKey).(*Context); ok {
+       } else if ctxWeb, ok := req.Context().Value(WebContextKey).(*Context); ok {
                ctx = &ValidateContext{Base: ctxWeb.Base}
        } else {
                panic("invalid context, expect either APIContext or Context")
@@ -135,7 +135,7 @@ func Contexter() func(next http.Handler) http.Handler {
                        ctx.PageData = map[string]any{}
                        ctx.Data["PageData"] = ctx.PageData
 
-                       ctx.Base.AppendContextValue(contextKey, ctx)
+                       ctx.Base.AppendContextValue(WebContextKey, ctx)
                        ctx.Base.AppendContextValueFunc(git.RepositoryContextKey, func() any { return ctx.Repo.GitRepo })
 
                        ctx.Csrf = PrepareCSRFProtector(csrfOpts, ctx)
index b1fd7088ddc4046ddfb2266f95c984f95516afc3..8052032787117a19b70180851a57021c584fe96f 100644 (file)
@@ -150,7 +150,7 @@ func PackageContexter() func(next http.Handler) http.Handler {
                        }
                        defer baseCleanUp()
 
-                       ctx.Base.AppendContextValue(contextKey, ctx)
+                       ctx.Base.AppendContextValue(WebContextKey, ctx)
                        next.ServeHTTP(ctx.Resp, ctx.Req)
                })
        }
index 5013bac93f64db840aa3fdc6f406018f3d8d5f8f..c8aebd90518df479638b0650ed0089362e2d697a 100644 (file)
@@ -22,7 +22,7 @@ type ResponseStatusProvider interface {
 // TODO: decouple this from the context package, let the context package register these providers
 var argTypeProvider = map[reflect.Type]func(req *http.Request) ResponseStatusProvider{
        reflect.TypeOf(&context.APIContext{}):     func(req *http.Request) ResponseStatusProvider { return context.GetAPIContext(req) },
-       reflect.TypeOf(&context.Context{}):        func(req *http.Request) ResponseStatusProvider { return context.GetContext(req) },
+       reflect.TypeOf(&context.Context{}):        func(req *http.Request) ResponseStatusProvider { return context.GetWebContext(req) },
        reflect.TypeOf(&context.PrivateContext{}): func(req *http.Request) ResponseStatusProvider { return context.GetPrivateContext(req) },
 }
 
index 89b91a5a483a5d1b0815ef81e46f377c7dd4e2a2..4635cd7cb60fae1667810fa76597d5baa97a88e5 100644 (file)
@@ -59,7 +59,7 @@ func Contexter() func(next http.Handler) http.Handler {
        return func(next http.Handler) http.Handler {
                return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
                        base, baseCleanUp := context.NewBaseContext(resp, req)
-                       ctx := context.Context{
+                       ctx := &context.Context{
                                Base:    base,
                                Flash:   &middleware.Flash{},
                                Render:  rnd,
@@ -67,6 +67,7 @@ func Contexter() func(next http.Handler) http.Handler {
                        }
                        defer baseCleanUp()
 
+                       ctx.AppendContextValue(context.WebContextKey, ctx)
                        ctx.Data.MergeFrom(middleware.CommonTemplateContextData())
                        ctx.Data.MergeFrom(middleware.ContextData{
                                "locale":        ctx.Locale,
index 52c07cfa26e6c09535b375d5ded315344e8918aa..f09a22b1e601863792f8d03a1d8a275129f981ff 100644 (file)
@@ -4,7 +4,6 @@
 package install
 
 import (
-       goctx "context"
        "fmt"
        "html"
        "net/http"
@@ -18,7 +17,7 @@ import (
 )
 
 // Routes registers the installation routes
-func Routes(ctx goctx.Context) *web.Route {
+func Routes() *web.Route {
        base := web.NewRoute()
        base.Use(common.ProtocolMiddlewares()...)
        base.RouteMethods("/assets/*", "GET, HEAD", public.AssetsHandlerFunc("/assets/"))
index e3d2a4246740987e6a89c5558f2ea1f4972aa26b..fcbd052977427b3e85fa6af33b3f893fd0aa53a5 100644 (file)
@@ -1,24 +1,41 @@
-// Copyright 2021 The Gitea Authors. All rights reserved.
+// Copyright 2023 The Gitea Authors. All rights reserved.
 // SPDX-License-Identifier: MIT
 
 package install
 
 import (
-       "context"
+       "net/http/httptest"
+       "path/filepath"
        "testing"
 
+       "code.gitea.io/gitea/models/unittest"
+
        "github.com/stretchr/testify/assert"
 )
 
 func TestRoutes(t *testing.T) {
-       // TODO: this test seems not really testing the handlers
-       ctx, cancel := context.WithCancel(context.Background())
-       defer cancel()
-       base := Routes(ctx)
-       assert.NotNil(t, base)
-       r := base.R.Routes()[1]
-       routes := r.SubRoutes.Routes()[0]
-       assert.EqualValues(t, "/", routes.Pattern)
-       assert.Nil(t, routes.SubRoutes)
-       assert.Len(t, routes.Handlers, 2)
+       r := Routes()
+       assert.NotNil(t, r)
+
+       w := httptest.NewRecorder()
+       req := httptest.NewRequest("GET", "/", nil)
+       r.ServeHTTP(w, req)
+       assert.EqualValues(t, 200, w.Code)
+       assert.Contains(t, w.Body.String(), `class="page-content install"`)
+
+       w = httptest.NewRecorder()
+       req = httptest.NewRequest("GET", "/no-such", nil)
+       r.ServeHTTP(w, req)
+       assert.EqualValues(t, 404, w.Code)
+
+       w = httptest.NewRecorder()
+       req = httptest.NewRequest("GET", "/assets/img/gitea.svg", nil)
+       r.ServeHTTP(w, req)
+       assert.EqualValues(t, 200, w.Code)
+}
+
+func TestMain(m *testing.M) {
+       unittest.MainTest(m, &unittest.TestOptions{
+               GiteaRootPath: filepath.Join("..", ".."),
+       })
 }
index c230d33398c82837e94dbb87b192d7d78670955e..395fc9425f22b955acdaeeedc30245dc0e978219 100644 (file)
@@ -1405,7 +1405,7 @@ func registerRoutes(m *web.Route) {
        }
 
        m.NotFound(func(w http.ResponseWriter, req *http.Request) {
-               ctx := context.GetContext(req)
+               ctx := context.GetWebContext(req)
                ctx.NotFound("", nil)
        })
 }
index 905c776e5871e4bed6a89234e75bf8390f3dc0e2..c7fdc56cbed07c809484a1b80bdb12783b9714b1 100644 (file)
@@ -92,7 +92,7 @@ func handleSignIn(resp http.ResponseWriter, req *http.Request, sess SessionStore
        middleware.SetLocaleCookie(resp, user.Language, 0)
 
        // Clear whatever CSRF has right now, force to generate a new one
-       if ctx := gitea_context.GetContext(req); ctx != nil {
+       if ctx := gitea_context.GetWebContext(req); ctx != nil {
                ctx.Csrf.DeleteCookie(ctx)
        }
 }