58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package auth
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
"senlinai-agent/backend/internal/domain"
|
|
)
|
|
|
|
func TestRegisterWithInviteCreatesUser(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database, "test-secret")
|
|
token, err := service.CreateInvite(1, "lead@example.com")
|
|
require.NoError(t, err)
|
|
|
|
user, err := service.RegisterWithInvite(token, "lead@example.com", "Lead", "password123")
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, "lead@example.com", user.Email)
|
|
require.NotEmpty(t, user.PasswordHash)
|
|
require.NotEqual(t, "password123", user.PasswordHash)
|
|
}
|
|
|
|
func TestRegisterWithInviteRejectsWrongEmail(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database, "test-secret")
|
|
token, err := service.CreateInvite(1, "lead@example.com")
|
|
require.NoError(t, err)
|
|
|
|
_, err = service.RegisterWithInvite(token, "other@example.com", "Other", "password123")
|
|
|
|
require.ErrorContains(t, err, "invite email mismatch")
|
|
}
|
|
|
|
func TestLoginRejectsInvalidPassword(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database, "test-secret")
|
|
token, err := service.CreateInvite(1, "lead@example.com")
|
|
require.NoError(t, err)
|
|
_, err = service.RegisterWithInvite(token, "lead@example.com", "Lead", "password123")
|
|
require.NoError(t, err)
|
|
|
|
_, err = service.Login("lead@example.com", "wrong-password")
|
|
|
|
require.ErrorContains(t, err, "invalid credentials")
|
|
}
|
|
|
|
func newTestDB(t *testing.T) *gorm.DB {
|
|
t.Helper()
|
|
database, err := gorm.Open(sqlite.Open(fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())), &gorm.Config{})
|
|
require.NoError(t, err)
|
|
require.NoError(t, domain.AutoMigrate(database))
|
|
return database
|
|
}
|