mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 06:21:11 +00:00 
			
		
		
		
	Merge pull request 'auth LinkAccount test coverage' (#803) from earl-warren/forgejo:wip-linkaccount into forgejo-development
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/803
This commit is contained in:
		
				commit
				
					
						7adaafa760
					
				
			
		
					 7 changed files with 112 additions and 18 deletions
				
			
		|  | @ -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) { | ||||
|  |  | |||
|  | @ -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...) | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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)() | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ import ( | |||
| 
 | ||||
| 	"code.gitea.io/gitea/models/auth" | ||||
| 	"code.gitea.io/gitea/models/unittest" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| 	gitea_context "code.gitea.io/gitea/modules/context" | ||||
| 	"code.gitea.io/gitea/modules/graceful" | ||||
| 	"code.gitea.io/gitea/modules/json" | ||||
|  | @ -33,6 +34,7 @@ import ( | |||
| 	"code.gitea.io/gitea/modules/util" | ||||
| 	"code.gitea.io/gitea/modules/web" | ||||
| 	"code.gitea.io/gitea/routers" | ||||
| 	user_service "code.gitea.io/gitea/services/user" | ||||
| 	"code.gitea.io/gitea/tests" | ||||
| 
 | ||||
| 	"github.com/PuerkitoBio/goquery" | ||||
|  | @ -40,7 +42,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 +101,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") | ||||
|  | @ -228,6 +241,21 @@ func getUserToken(t testing.TB, userName string, scope ...auth.AccessTokenScope) | |||
| 	return getTokenForLoggedInUser(t, loginUser(t, userName), scope...) | ||||
| } | ||||
| 
 | ||||
| func createUser(t testing.TB, userName, email, password string) func() { | ||||
| 	u := &user_model.User{ | ||||
| 		Name:               userName, | ||||
| 		Email:              email, | ||||
| 		Passwd:             password, | ||||
| 		MustChangePassword: false, | ||||
| 		LoginType:          auth.Plain, | ||||
| 	} | ||||
| 
 | ||||
| 	assert.NoError(t, user_model.CreateUser(u, &user_model.CreateUserOverwriteOptions{})) | ||||
| 	return func() { | ||||
| 		assert.NoError(t, user_service.DeleteUser(context.Background(), u, true)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func loginUser(t testing.TB, userName string) *TestSession { | ||||
| 	t.Helper() | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										63
									
								
								tests/integration/linkaccount_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								tests/integration/linkaccount_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| // Copyright 2023 The Forgejo Authors. All rights reserved. | ||||
| // SPDX-License-Identifier: MIT | ||||
| 
 | ||||
| package integration | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	gitea_context "code.gitea.io/gitea/modules/context" | ||||
| 	"code.gitea.io/gitea/tests" | ||||
| 
 | ||||
| 	"github.com/markbates/goth" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func TestLinkAccountChoose(t *testing.T) { | ||||
| 	defer tests.PrepareTestEnv(t)() | ||||
| 	username := "linkaccountuser" | ||||
| 	email := "linkaccountuser@example.com" | ||||
| 	password := "linkaccountuser" | ||||
| 	defer createUser(t, username, email, password)() | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		testMiddlewareHook = nil | ||||
| 	}() | ||||
| 
 | ||||
| 	for _, testCase := range []struct { | ||||
| 		gothUser  goth.User | ||||
| 		signupTab string | ||||
| 		signinTab string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			gothUser:  goth.User{}, | ||||
| 			signupTab: "item active", | ||||
| 			signinTab: "item ", | ||||
| 		}, | ||||
| 		{ | ||||
| 			gothUser: goth.User{ | ||||
| 				Email: email, | ||||
| 			}, | ||||
| 			signupTab: "item ", | ||||
| 			signinTab: "item active", | ||||
| 		}, | ||||
| 	} { | ||||
| 		testMiddlewareHook = func(ctx *gitea_context.Context) { | ||||
| 			ctx.Session.Set("linkAccountGothUser", testCase.gothUser) | ||||
| 		} | ||||
| 
 | ||||
| 		req := NewRequest(t, "GET", "/user/link_account") | ||||
| 		resp := MakeRequest(t, req, http.StatusOK) | ||||
| 		assert.Equal(t, resp.Code, http.StatusOK, resp.Body) | ||||
| 		doc := NewHTMLParser(t, resp.Body) | ||||
| 
 | ||||
| 		class, exists := doc.Find(`.new-menu-inner .item[data-tab="auth-link-signup-tab"]`).Attr("class") | ||||
| 		assert.True(t, exists, resp.Body) | ||||
| 		assert.Equal(t, testCase.signupTab, class) | ||||
| 
 | ||||
| 		class, exists = doc.Find(`.new-menu-inner .item[data-tab="auth-link-signin-tab"]`).Attr("class") | ||||
| 		assert.True(t, exists) | ||||
| 		assert.Equal(t, testCase.signinTab, class) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue