diff --git a/src/main/java/net/siegeln/cameleer/saas/tenant/TenantRepository.java b/src/main/java/net/siegeln/cameleer/saas/tenant/TenantRepository.java index 30e355d..107eb21 100644 --- a/src/main/java/net/siegeln/cameleer/saas/tenant/TenantRepository.java +++ b/src/main/java/net/siegeln/cameleer/saas/tenant/TenantRepository.java @@ -13,4 +13,5 @@ public interface TenantRepository extends JpaRepository { Optional findByLogtoOrgId(String logtoOrgId); List findByStatus(TenantStatus status); boolean existsBySlug(String slug); + boolean existsBySlugAndStatusNot(String slug, TenantStatus status); } diff --git a/src/main/java/net/siegeln/cameleer/saas/tenant/TenantService.java b/src/main/java/net/siegeln/cameleer/saas/tenant/TenantService.java index 133c295..8d304cb 100644 --- a/src/main/java/net/siegeln/cameleer/saas/tenant/TenantService.java +++ b/src/main/java/net/siegeln/cameleer/saas/tenant/TenantService.java @@ -24,7 +24,7 @@ public class TenantService { } public TenantEntity create(CreateTenantRequest request, UUID actorId) { - if (tenantRepository.existsBySlug(request.slug())) { + if (tenantRepository.existsBySlugAndStatusNot(request.slug(), TenantStatus.DELETED)) { throw new IllegalArgumentException("Slug already taken"); } diff --git a/src/test/java/net/siegeln/cameleer/saas/tenant/TenantServiceTest.java b/src/test/java/net/siegeln/cameleer/saas/tenant/TenantServiceTest.java index 7be62df..c12af09 100644 --- a/src/test/java/net/siegeln/cameleer/saas/tenant/TenantServiceTest.java +++ b/src/test/java/net/siegeln/cameleer/saas/tenant/TenantServiceTest.java @@ -44,7 +44,7 @@ class TenantServiceTest { var request = new CreateTenantRequest("Acme Corp", "acme-corp", "MID"); var actorId = UUID.randomUUID(); - when(tenantRepository.existsBySlug("acme-corp")).thenReturn(false); + when(tenantRepository.existsBySlugAndStatusNot("acme-corp", TenantStatus.DELETED)).thenReturn(false); when(tenantRepository.save(any(TenantEntity.class))).thenAnswer(inv -> inv.getArgument(0)); var result = tenantService.create(request, actorId); @@ -59,7 +59,7 @@ class TenantServiceTest { void create_throwsForDuplicateSlug() { var request = new CreateTenantRequest("Acme Corp", "acme-corp", null); - when(tenantRepository.existsBySlug("acme-corp")).thenReturn(true); + when(tenantRepository.existsBySlugAndStatusNot("acme-corp", TenantStatus.DELETED)).thenReturn(true); assertThatThrownBy(() -> tenantService.create(request, UUID.randomUUID())) .isInstanceOf(IllegalArgumentException.class) @@ -71,7 +71,7 @@ class TenantServiceTest { var request = new CreateTenantRequest("Acme Corp", "acme-corp", null); var actorId = UUID.randomUUID(); - when(tenantRepository.existsBySlug("acme-corp")).thenReturn(false); + when(tenantRepository.existsBySlugAndStatusNot("acme-corp", TenantStatus.DELETED)).thenReturn(false); when(tenantRepository.save(any(TenantEntity.class))).thenAnswer(inv -> inv.getArgument(0)); tenantService.create(request, actorId); @@ -85,7 +85,7 @@ class TenantServiceTest { void create_defaultsToLowTier() { var request = new CreateTenantRequest("Acme Corp", "acme-corp", null); - when(tenantRepository.existsBySlug("acme-corp")).thenReturn(false); + when(tenantRepository.existsBySlugAndStatusNot("acme-corp", TenantStatus.DELETED)).thenReturn(false); when(tenantRepository.save(any(TenantEntity.class))).thenAnswer(inv -> inv.getArgument(0)); var result = tenantService.create(request, UUID.randomUUID());