init push
This commit is contained in:
101
internal/repository/mysql/user_roles_test.go
Normal file
101
internal/repository/mysql/user_roles_test.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"wucher/internal/domain/auth"
|
||||
"wucher/internal/domain/user"
|
||||
"wucher/internal/shared/pkg/uuidv7"
|
||||
)
|
||||
|
||||
func TestUserRepository_SyncsAndLoadsUserRoles(t *testing.T) {
|
||||
db := openDBTestSQLite(t)
|
||||
if err := AutoMigrate(db); err != nil {
|
||||
t.Fatalf("auto migrate: %v", err)
|
||||
}
|
||||
|
||||
pilotRoleID := uuidv7.MustBytes()
|
||||
chiefPilotRoleID := uuidv7.MustBytes()
|
||||
staffRoleID := uuidv7.MustBytes()
|
||||
roles := []auth.Role{
|
||||
{ID: pilotRoleID, Code: "pilot", Name: "pilot", Description: "Pilot"},
|
||||
{ID: chiefPilotRoleID, Code: "chief_pilot", Name: "chief_pilot", Description: "Chief Pilot"},
|
||||
{ID: staffRoleID, Code: "staff", Name: "staff", Description: "Staff"},
|
||||
}
|
||||
if err := db.Create(&roles).Error; err != nil {
|
||||
t.Fatalf("create roles: %v", err)
|
||||
}
|
||||
|
||||
repo := NewUserRepository(db)
|
||||
ctx := context.Background()
|
||||
u := &user.User{
|
||||
Email: "multi-role@example.com",
|
||||
Username: "multi.role",
|
||||
FirstName: "Multi",
|
||||
LastName: "Role",
|
||||
Timezone: "UTC",
|
||||
RoleID: pilotRoleID,
|
||||
RoleIDs: [][]byte{pilotRoleID, chiefPilotRoleID},
|
||||
}
|
||||
if err := repo.Create(ctx, u); err != nil {
|
||||
t.Fatalf("create user: %v", err)
|
||||
}
|
||||
|
||||
var count int64
|
||||
if err := db.Model(&auth.UserRole{}).Where("user_id = ?", u.ID).Count(&count).Error; err != nil {
|
||||
t.Fatalf("count user_roles: %v", err)
|
||||
}
|
||||
if count != 2 {
|
||||
t.Fatalf("expected 2 user_roles rows, got %d", count)
|
||||
}
|
||||
|
||||
got, err := repo.GetByID(ctx, u.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("get by id: %v", err)
|
||||
}
|
||||
if got == nil {
|
||||
t.Fatalf("expected user")
|
||||
}
|
||||
if len(got.RoleIDs) != 2 || len(got.Roles) != 2 {
|
||||
t.Fatalf("expected two roles loaded, got roleIDs=%d roles=%d", len(got.RoleIDs), len(got.Roles))
|
||||
}
|
||||
if got.Roles[0].Name != "pilot" {
|
||||
t.Fatalf("expected primary role first, got %q", got.Roles[0].Name)
|
||||
}
|
||||
|
||||
list, total, err := repo.List(ctx, "", "", 10, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("list users: %v", err)
|
||||
}
|
||||
if total != 1 || len(list) != 1 || len(list[0].Roles) != 2 {
|
||||
t.Fatalf("expected list to include two roles, total=%d len=%d roles=%d", total, len(list), len(list[0].Roles))
|
||||
}
|
||||
|
||||
got.RoleID = staffRoleID
|
||||
got.RoleIDs = [][]byte{staffRoleID}
|
||||
if err := repo.Update(ctx, got); err != nil {
|
||||
t.Fatalf("update user roles: %v", err)
|
||||
}
|
||||
|
||||
got, err = repo.GetByID(ctx, u.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("get by id after update: %v", err)
|
||||
}
|
||||
if got == nil {
|
||||
t.Fatalf("expected user after update")
|
||||
}
|
||||
if len(got.Roles) != 1 || got.Roles[0].Name != "staff" {
|
||||
t.Fatalf("expected roles replaced with staff, got %+v", got.Roles)
|
||||
}
|
||||
|
||||
if err := repo.Delete(ctx, u.ID); err != nil {
|
||||
t.Fatalf("delete user: %v", err)
|
||||
}
|
||||
if err := db.Model(&auth.UserRole{}).Where("user_id = ?", u.ID).Count(&count).Error; err != nil {
|
||||
t.Fatalf("count user_roles after delete: %v", err)
|
||||
}
|
||||
if count != 0 {
|
||||
t.Fatalf("expected user_roles deleted, got %d", count)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user