forked from baron/baron-sso
네이버 계정 정합성 맞춤
This commit is contained in:
@@ -114,6 +114,89 @@ func TestCanonicalizeLegacyUserStatuses(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCanonicalizeUserAppointmentTenantsUsesTenantUUID(t *testing.T) {
|
||||
db := openBootstrapPostgresTestDB(t)
|
||||
if err := db.AutoMigrate(&domain.Tenant{}, &domain.User{}); err != nil {
|
||||
t.Fatalf("failed to migrate users and tenants tables: %v", err)
|
||||
}
|
||||
|
||||
tenant := domain.Tenant{
|
||||
ID: "30000000-0000-0000-0000-000000000101",
|
||||
Type: domain.TenantTypeOrganization,
|
||||
Name: "통합시스템",
|
||||
Slug: "intigrated-system",
|
||||
Status: domain.TenantStatusActive,
|
||||
}
|
||||
if err := db.Create(&tenant).Error; err != nil {
|
||||
t.Fatalf("failed to create tenant: %v", err)
|
||||
}
|
||||
|
||||
user := domain.User{
|
||||
ID: "30000000-0000-0000-0000-000000000201",
|
||||
Email: "appointment@example.com",
|
||||
Name: "Appointment User",
|
||||
Role: domain.RoleUser,
|
||||
Status: domain.UserStatusActive,
|
||||
Metadata: domain.JSONMap{
|
||||
"additionalAppointments": []any{
|
||||
map[string]any{
|
||||
"tenantId": tenant.ID,
|
||||
"tenantSlug": "tech-planning",
|
||||
"tenantName": "기술기획",
|
||||
"grade": "연구원",
|
||||
},
|
||||
map[string]any{
|
||||
"tenantId": "30000000-0000-0000-0000-000000000999",
|
||||
"tenantSlug": "unknown-old",
|
||||
"tenantName": "Unknown Old",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
if err := db.Create(&user).Error; err != nil {
|
||||
t.Fatalf("failed to create user: %v", err)
|
||||
}
|
||||
|
||||
if err := CanonicalizeUserAppointmentTenants(db); err != nil {
|
||||
t.Fatalf("CanonicalizeUserAppointmentTenants returned error: %v", err)
|
||||
}
|
||||
if err := CanonicalizeUserAppointmentTenants(db); err != nil {
|
||||
t.Fatalf("CanonicalizeUserAppointmentTenants must be idempotent: %v", err)
|
||||
}
|
||||
|
||||
var got domain.User
|
||||
if err := db.First(&got, "id = ?", user.ID).Error; err != nil {
|
||||
t.Fatalf("failed to load canonicalized user: %v", err)
|
||||
}
|
||||
appointments, ok := got.Metadata["additionalAppointments"].([]any)
|
||||
if !ok || len(appointments) != 2 {
|
||||
t.Fatalf("additionalAppointments = %#v, want two appointments", got.Metadata["additionalAppointments"])
|
||||
}
|
||||
first, ok := appointments[0].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("first appointment = %#v, want object", appointments[0])
|
||||
}
|
||||
if first["tenantId"] != tenant.ID {
|
||||
t.Fatalf("tenantId = %#v, want %s", first["tenantId"], tenant.ID)
|
||||
}
|
||||
if first["tenantSlug"] != tenant.Slug {
|
||||
t.Fatalf("tenantSlug = %#v, want %s", first["tenantSlug"], tenant.Slug)
|
||||
}
|
||||
if first["tenantName"] != tenant.Name {
|
||||
t.Fatalf("tenantName = %#v, want %s", first["tenantName"], tenant.Name)
|
||||
}
|
||||
if first["grade"] != "연구원" {
|
||||
t.Fatalf("grade = %#v, want preserved value", first["grade"])
|
||||
}
|
||||
second, ok := appointments[1].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("second appointment = %#v, want object", appointments[1])
|
||||
}
|
||||
if second["tenantSlug"] != "unknown-old" || second["tenantName"] != "Unknown Old" {
|
||||
t.Fatalf("unknown tenant appointment must be preserved: %#v", second)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunSanitizesLegacyUserMetadata(t *testing.T) {
|
||||
db := openBootstrapPostgresTestDB(t)
|
||||
if err := db.AutoMigrate(&domain.User{}); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user