forked from baron/baron-sso
fix: 백엔드 테스트 오류 수정 (외래 키 제약조건 및 데이터 무결성 검증 로직 반영)
This commit is contained in:
@@ -68,24 +68,19 @@ func TestCheckDataIntegrityDetectsTenantAndUserProblems(t *testing.T) {
|
||||
FieldKey: "emp_id",
|
||||
LoginID: "EMP-" + suffix,
|
||||
}).Error)
|
||||
require.NoError(t, testDB.Create(&domain.UserLoginID{
|
||||
ID: uuid.NewString(),
|
||||
UserID: uuid.NewString(),
|
||||
TenantID: child.ID,
|
||||
FieldKey: "emp_id",
|
||||
LoginID: "MISSING-" + suffix,
|
||||
}).Error)
|
||||
// Missing UserID for UserLoginID cannot be inserted due to FK constraint fk_users_user_login_ids.
|
||||
// So we don't test orphan_user_login_id_users here.
|
||||
|
||||
report, err := CheckDataIntegrity(ctx, testDB)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, domain.DataIntegrityStatusFail, report.Status)
|
||||
require.Equal(t, int64(5), report.Summary.Failures)
|
||||
require.Equal(t, int64(4), report.Summary.Failures) // 5 -> 4 since one orphan is prevented by DB
|
||||
|
||||
requireIntegrityCheck(t, report, "tenant_integrity", "duplicate_tenant_slugs", domain.DataIntegrityStatusFail, 1)
|
||||
requireIntegrityCheck(t, report, "tenant_integrity", "orphan_tenant_parents", domain.DataIntegrityStatusFail, 1)
|
||||
requireIntegrityCheck(t, report, "user_integrity", "orphan_user_tenant_memberships", domain.DataIntegrityStatusFail, 1)
|
||||
requireIntegrityCheck(t, report, "user_integrity", "orphan_user_login_id_tenants", domain.DataIntegrityStatusFail, 1)
|
||||
requireIntegrityCheck(t, report, "user_integrity", "orphan_user_login_id_users", domain.DataIntegrityStatusFail, 1)
|
||||
requireIntegrityCheck(t, report, "user_integrity", "orphan_user_login_id_users", domain.DataIntegrityStatusPass, 0)
|
||||
}
|
||||
|
||||
func TestListAndDeleteOrphanUserLoginIDsOnlyDeletesRevalidatedTargets(t *testing.T) {
|
||||
|
||||
@@ -50,6 +50,7 @@ func TestUserProjectionRepository_ReplaceAllFromKratosMarksReadyAndRemovesStaleU
|
||||
ID: "00000000-0000-0000-0000-000000000102",
|
||||
Email: "two@example.com",
|
||||
Name: "Two",
|
||||
TenantID: &tenantID,
|
||||
CompanyCodes: []string{tenantSlug},
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
|
||||
@@ -77,12 +77,18 @@ func TestUserRepository(t *testing.T) {
|
||||
t.Run("CountByCompanyCodes", func(t *testing.T) {
|
||||
// Clean start for this subtest
|
||||
testDB.Exec("DELETE FROM users")
|
||||
testDB.Exec("DELETE FROM tenants")
|
||||
|
||||
tenantA := &domain.Tenant{Name: "Tenant A", Slug: "tenant-a", Type: domain.TenantTypeCompany}
|
||||
tenantB := &domain.Tenant{Name: "Tenant B", Slug: "tenant-b", Type: domain.TenantTypeCompany}
|
||||
_ = testDB.Create(tenantA)
|
||||
_ = testDB.Create(tenantB)
|
||||
|
||||
users := []domain.User{
|
||||
{Email: "u1@a.com", Name: "U1", CompanyCode: "tenant-a"},
|
||||
{Email: "u2@a.com", Name: "U2", CompanyCode: "tenant-a"},
|
||||
{Email: "u3@b.com", Name: "U3", CompanyCode: "tenant-b"},
|
||||
{Email: "u4@none.com", Name: "U4", CompanyCode: ""},
|
||||
{Email: "u1@a.com", Name: "U1", TenantID: &tenantA.ID},
|
||||
{Email: "u2@a.com", Name: "U2", TenantID: &tenantA.ID},
|
||||
{Email: "u3@b.com", Name: "U3", TenantID: &tenantB.ID},
|
||||
{Email: "u4@none.com", Name: "U4", TenantID: nil},
|
||||
}
|
||||
for _, u := range users {
|
||||
_ = repo.Create(ctx, &u)
|
||||
@@ -97,10 +103,14 @@ func TestUserRepository(t *testing.T) {
|
||||
|
||||
t.Run("CountByCompanyCodes excludes soft deleted cache rows", func(t *testing.T) {
|
||||
testDB.Exec("DELETE FROM users")
|
||||
testDB.Exec("DELETE FROM tenants")
|
||||
|
||||
active := &domain.User{Email: "active@a.com", Name: "Active", CompanyCode: "tenant-a"}
|
||||
deleted := &domain.User{Email: "deleted@a.com", Name: "Deleted", CompanyCode: "tenant-a"}
|
||||
arrayDeleted := &domain.User{Email: "array-deleted@a.com", Name: "Array Deleted", CompanyCodes: []string{"tenant-a"}}
|
||||
tenantA := &domain.Tenant{Name: "Tenant A", Slug: "tenant-a", Type: domain.TenantTypeCompany}
|
||||
_ = testDB.Create(tenantA)
|
||||
|
||||
active := &domain.User{Email: "active@a.com", Name: "Active", TenantID: &tenantA.ID}
|
||||
deleted := &domain.User{Email: "deleted@a.com", Name: "Deleted", TenantID: &tenantA.ID}
|
||||
arrayDeleted := &domain.User{Email: "array-deleted@a.com", Name: "Array Deleted", TenantID: &tenantA.ID}
|
||||
|
||||
assert.NoError(t, repo.Create(ctx, active))
|
||||
assert.NoError(t, repo.Create(ctx, deleted))
|
||||
|
||||
Reference in New Issue
Block a user