90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package models
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
"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 RefreshTokenTestSuite struct {
|
|
suite.Suite
|
|
db *storage.Connection
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) SetupTest() {
|
|
TruncateAll(ts.db)
|
|
}
|
|
|
|
func TestRefreshToken(t *testing.T) {
|
|
globalConfig, err := conf.LoadGlobal(modelsTestConfig)
|
|
require.NoError(t, err)
|
|
|
|
conn, err := test.SetupDBConnection(globalConfig)
|
|
require.NoError(t, err)
|
|
|
|
ts := &RefreshTokenTestSuite{
|
|
db: conn,
|
|
}
|
|
defer ts.db.Close()
|
|
|
|
suite.Run(t, ts)
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) TestGrantAuthenticatedUser() {
|
|
u := ts.createUser()
|
|
r, err := GrantAuthenticatedUser(ts.db, u, GrantParams{})
|
|
require.NoError(ts.T(), err)
|
|
|
|
require.NotEmpty(ts.T(), r.Token)
|
|
require.Equal(ts.T(), u.ID, r.UserID)
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) TestGrantRefreshTokenSwap() {
|
|
u := ts.createUser()
|
|
r, err := GrantAuthenticatedUser(ts.db, u, GrantParams{})
|
|
require.NoError(ts.T(), err)
|
|
|
|
s, err := GrantRefreshTokenSwap(&http.Request{}, ts.db, u, r)
|
|
require.NoError(ts.T(), err)
|
|
|
|
_, nr, _, err := FindUserWithRefreshToken(ts.db, r.Token, false)
|
|
require.NoError(ts.T(), err)
|
|
|
|
require.Equal(ts.T(), r.ID, nr.ID)
|
|
require.True(ts.T(), nr.Revoked, "expected old token to be revoked")
|
|
|
|
require.NotEqual(ts.T(), r.ID, s.ID)
|
|
require.Equal(ts.T(), u.ID, s.UserID)
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) TestLogout() {
|
|
u := ts.createUser()
|
|
r, err := GrantAuthenticatedUser(ts.db, u, GrantParams{})
|
|
require.NoError(ts.T(), err)
|
|
|
|
require.NoError(ts.T(), Logout(ts.db, u.ID))
|
|
u, r, _, err = FindUserWithRefreshToken(ts.db, r.Token, false)
|
|
require.Errorf(ts.T(), err, "expected error when there are no refresh tokens to authenticate. user: %v token: %v", u, r)
|
|
|
|
require.True(ts.T(), IsNotFoundError(err), "expected NotFoundError")
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) createUser() *User {
|
|
return ts.createUserWithEmail("david@netlify.com")
|
|
}
|
|
|
|
func (ts *RefreshTokenTestSuite) 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
|
|
}
|