Files
agent/backend/internal/auth/service_test.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
}