Skip to content
Snippets Groups Projects
Commit 3a935480 authored by Felix Reichenbach's avatar Felix Reichenbach
Browse files

OZG-6741 check for admin role when adding organisationseinheits links

parent 2cf8272f
No related branches found
No related tags found
1 merge request!1Ozg 6741 organisationseinheit link
...@@ -35,6 +35,8 @@ import org.springframework.stereotype.Component; ...@@ -35,6 +35,8 @@ import org.springframework.stereotype.Component;
import de.ozgcloud.admin.Root; import de.ozgcloud.admin.Root;
import de.ozgcloud.admin.common.FeatureToggleProperties; import de.ozgcloud.admin.common.FeatureToggleProperties;
import de.ozgcloud.admin.common.user.CurrentUserService;
import de.ozgcloud.admin.common.user.UserRole;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Component @Component
...@@ -45,12 +47,12 @@ class OrganisationsEinheitRootProcessor implements RepresentationModelProcessor< ...@@ -45,12 +47,12 @@ class OrganisationsEinheitRootProcessor implements RepresentationModelProcessor<
static final String REL_ORGANISATIONS_EINHEITEN = "organisationsEinheiten"; static final String REL_ORGANISATIONS_EINHEITEN = "organisationsEinheiten";
static final String REL_SEARCH_ORGANISATIONS_EINHEIT = "searchOrganisationsEinheit"; static final String REL_SEARCH_ORGANISATIONS_EINHEIT = "searchOrganisationsEinheit";
private final FeatureToggleProperties featureToggleProperties;
private final OrganisationsEinheitProperties organisationsEinheitProperties; private final OrganisationsEinheitProperties organisationsEinheitProperties;
private final CurrentUserService currentUserService;
@Override @Override
public EntityModel<Root> process(EntityModel<Root> model) { public EntityModel<Root> process(EntityModel<Root> model) {
return model.addAllIf(featureToggleProperties.isOrganisationsEinheiten(), return model.addAllIf(currentUserService.hasRole(UserRole.ADMIN_ADMIN),
() -> List.of(buildGetAllOrganisationsEinheitenLink(), buildSearchOrganisationsEinheitLink())); () -> List.of(buildGetAllOrganisationsEinheitenLink(), buildSearchOrganisationsEinheitLink()));
} }
......
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.admin.organisationseinheit;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import de.ozgcloud.common.test.ITCase;
class OrganisationsEinheitRootProcessorITCase {
@Nested
@SpringBootTest(properties = {
"ozgcloud.feature.organisationsEinheiten=true",
"ozgcloud.organisations-einheit.zufi-suche-url=foo"
})
@ITCase
class TestFeatureEnabled {
@Autowired
private ApplicationContext applicationContext;
@Test
void shouldHaveOrganisationsEinheitRootProcessorBean() {
assertDoesNotThrow(() -> applicationContext.getBean(OrganisationsEinheitRootProcessor.class));
}
}
@Nested
@SpringBootTest(properties = {
"ozgcloud.feature.organisationsEinheiten=false",
"ozgcloud.organisations-einheit.zufi-suche-url=foo"
})
@ITCase
class TestFeatureDisabled {
@Autowired
private ApplicationContext applicationContext;
@Test
void shouldHaveOrganisationsEinheitRootProcessorBean() {
assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(OrganisationsEinheitRootProcessor.class));
}
}
}
\ No newline at end of file
...@@ -24,8 +24,10 @@ ...@@ -24,8 +24,10 @@
package de.ozgcloud.admin.organisationseinheit; package de.ozgcloud.admin.organisationseinheit;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
...@@ -35,49 +37,70 @@ import org.springframework.hateoas.Link; ...@@ -35,49 +37,70 @@ import org.springframework.hateoas.Link;
import com.thedeanda.lorem.LoremIpsum; import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.admin.Root;
import de.ozgcloud.admin.RootTestFactory; import de.ozgcloud.admin.RootTestFactory;
import de.ozgcloud.admin.common.FeatureToggleProperties; import de.ozgcloud.admin.common.user.CurrentUserService;
import de.ozgcloud.admin.common.user.UserRole;
class OrganisationsEinheitRootProcessorTest { class OrganisationsEinheitRootProcessorTest {
@InjectMocks @InjectMocks
private OrganisationsEinheitRootProcessor organisationsEinheitRootProcessor; private OrganisationsEinheitRootProcessor organisationsEinheitRootProcessor;
@Mock @Mock
private FeatureToggleProperties featureToggleProperties;
@Mock
private OrganisationsEinheitProperties organisationsEinheitProperties; private OrganisationsEinheitProperties organisationsEinheitProperties;
@Mock
private CurrentUserService currentUserService;
@Nested @Nested
class TestProcess { class TestProcess {
private final String zufiSucheUri = LoremIpsum.getInstance().getUrl() + "?searchBy={searchBy}"; private final String zufiSucheUri = LoremIpsum.getInstance().getUrl() + "?searchBy={searchBy}";
@Test
void shouldCheckUserRole() {
processModel();
verify(currentUserService).hasRole(UserRole.ADMIN_ADMIN);
}
@Nested @Nested
class OrganisationsEinheitenLinkRelation { class TestOnWrongUserRole {
@BeforeEach
void givenHasWrongRole() {
when(currentUserService.hasRole(anyString())).thenReturn(false);
}
@Test @Test
void shouldExistsIfFeatureEnabled() { void shouldNotAddAnyLinks() {
givenFeatureIsEnabled(); var model = processModel();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create())); assertThat(model.getLinks()).isEmpty();
}
}
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_ORGANISATIONS_EINHEITEN)).isNotEmpty(); @Nested
class TestOnAdminRole {
@BeforeEach
void givenHasAdminRole() {
when(currentUserService.hasRole(anyString())).thenReturn(true);
when(organisationsEinheitProperties.getZufiSucheUri()).thenReturn(zufiSucheUri);
} }
@Test @Nested
void shouldNotExistIfFeatureDisabled() { class OrganisationsEinheitenLinkRelation {
givenFeatureIsDisabled();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create())); @Test
void shouldExist() {
var model = processModel();
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_ORGANISATIONS_EINHEITEN)).isEmpty(); assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_ORGANISATIONS_EINHEITEN)).isNotEmpty();
} }
@Test @Test
void shouldHaveHref() { void shouldHaveHref() {
givenFeatureIsEnabled(); var model = processModel();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_ORGANISATIONS_EINHEITEN)) assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_ORGANISATIONS_EINHEITEN))
.get() .get()
...@@ -91,27 +114,14 @@ class OrganisationsEinheitRootProcessorTest { ...@@ -91,27 +114,14 @@ class OrganisationsEinheitRootProcessorTest {
@Test @Test
void shouldExistsIfFeatureEnabled() { void shouldExistsIfFeatureEnabled() {
givenFeatureIsEnabled(); var model = processModel();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)).isNotEmpty(); assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)).isNotEmpty();
} }
@Test
void shouldNotExistIfFeatureDisabled() {
givenFeatureIsDisabled();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)).isEmpty();
}
@Test @Test
void shouldGetZufiSucheUri() { void shouldGetZufiSucheUri() {
givenFeatureIsEnabled(); processModel();
organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
verify(organisationsEinheitProperties).getZufiSucheUri(); verify(organisationsEinheitProperties).getZufiSucheUri();
...@@ -119,9 +129,7 @@ class OrganisationsEinheitRootProcessorTest { ...@@ -119,9 +129,7 @@ class OrganisationsEinheitRootProcessorTest {
@Test @Test
void shouldHaveHref() { void shouldHaveHref() {
givenFeatureIsEnabled(); var model = processModel();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)) assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT))
.get() .get()
...@@ -131,9 +139,7 @@ class OrganisationsEinheitRootProcessorTest { ...@@ -131,9 +139,7 @@ class OrganisationsEinheitRootProcessorTest {
@Test @Test
void shouldBeTemplated() { void shouldBeTemplated() {
givenFeatureIsEnabled(); var model = processModel();
var model = organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)) assertThat(model.getLink(OrganisationsEinheitRootProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT))
.get() .get()
...@@ -141,16 +147,10 @@ class OrganisationsEinheitRootProcessorTest { ...@@ -141,16 +147,10 @@ class OrganisationsEinheitRootProcessorTest {
.isEqualTo(true); .isEqualTo(true);
} }
} }
private void givenFeatureIsEnabled() {
when(featureToggleProperties.isOrganisationsEinheiten()).thenReturn(true);
when(organisationsEinheitProperties.getZufiSucheUri()).thenReturn(zufiSucheUri);
} }
private void givenFeatureIsDisabled() { private EntityModel<Root> processModel() {
when(featureToggleProperties.isOrganisationsEinheiten()).thenReturn(false); return organisationsEinheitRootProcessor.process(EntityModel.of(RootTestFactory.create()));
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment