diff --git a/src/main/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationService.java b/src/main/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationService.java index ff9bb83..41b68e5 100644 --- a/src/main/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationService.java +++ b/src/main/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationService.java @@ -3,7 +3,10 @@ import de.caritas.cob.statisticsservice.api.exception.httpresponses.StatisticsDisabledException; import de.caritas.cob.statisticsservice.api.service.ApplicationSettingsService; import de.caritas.cob.statisticsservice.api.service.TenantService; +import de.caritas.cob.statisticsservice.api.tenant.SubdomainExtractor; +import de.caritas.cob.statisticsservice.api.tenant.SubdomainTenantResolver; import de.caritas.cob.statisticsservice.api.tenant.TenantContext; +import java.util.Optional; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,6 +28,8 @@ public class StatisticsFeatureAuthorisationService { private final @NonNull TenantService tenantService; + private final @NonNull SubdomainExtractor subdomainExtractor; + private final @NonNull ApplicationSettingsService applicationSettingsService; public void assertStatisticsFeatureIsEnabled() throws StatisticsDisabledException { @@ -59,8 +64,9 @@ private String getMainTenantSubdomain() { } private boolean isStatisticsFeatureEnabledForMultitenancy() { - Long currentTenant = TenantContext.getCurrentTenant(); - RestrictedTenantDTO restrictedTenantData = tenantService.getRestrictedTenantDataNonCached(currentTenant); + Optional currentSubdomain = subdomainExtractor.getCurrentSubdomain(); + RestrictedTenantDTO restrictedTenantData = currentSubdomain.isPresent() ? tenantService.getRestrictedTenantDataBySubdomainNonCached( + currentSubdomain.get()) : tenantService.getRestrictedTenantDataNonCached(TenantContext.getCurrentTenant()); return isStatisticsFeatureEnabled(restrictedTenantData); } diff --git a/src/test/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationServiceTest.java b/src/test/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationServiceTest.java index 122ad65..aff4e44 100644 --- a/src/test/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationServiceTest.java +++ b/src/test/java/de/caritas/cob/statisticsservice/api/authorization/StatisticsFeatureAuthorisationServiceTest.java @@ -1,17 +1,20 @@ package de.caritas.cob.statisticsservice.api.authorization; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import de.caritas.cob.statisticsservice.api.exception.httpresponses.StatisticsDisabledException; import de.caritas.cob.statisticsservice.api.service.ApplicationSettingsService; import de.caritas.cob.statisticsservice.api.service.TenantService; +import de.caritas.cob.statisticsservice.api.tenant.SubdomainExtractor; import de.caritas.cob.statisticsservice.api.tenant.TenantContext; import de.caritas.cob.statisticsservice.applicationsettingsservice.generated.web.model.ApplicationSettingsDTO; import de.caritas.cob.statisticsservice.applicationsettingsservice.generated.web.model.ApplicationSettingsDTOMainTenantSubdomainForSingleDomainMultitenancy; import de.caritas.cob.statisticsservice.tenantservice.generated.web.model.RestrictedTenantDTO; import de.caritas.cob.statisticsservice.tenantservice.generated.web.model.Settings; +import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -23,11 +26,16 @@ @ExtendWith(MockitoExtension.class) class StatisticsFeatureAuthorisationServiceTest { + private static final String MULTIDOMAIN_MULTITENANCY_SUBDOMAIN = "subdomain"; + private static final String SINGLE_DOMAIN_MULTITENANCY_SUBDOMAIN = "app"; @InjectMocks StatisticsFeatureAuthorisationService statisticsFeatureAuthorisationService; @Mock ApplicationSettingsService applicationSettingsService; + + @Mock + SubdomainExtractor subdomainExtractor; @Mock TenantService tenantService; @@ -40,7 +48,7 @@ public void assertStatisticsFeatureIsEnabled_ShouldNotThrowExceptionIfFeatureIsE // when statisticsFeatureAuthorisationService.assertStatisticsFeatureIsEnabled(); // then - Mockito.verify(tenantService).getRestrictedTenantDataNonCached(1L); + verify(tenantService).getRestrictedTenantDataNonCached(1L); } @Test @@ -52,6 +60,23 @@ public void assertStatisticsFeatureIsEnabled_ShouldThrowException_WhenFeatureIsE // when, then assertThrows(StatisticsDisabledException.class, () -> statisticsFeatureAuthorisationService.assertStatisticsFeatureIsEnabled()); + verify(tenantService).getRestrictedTenantDataNonCached(1L); + } + + @Test + public void assertStatisticsFeatureIsEnabled_ShouldThrowException_WhenFeatureIsEnabledAndMultitenanancyOnAndResolvingBySubdomain() { + // given + TenantContext.setCurrentTenant(1L); + Mockito.when(subdomainExtractor.getCurrentSubdomain()).thenReturn(Optional.of( + MULTIDOMAIN_MULTITENANCY_SUBDOMAIN)); + when(tenantService.getRestrictedTenantDataBySubdomainNonCached( + MULTIDOMAIN_MULTITENANCY_SUBDOMAIN)).thenReturn(new RestrictedTenantDTO().settings(new Settings().featureStatisticsEnabled(false))); + ReflectionTestUtils.setField(statisticsFeatureAuthorisationService, "multitenancy", true); + + // when, then + assertThrows(StatisticsDisabledException.class, () -> statisticsFeatureAuthorisationService.assertStatisticsFeatureIsEnabled()); + verify(tenantService).getRestrictedTenantDataBySubdomainNonCached( + MULTIDOMAIN_MULTITENANCY_SUBDOMAIN); } @Test @@ -60,13 +85,16 @@ public void assertStatisticsFeatureIsEnabled_ShouldNotThrowExceptionIfFeatureIsE TenantContext.setCurrentTenant(1L); givenTenantSettingStatisticsFeatureEnabledForSingleDomain(true); when(applicationSettingsService.getApplicationSettings()).thenReturn(new ApplicationSettingsDTO() - .mainTenantSubdomainForSingleDomainMultitenancy(new ApplicationSettingsDTOMainTenantSubdomainForSingleDomainMultitenancy().value("app"))); + .mainTenantSubdomainForSingleDomainMultitenancy(new ApplicationSettingsDTOMainTenantSubdomainForSingleDomainMultitenancy().value( + SINGLE_DOMAIN_MULTITENANCY_SUBDOMAIN))); ReflectionTestUtils.setField(statisticsFeatureAuthorisationService, "multitenancy", false); ReflectionTestUtils.setField(statisticsFeatureAuthorisationService, "multitenancyWithSingleDomainEnabled", true); // when statisticsFeatureAuthorisationService.assertStatisticsFeatureIsEnabled(); // then - Mockito.verify(tenantService).getRestrictedTenantDataBySubdomainNonCached("app"); + verify(tenantService).getRestrictedTenantDataBySubdomainNonCached( + SINGLE_DOMAIN_MULTITENANCY_SUBDOMAIN); + } @Test @@ -75,7 +103,8 @@ public void assertStatisticsFeatureIsEnabled_ShouldThrowExceptionIfFeatureIsDisa TenantContext.setCurrentTenant(1L); givenTenantSettingStatisticsFeatureEnabledForSingleDomain(false); when(applicationSettingsService.getApplicationSettings()).thenReturn(new ApplicationSettingsDTO() - .mainTenantSubdomainForSingleDomainMultitenancy(new ApplicationSettingsDTOMainTenantSubdomainForSingleDomainMultitenancy().value("app"))); + .mainTenantSubdomainForSingleDomainMultitenancy(new ApplicationSettingsDTOMainTenantSubdomainForSingleDomainMultitenancy().value( + SINGLE_DOMAIN_MULTITENANCY_SUBDOMAIN))); ReflectionTestUtils.setField(statisticsFeatureAuthorisationService, "multitenancy", false); ReflectionTestUtils.setField(statisticsFeatureAuthorisationService, "multitenancyWithSingleDomainEnabled", true); // when, then @@ -87,6 +116,7 @@ private void givenTenantSettingStatisticsFeatureEnabled(boolean statisticsFeatur } private void givenTenantSettingStatisticsFeatureEnabledForSingleDomain(boolean statisticsFeatureEnabled) { - when(tenantService.getRestrictedTenantDataBySubdomainNonCached("app")).thenReturn(new RestrictedTenantDTO().settings(new Settings().featureStatisticsEnabled(statisticsFeatureEnabled))); + when(tenantService.getRestrictedTenantDataBySubdomainNonCached( + SINGLE_DOMAIN_MULTITENANCY_SUBDOMAIN)).thenReturn(new RestrictedTenantDTO().settings(new Settings().featureStatisticsEnabled(statisticsFeatureEnabled))); } } \ No newline at end of file