diff options
author | Joe Chen <jc@unknwon.io> | 2022-06-12 10:34:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-12 10:34:12 +0800 |
commit | 2e19f5a3c8193776685a5e9fea9ca8663f14dd8d (patch) | |
tree | b6163f5fa165034028c668f10140fc750ff5e4c3 /internal/db/users_test.go | |
parent | 63cb76106afbcbdd6cc01dad8bcb2a4a35b2fa97 (diff) |
db: add tests for authentication through login sources (#7049)
Diffstat (limited to 'internal/db/users_test.go')
-rw-r--r-- | internal/db/users_test.go | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/internal/db/users_test.go b/internal/db/users_test.go index d691110a..299a1be6 100644 --- a/internal/db/users_test.go +++ b/internal/db/users_test.go @@ -6,6 +6,7 @@ package db import ( "context" + "fmt" "testing" "time" @@ -51,8 +52,6 @@ func TestUsers(t *testing.T) { } } -// TODO: Only local account is tested, tests for external account will be added -// along with addressing https://github.com/gogs/gogs/issues/6115. func usersAuthenticate(t *testing.T, db *users) { ctx := context.Background() @@ -87,6 +86,67 @@ func usersAuthenticate(t *testing.T, db *users) { require.NoError(t, err) assert.Equal(t, alice.Name, user.Name) }) + + t.Run("login source mismatch", func(t *testing.T) { + _, err := db.Authenticate(ctx, alice.Email, password, 1) + gotErr := fmt.Sprintf("%v", err) + wantErr := ErrLoginSourceMismatch{args: map[string]interface{}{"actual": 0, "expect": 1}}.Error() + assert.Equal(t, wantErr, gotErr) + }) + + t.Run("via login source", func(t *testing.T) { + mockLoginSources := NewMockLoginSourcesStore() + mockLoginSources.GetByIDFunc.SetDefaultHook(func(ctx context.Context, id int64) (*LoginSource, error) { + mockProvider := NewMockProvider() + mockProvider.AuthenticateFunc.SetDefaultReturn(&auth.ExternalAccount{}, nil) + s := &LoginSource{ + IsActived: true, + Provider: mockProvider, + } + return s, nil + }) + setMockLoginSourcesStore(t, mockLoginSources) + + bob, err := db.Create(ctx, "bob", "bob@example.com", + CreateUserOpts{ + Password: password, + LoginSource: 1, + }, + ) + require.NoError(t, err) + + user, err := db.Authenticate(ctx, bob.Email, password, 1) + require.NoError(t, err) + assert.Equal(t, bob.Name, user.Name) + }) + + t.Run("new user via login source", func(t *testing.T) { + mockLoginSources := NewMockLoginSourcesStore() + mockLoginSources.GetByIDFunc.SetDefaultHook(func(ctx context.Context, id int64) (*LoginSource, error) { + mockProvider := NewMockProvider() + mockProvider.AuthenticateFunc.SetDefaultReturn( + &auth.ExternalAccount{ + Name: "cindy", + Email: "cindy@example.com", + }, + nil, + ) + s := &LoginSource{ + IsActived: true, + Provider: mockProvider, + } + return s, nil + }) + setMockLoginSourcesStore(t, mockLoginSources) + + user, err := db.Authenticate(ctx, "cindy", password, 1) + require.NoError(t, err) + assert.Equal(t, "cindy", user.Name) + + user, err = db.GetByUsername(ctx, "cindy") + require.NoError(t, err) + assert.Equal(t, "cindy@example.com", user.Email) + }) } func usersCreate(t *testing.T, db *users) { |