Skip to content

Commit

Permalink
Merge pull request #31 from virtualidentityag/VIC-2507-fix-tenant-set…
Browse files Browse the repository at this point in the history
…ting-retrieval-for-multitenancy-multiple-domains

fix: tenant setting retrieval for superadmin
  • Loading branch information
tkuzynow authored Feb 9, 2023
2 parents dc016cb + 4086bdc commit 9c4d634
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand Down Expand Up @@ -59,8 +64,9 @@ private String getMainTenantSubdomain() {
}

private boolean isStatisticsFeatureEnabledForMultitenancy() {
Long currentTenant = TenantContext.getCurrentTenant();
RestrictedTenantDTO restrictedTenantData = tenantService.getRestrictedTenantDataNonCached(currentTenant);
Optional<String> currentSubdomain = subdomainExtractor.getCurrentSubdomain();
RestrictedTenantDTO restrictedTenantData = currentSubdomain.isPresent() ? tenantService.getRestrictedTenantDataBySubdomainNonCached(
currentSubdomain.get()) : tenantService.getRestrictedTenantDataNonCached(TenantContext.getCurrentTenant());
return isStatisticsFeatureEnabled(restrictedTenantData);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand All @@ -40,7 +48,7 @@ public void assertStatisticsFeatureIsEnabled_ShouldNotThrowExceptionIfFeatureIsE
// when
statisticsFeatureAuthorisationService.assertStatisticsFeatureIsEnabled();
// then
Mockito.verify(tenantService).getRestrictedTenantDataNonCached(1L);
verify(tenantService).getRestrictedTenantDataNonCached(1L);
}

@Test
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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)));
}
}

0 comments on commit 9c4d634

Please sign in to comment.