aboutsummaryrefslogtreecommitdiff
path: root/internal/db/users_test.go
diff options
context:
space:
mode:
authorJoe Chen <jc@unknwon.io>2022-06-12 10:34:12 +0800
committerGitHub <noreply@github.com>2022-06-12 10:34:12 +0800
commit2e19f5a3c8193776685a5e9fea9ca8663f14dd8d (patch)
treeb6163f5fa165034028c668f10140fc750ff5e4c3 /internal/db/users_test.go
parent63cb76106afbcbdd6cc01dad8bcb2a4a35b2fa97 (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.go64
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) {