forked from baron/baron-sso
정합성 위반사항 확인 및 조치기능 추가
This commit is contained in:
@@ -88,6 +88,110 @@ func TestCheckDataIntegrityDetectsTenantAndUserProblems(t *testing.T) {
|
||||
requireIntegrityCheck(t, report, "user_integrity", "orphan_user_login_id_users", domain.DataIntegrityStatusFail, 1)
|
||||
}
|
||||
|
||||
func TestListAndDeleteOrphanUserLoginIDsOnlyDeletesRevalidatedTargets(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
suffix := uuid.NewString()
|
||||
|
||||
validTenant := domain.Tenant{
|
||||
ID: uuid.NewString(),
|
||||
Name: "Valid Tenant " + suffix,
|
||||
Slug: "valid-tenant-" + suffix,
|
||||
Type: domain.TenantTypeCompany,
|
||||
Status: domain.TenantStatusActive,
|
||||
}
|
||||
deletedTenant := domain.Tenant{
|
||||
ID: uuid.NewString(),
|
||||
Name: "Deleted Tenant " + suffix,
|
||||
Slug: "deleted-tenant-" + suffix,
|
||||
Type: domain.TenantTypeCompany,
|
||||
Status: domain.TenantStatusActive,
|
||||
}
|
||||
require.NoError(t, testDB.Create(&validTenant).Error)
|
||||
require.NoError(t, testDB.Create(&deletedTenant).Error)
|
||||
|
||||
validUser := domain.User{
|
||||
ID: uuid.NewString(),
|
||||
Email: "valid-login-" + suffix + "@example.com",
|
||||
Name: "Valid Login User",
|
||||
Role: domain.RoleUser,
|
||||
TenantID: &validTenant.ID,
|
||||
Status: domain.UserStatusActive,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
}
|
||||
deletedUser := domain.User{
|
||||
ID: uuid.NewString(),
|
||||
Email: "deleted-login-" + suffix + "@example.com",
|
||||
Name: "Deleted Login User",
|
||||
Role: domain.RoleUser,
|
||||
TenantID: &validTenant.ID,
|
||||
Status: domain.UserStatusActive,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
}
|
||||
require.NoError(t, testDB.Create(&validUser).Error)
|
||||
require.NoError(t, testDB.Create(&deletedUser).Error)
|
||||
|
||||
validLogin := domain.UserLoginID{
|
||||
ID: uuid.NewString(),
|
||||
UserID: validUser.ID,
|
||||
TenantID: validTenant.ID,
|
||||
FieldKey: "emp_id",
|
||||
LoginID: "VALID-" + suffix,
|
||||
}
|
||||
deletedTenantLogin := domain.UserLoginID{
|
||||
ID: uuid.NewString(),
|
||||
UserID: validUser.ID,
|
||||
TenantID: deletedTenant.ID,
|
||||
FieldKey: "emp_id",
|
||||
LoginID: "DELETED-TENANT-" + suffix,
|
||||
}
|
||||
deletedUserLogin := domain.UserLoginID{
|
||||
ID: uuid.NewString(),
|
||||
UserID: deletedUser.ID,
|
||||
TenantID: validTenant.ID,
|
||||
FieldKey: "emp_id",
|
||||
LoginID: "DELETED-USER-" + suffix,
|
||||
}
|
||||
require.NoError(t, testDB.Create(&validLogin).Error)
|
||||
require.NoError(t, testDB.Create(&deletedTenantLogin).Error)
|
||||
require.NoError(t, testDB.Create(&deletedUserLogin).Error)
|
||||
require.NoError(t, testDB.Delete(&domain.Tenant{}, "id = ?", deletedTenant.ID).Error)
|
||||
require.NoError(t, testDB.Delete(&domain.User{}, "id = ?", deletedUser.ID).Error)
|
||||
|
||||
items, err := ListOrphanUserLoginIDs(ctx, testDB, nil)
|
||||
require.NoError(t, err)
|
||||
orphanReasons := map[string][]string{}
|
||||
for _, item := range items {
|
||||
orphanReasons[item.ID] = item.Reasons
|
||||
}
|
||||
require.Equal(t, []string{"deleted_tenant"}, orphanReasons[deletedTenantLogin.ID])
|
||||
require.Equal(t, []string{"deleted_user"}, orphanReasons[deletedUserLogin.ID])
|
||||
require.NotContains(t, orphanReasons, validLogin.ID)
|
||||
|
||||
result, err := DeleteOrphanUserLoginIDs(ctx, testDB, []string{
|
||||
deletedTenantLogin.ID,
|
||||
validLogin.ID,
|
||||
"00000000-0000-0000-0000-000000000000",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(1), result.DeletedCount)
|
||||
require.Len(t, result.Deleted, 1)
|
||||
require.Equal(t, deletedTenantLogin.ID, result.Deleted[0].ID)
|
||||
require.ElementsMatch(t, []string{
|
||||
validLogin.ID,
|
||||
"00000000-0000-0000-0000-000000000000",
|
||||
}, result.SkippedIDs)
|
||||
|
||||
var deletedTenantLoginCount int64
|
||||
require.NoError(t, testDB.Model(&domain.UserLoginID{}).Where("id = ?", deletedTenantLogin.ID).Count(&deletedTenantLoginCount).Error)
|
||||
require.Equal(t, int64(0), deletedTenantLoginCount)
|
||||
|
||||
var validLoginCount int64
|
||||
require.NoError(t, testDB.Model(&domain.UserLoginID{}).Where("id = ?", validLogin.ID).Count(&validLoginCount).Error)
|
||||
require.Equal(t, int64(1), validLoginCount)
|
||||
}
|
||||
|
||||
func requireIntegrityCheck(t *testing.T, report domain.DataIntegrityReport, sectionKey, checkKey string, status domain.DataIntegrityStatus, count int64) {
|
||||
t.Helper()
|
||||
for _, section := range report.Sections {
|
||||
|
||||
Reference in New Issue
Block a user