forked from baron/baron-sso
테넌트 목록 조회 cursor기반으로 재구성. 사용자 metadata 미사용 필드 제거
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"baron-sso-backend/internal/domain"
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestClearOrphanUserTenantMemberships(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
repo := NewUserRepository(testDB)
|
||||
tenantRepo := NewTenantRepository(testDB)
|
||||
|
||||
require.NoError(t, testDB.Exec("DELETE FROM user_login_ids").Error)
|
||||
require.NoError(t, testDB.Exec("DELETE FROM users").Error)
|
||||
require.NoError(t, testDB.Exec("DELETE FROM tenant_domains").Error)
|
||||
require.NoError(t, testDB.Unscoped().Where("slug IN ?", []string{"orphan-active", "orphan-deleted"}).Delete(&domain.Tenant{}).Error)
|
||||
|
||||
activeTenant := &domain.Tenant{Name: "Active Tenant", Slug: "orphan-active", Type: domain.TenantTypeCompany}
|
||||
deletedTenant := &domain.Tenant{Name: "Deleted Tenant", Slug: "orphan-deleted", Type: domain.TenantTypeCompany}
|
||||
require.NoError(t, tenantRepo.Create(ctx, activeTenant))
|
||||
require.NoError(t, tenantRepo.Create(ctx, deletedTenant))
|
||||
require.NoError(t, testDB.Delete(&domain.Tenant{}, "id = ?", deletedTenant.ID).Error)
|
||||
|
||||
activeUser := &domain.User{
|
||||
Email: "active-membership@example.com",
|
||||
Name: "Active Membership",
|
||||
Role: "user",
|
||||
TenantID: &activeTenant.ID,
|
||||
CompanyCode: activeTenant.Slug,
|
||||
CompanyCodes: []string{activeTenant.Slug},
|
||||
}
|
||||
orphanUser := &domain.User{
|
||||
Email: "orphan-membership@example.com",
|
||||
Name: "Orphan Membership",
|
||||
Role: "user",
|
||||
TenantID: &deletedTenant.ID,
|
||||
CompanyCode: deletedTenant.Slug,
|
||||
CompanyCodes: []string{deletedTenant.Slug},
|
||||
}
|
||||
require.NoError(t, repo.Create(ctx, activeUser))
|
||||
require.NoError(t, repo.Create(ctx, orphanUser))
|
||||
|
||||
affected, err := ClearOrphanUserTenantMemberships(ctx, testDB)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(1), affected)
|
||||
|
||||
foundActive, err := repo.FindByEmail(ctx, activeUser.Email)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, foundActive.TenantID)
|
||||
assert.Equal(t, activeTenant.ID, *foundActive.TenantID)
|
||||
assert.Equal(t, activeTenant.Slug, foundActive.CompanyCode)
|
||||
assert.Equal(t, []string{activeTenant.Slug}, []string(foundActive.CompanyCodes))
|
||||
|
||||
foundOrphan, err := repo.FindByEmail(ctx, orphanUser.Email)
|
||||
require.NoError(t, err)
|
||||
assert.Nil(t, foundOrphan.TenantID)
|
||||
assert.Empty(t, foundOrphan.CompanyCode)
|
||||
assert.Empty(t, foundOrphan.CompanyCodes)
|
||||
}
|
||||
Reference in New Issue
Block a user