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 }