chatdesk-ui/auth_v2.169.0/internal/models/identity_test.go

118 lines
2.8 KiB
Go

package models
import (
"testing"
"github.com/gofrs/uuid"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/supabase/auth/internal/conf"
"github.com/supabase/auth/internal/storage"
"github.com/supabase/auth/internal/storage/test"
)
type IdentityTestSuite struct {
suite.Suite
db *storage.Connection
}
func (ts *IdentityTestSuite) SetupTest() {
TruncateAll(ts.db)
}
func TestIdentity(t *testing.T) {
globalConfig, err := conf.LoadGlobal(modelsTestConfig)
require.NoError(t, err)
conn, err := test.SetupDBConnection(globalConfig)
require.NoError(t, err)
ts := &IdentityTestSuite{
db: conn,
}
defer ts.db.Close()
suite.Run(t, ts)
}
func (ts *IdentityTestSuite) TestNewIdentity() {
u := ts.createUserWithEmail("test@supabase.io")
ts.Run("Test create identity with no provider id", func() {
identityData := map[string]interface{}{}
_, err := NewIdentity(u, "email", identityData)
require.Error(ts.T(), err, "Error missing provider id")
})
ts.Run("Test create identity successfully", func() {
identityData := map[string]interface{}{"sub": uuid.Nil.String()}
identity, err := NewIdentity(u, "email", identityData)
require.NoError(ts.T(), err)
require.Equal(ts.T(), u.ID, identity.UserID)
})
}
func (ts *IdentityTestSuite) TestFindUserIdentities() {
u := ts.createUserWithIdentity("test@supabase.io")
identities, err := FindIdentitiesByUserID(ts.db, u.ID)
require.NoError(ts.T(), err)
require.Len(ts.T(), identities, 1)
}
func (ts *IdentityTestSuite) TestUpdateIdentityData() {
u := ts.createUserWithIdentity("test@supabase.io")
identities, err := FindIdentitiesByUserID(ts.db, u.ID)
require.NoError(ts.T(), err)
updates := map[string]interface{}{
"sub": nil,
"name": nil,
"email": nil,
}
for _, identity := range identities {
err := identity.UpdateIdentityData(ts.db, updates)
require.NoError(ts.T(), err)
}
updatedIdentities, err := FindIdentitiesByUserID(ts.db, u.ID)
require.NoError(ts.T(), err)
for _, identity := range updatedIdentities {
require.Empty(ts.T(), identity.IdentityData)
}
}
func (ts *IdentityTestSuite) createUserWithEmail(email string) *User {
user, err := NewUser("", email, "secret", "test", nil)
require.NoError(ts.T(), err)
err = ts.db.Create(user)
require.NoError(ts.T(), err)
return user
}
func (ts *IdentityTestSuite) createUserWithIdentity(email string) *User {
user, err := NewUser("", email, "secret", "test", nil)
require.NoError(ts.T(), err)
err = ts.db.Create(user)
require.NoError(ts.T(), err)
identityData := map[string]interface{}{
"sub": uuid.Nil.String(),
"name": "test",
"email": email,
}
require.NoError(ts.T(), err)
identity, err := NewIdentity(user, "email", identityData)
require.NoError(ts.T(), err)
err = ts.db.Create(identity)
require.NoError(ts.T(), err)
return user
}