75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"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 FactorTestSuite struct {
|
|
suite.Suite
|
|
db *storage.Connection
|
|
TestFactor *Factor
|
|
}
|
|
|
|
func TestFactor(t *testing.T) {
|
|
globalConfig, err := conf.LoadGlobal(modelsTestConfig)
|
|
require.NoError(t, err)
|
|
conn, err := test.SetupDBConnection(globalConfig)
|
|
require.NoError(t, err)
|
|
ts := &FactorTestSuite{
|
|
db: conn,
|
|
}
|
|
defer ts.db.Close()
|
|
suite.Run(t, ts)
|
|
}
|
|
|
|
func (ts *FactorTestSuite) SetupTest() {
|
|
TruncateAll(ts.db)
|
|
user, err := NewUser("", "agenericemail@gmail.com", "secret", "test", nil)
|
|
require.NoError(ts.T(), err)
|
|
require.NoError(ts.T(), ts.db.Create(user))
|
|
|
|
factor := NewTOTPFactor(user, "asimplename")
|
|
require.NoError(ts.T(), factor.SetSecret("topsecret", false, "", ""))
|
|
require.NoError(ts.T(), ts.db.Create(factor))
|
|
ts.TestFactor = factor
|
|
}
|
|
|
|
func (ts *FactorTestSuite) TestFindFactorByFactorID() {
|
|
n, err := FindFactorByFactorID(ts.db, ts.TestFactor.ID)
|
|
require.NoError(ts.T(), err)
|
|
require.Equal(ts.T(), ts.TestFactor.ID, n.ID)
|
|
|
|
_, err = FindFactorByFactorID(ts.db, uuid.Nil)
|
|
require.EqualError(ts.T(), err, FactorNotFoundError{}.Error())
|
|
}
|
|
|
|
func (ts *FactorTestSuite) TestUpdateStatus() {
|
|
newFactorStatus := FactorStateVerified
|
|
require.NoError(ts.T(), ts.TestFactor.UpdateStatus(ts.db, newFactorStatus))
|
|
require.Equal(ts.T(), newFactorStatus.String(), ts.TestFactor.Status)
|
|
}
|
|
|
|
func (ts *FactorTestSuite) TestUpdateFriendlyName() {
|
|
newName := "newfactorname"
|
|
require.NoError(ts.T(), ts.TestFactor.UpdateFriendlyName(ts.db, newName))
|
|
require.Equal(ts.T(), newName, ts.TestFactor.FriendlyName)
|
|
}
|
|
|
|
func (ts *FactorTestSuite) TestEncodedFactorDoesNotLeakSecret() {
|
|
encodedFactor, err := json.Marshal(ts.TestFactor)
|
|
require.NoError(ts.T(), err)
|
|
|
|
decodedFactor := Factor{}
|
|
json.Unmarshal(encodedFactor, &decodedFactor)
|
|
require.Equal(ts.T(), decodedFactor.Secret, "")
|
|
}
|