diff --git a/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java b/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java new file mode 100644 index 0000000000000000000000000000000000000000..97507d2e32b0f4c835e2d408c94e24967f0c0569 --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java @@ -0,0 +1,16 @@ +package de.ozgcloud.admin; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer; +import org.springframework.hateoas.server.core.DefaultLinkRelationProvider; +import org.springframework.web.servlet.config.annotation.CorsRegistry; + +@Configuration +public class AdministrationRepositoryRestConfigurer implements RepositoryRestConfigurer { + + @Override + public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) { + config.setLinkRelationProvider(new DefaultLinkRelationProvider()); + } +} diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheit.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheit.java index 57ce3de7c54bf7de359ffa789b51ddc573b1811d..65da662c0a8c2fe60685a1ccec6c7b669f4362c1 100644 --- a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheit.java +++ b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheit.java @@ -5,13 +5,13 @@ import java.util.List; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.hateoas.server.core.Relation; + +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Builder; import lombok.Getter; import lombok.extern.jackson.Jacksonized; -@Relation(collectionRelation = "organisationsEinheitList") @Getter @Builder(toBuilder = true) @Jacksonized @@ -21,13 +21,16 @@ public class OrganisationsEinheit { static final String COLLECTION_NAME = "organisationsEinheit"; + @JsonIgnore @Id private String id; private String name; private String anschrift; private String organisationsEinheitId; private String uebergeordneteOrganisationseinheitId; - private List<String> untergeordneteOrganisationseinheitId; - private String zufiId; + private List<String> untergeordneteOrganisationseinheitIds; private SyncResult syncResult; + + @JsonIgnore + private String zufiId; } \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitController.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitController.java index c1d8df5c9f5e370e50a3b29b6b5b746705a01fb8..54def34014fecc896e7881cdf1132394251ad885 100644 --- a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitController.java +++ b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitController.java @@ -28,6 +28,6 @@ public class OrganisationsEinheitController { @GetMapping("/{id}") public EntityModel<OrganisationsEinheit> getById(@PathVariable String id) { - throw new UnsupportedOperationException("Not implemented yet"); + return assembler.toModel(organisationsEinheitService.getOrganisationsEinheitById(id)); } } diff --git a/src/test/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurerTest.java b/src/test/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c07cece24c0f6f57e39c49a0e5b3273f123b4ebb --- /dev/null +++ b/src/test/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurerTest.java @@ -0,0 +1,37 @@ +package de.ozgcloud.admin; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.hateoas.server.LinkRelationProvider; +import org.springframework.hateoas.server.core.DefaultLinkRelationProvider; + +class AdministrationRepositoryRestConfigurerTest { + + @InjectMocks + private AdministrationRepositoryRestConfigurer configurer; + + @Nested + class TestConfigureRepositoryRestConfiguration { + + @Captor + private ArgumentCaptor<LinkRelationProvider> linkRelationProviderArgumentCaptor; + + @Test + void shouldUseDefaultLinkRelationProvider() { + var configuration = mock(RepositoryRestConfiguration.class); + + configurer.configureRepositoryRestConfiguration(configuration, null); + + verify(configuration).setLinkRelationProvider(linkRelationProviderArgumentCaptor.capture()); + assertThat(linkRelationProviderArgumentCaptor.getValue()).isInstanceOf(DefaultLinkRelationProvider.class); + } + } + +} \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitControllerTest.java b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitControllerTest.java index 0d21366aa7d9b424af8033d3ab7484f1c13a5ad2..2b05e09d7525683c5bc57b4cf5addace35a2eec9 100644 --- a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitControllerTest.java +++ b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitControllerTest.java @@ -84,4 +84,40 @@ class OrganisationsEinheitControllerTest { return mockMvc.perform(get(OrganisationsEinheitController.PATH)); } } + + @Nested + class TestGetById { + + private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create(); + + @BeforeEach + void setUp() { + when(organisationsEinheitService.getOrganisationsEinheitById(OrganisationsEinheitTestFactory.ID)).thenReturn(organisationsEinheit); + } + + @Test + void shouldCallService() { + doRequest(); + + verify(organisationsEinheitService).getOrganisationsEinheitById(OrganisationsEinheitTestFactory.ID); + } + + @Test + void shouldCallAssembler() { + doRequest(); + + verify(assembler).toModel(organisationsEinheit); + } + + @SneakyThrows + @Test + void shouldReturnHttpOk() { + doRequest().andExpect(status().isOk()); + } + + @SneakyThrows + private ResultActions doRequest() { + return mockMvc.perform(get(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID)); + } + } } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitITCase.java b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitITCase.java index 3939fe14168aa3811bf6497654e8cc7e4f0333e2..d0bbbf8732bc8cd88923f66a34369d28948f5c67 100644 --- a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitITCase.java +++ b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitITCase.java @@ -39,7 +39,7 @@ class OrganisationsEinheitITCase { @MockBean private OrganisationsEinheitService service; @MockBean - private JwtDecoder decoer; + private JwtDecoder decoder; @Autowired private MockMvc mockMvc; @@ -61,5 +61,51 @@ class OrganisationsEinheitITCase { response.andDo(print()).andExpect(jsonPath("$._embedded.organisationsEinheitList").isNotEmpty()); } + + @SneakyThrows + @Test + void shouldContainOrganisationsEinheit() { + mockMvc.perform(get(PATH)) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].name").value(OrganisationsEinheitTestFactory.NAME)) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].anschrift").value(OrganisationsEinheitTestFactory.ANSCHRIFT)) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].organisationsEinheitId").value( + OrganisationsEinheitTestFactory.ORGANISATIONS_EINHEIT_ID)) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].uebergeordneteOrganisationseinheitId").value( + OrganisationsEinheitTestFactory.UEBERGEORDNETE_ORGANISATIONSEINHEIT_ID)) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].untergeordneteOrganisationseinheitIds[0]").value( + OrganisationsEinheitTestFactory.UNTERGEORDNETE_ORGANISATIONSEINHEIT_ID.getFirst())) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].zufiId").doesNotExist()) + .andExpect(jsonPath("$._embedded.organisationsEinheitList[0].id").doesNotExist()); + } + } + + @DisplayName("Get by id") + @WithMockUser + @Nested + class TestGetById { + + @BeforeEach + void init() { + when(service.getOrganisationsEinheitById(OrganisationsEinheitTestFactory.ID)).thenReturn(OrganisationsEinheitTestFactory.create()); + } + + @SneakyThrows + @Test + void shouldReturnOrganisationsEinheit() { + var response = mockMvc.perform(get(PATH + "/" + OrganisationsEinheitTestFactory.ID)).andExpect(status().isOk()); + + response + .andExpect(jsonPath("$.name").value(OrganisationsEinheitTestFactory.NAME)) + .andExpect(jsonPath("$.anschrift").value(OrganisationsEinheitTestFactory.ANSCHRIFT)) + .andExpect(jsonPath("$.organisationsEinheitId").value( + OrganisationsEinheitTestFactory.ORGANISATIONS_EINHEIT_ID)) + .andExpect(jsonPath("$.uebergeordneteOrganisationseinheitId").value( + OrganisationsEinheitTestFactory.UEBERGEORDNETE_ORGANISATIONSEINHEIT_ID)) + .andExpect(jsonPath("$.untergeordneteOrganisationseinheitIds[0]").value( + OrganisationsEinheitTestFactory.UNTERGEORDNETE_ORGANISATIONSEINHEIT_ID.getFirst())) + .andExpect(jsonPath("$.zufiId").doesNotExist()) + .andExpect(jsonPath("$.id").doesNotExist()); + } } + } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitTestFactory.java b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitTestFactory.java index a75e00d6c71d081e3b2a686d462ecbbacf416a9d..9f4f1363f8f8481746330496fb65f7d161414bb5 100644 --- a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitTestFactory.java +++ b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitTestFactory.java @@ -16,18 +16,18 @@ public class OrganisationsEinheitTestFactory { public static final String ZUFI_ID = UUID.randomUUID().toString(); public static final SyncResult SYNC_RESULT = SyncResult.OK; - public static OrganisationsEinheit create(){ + public static OrganisationsEinheit create() { return createBuilder().build(); } - public static OrganisationsEinheit.OrganisationsEinheitBuilder createBuilder(){ + public static OrganisationsEinheit.OrganisationsEinheitBuilder createBuilder() { return OrganisationsEinheit.builder() .id(ID) .name(NAME) .anschrift(ANSCHRIFT) .organisationsEinheitId(ORGANISATIONS_EINHEIT_ID) .uebergeordneteOrganisationseinheitId(UEBERGEORDNETE_ORGANISATIONSEINHEIT_ID) - .untergeordneteOrganisationseinheitId(UNTERGEORDNETE_ORGANISATIONSEINHEIT_ID) + .untergeordneteOrganisationseinheitIds(UNTERGEORDNETE_ORGANISATIONSEINHEIT_ID) .zufiId(ZUFI_ID) .syncResult(SYNC_RESULT); }