chore: build
ci-api / test (push) Failing after 8m7s
ci-web / test (push) Failing after 5m5s

This commit is contained in:
Xor290
2026-09-20 12:18:33 +02:00
parent 8f4c7fa47a
commit 919c807004
174 changed files with 9669 additions and 1308 deletions
+24 -24
View File
@@ -16,27 +16,27 @@ import (
// fakeUserFinder is an in-memory auth.UserFinder used to unit-test
// auth.Service without a real users repository/database.
type fakeUserFinder struct {
byID map[uuid.UUID]*users.User
byEmail map[string]*users.User
byID map[uuid.UUID]*users.User
byUsername map[string]*users.User
}
func newFakeUserFinder() *fakeUserFinder {
return &fakeUserFinder{byID: map[uuid.UUID]*users.User{}, byEmail: map[string]*users.User{}}
return &fakeUserFinder{byID: map[uuid.UUID]*users.User{}, byUsername: map[string]*users.User{}}
}
func (f *fakeUserFinder) add(email, password, role string, active bool) *users.User {
func (f *fakeUserFinder) add(username, password, role string, active bool) *users.User {
hash, err := security.HashPassword(password)
if err != nil {
panic(err)
}
u := &users.User{ID: uuid.New(), Email: email, PasswordHash: hash, Role: role, IsActive: active}
u := &users.User{ID: uuid.New(), Username: username, PasswordHash: hash, Role: role, IsActive: active}
f.byID[u.ID] = u
f.byEmail[u.Email] = u
f.byUsername[u.Username] = u
return u
}
func (f *fakeUserFinder) FindByEmail(_ context.Context, email string) (*users.User, error) {
u, ok := f.byEmail[email]
func (f *fakeUserFinder) FindByUsername(_ context.Context, username string) (*users.User, error) {
u, ok := f.byUsername[username]
if !ok {
return nil, users.ErrNotFound
}
@@ -109,28 +109,28 @@ func (f *fakeRefreshStore) RevokeAllForUser(_ context.Context, _ security.Audien
func TestService_Login_Success(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, true)
finder.add("admin", "correct-password", users.RoleAdmin, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
pair, user, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "correct-password")
pair, user, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "correct-password")
if err != nil {
t.Fatalf("Login() error = %v", err)
}
if pair.AccessToken == "" || pair.RefreshToken == "" {
t.Fatal("Login() returned an empty token pair")
}
if user.Email != "admin@example.com" {
t.Fatalf("Login() user = %+v, want email admin@example.com", user)
if user.Username != "admin" {
t.Fatalf("Login() user = %+v, want username admin", user)
}
}
func TestService_Login_WrongPasswordRejected(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, true)
finder.add("admin", "correct-password", users.RoleAdmin, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "wrong-password")
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "wrong-password")
if !errors.Is(err, auth.ErrInvalidCredentials) {
t.Fatalf("Login() error = %v, want ErrInvalidCredentials", err)
}
@@ -140,10 +140,10 @@ func TestService_Login_WrongRoleSpaceRejected(t *testing.T) {
// A customer account must not be able to log into the admin space, even
// with the correct password -- the two spaces are strictly separated.
finder := newFakeUserFinder()
finder.add("shopper@example.com", "correct-password", users.RoleCustomer, true)
finder.add("shopper", "correct-password", users.RoleCustomer, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "shopper@example.com", "correct-password")
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "shopper", "correct-password")
if !errors.Is(err, auth.ErrInvalidCredentials) {
t.Fatalf("Login() error = %v, want ErrInvalidCredentials for a customer logging into the admin space", err)
}
@@ -151,10 +151,10 @@ func TestService_Login_WrongRoleSpaceRejected(t *testing.T) {
func TestService_Login_DisabledAccountRejected(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, false)
finder.add("admin", "correct-password", users.RoleAdmin, false)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "correct-password")
_, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "correct-password")
if !errors.Is(err, auth.ErrAccountDisabled) {
t.Fatalf("Login() error = %v, want ErrAccountDisabled", err)
}
@@ -162,10 +162,10 @@ func TestService_Login_DisabledAccountRejected(t *testing.T) {
func TestService_Refresh_RotatesToken(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, true)
finder.add("admin", "correct-password", users.RoleAdmin, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "correct-password")
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "correct-password")
if err != nil {
t.Fatalf("Login() error = %v", err)
}
@@ -181,10 +181,10 @@ func TestService_Refresh_RotatesToken(t *testing.T) {
func TestService_Refresh_RejectsReusedToken(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, true)
finder.add("admin", "correct-password", users.RoleAdmin, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "correct-password")
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "correct-password")
if err != nil {
t.Fatalf("Login() error = %v", err)
}
@@ -200,10 +200,10 @@ func TestService_Refresh_RejectsReusedToken(t *testing.T) {
func TestService_Logout_RevokesToken(t *testing.T) {
finder := newFakeUserFinder()
finder.add("admin@example.com", "correct-password", users.RoleAdmin, true)
finder.add("admin", "correct-password", users.RoleAdmin, true)
svc := auth.NewService(finder, newFakeRefreshStore(), "test-secret", time.Minute, time.Hour)
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin@example.com", "correct-password")
pair, _, err := svc.Login(context.Background(), security.AudienceAdmin, users.RoleAdmin, "admin", "correct-password")
if err != nil {
t.Fatalf("Login() error = %v", err)
}