diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingSetting.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingSetting.java new file mode 100644 index 0000000000000000000000000000000000000000..83ad52c2368f6141f31b0ba694a185c0c0ddcdaf --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingSetting.java @@ -0,0 +1,42 @@ +package de.ozgcloud.admin.reporting; + +import java.util.List; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; + +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.TypeAlias; +import org.springframework.data.mongodb.core.mapping.Document; + +import lombok.Builder; +import lombok.Getter; +import lombok.extern.jackson.Jacksonized; + +@Document("settings") +@TypeAlias("reporting") +@Jacksonized +@Builder +@Getter +public class ReportingSetting { + + @Id + private String id; + @Builder.Default + private String name = "reporting"; + + @NotBlank + private String formEngineName; + @NotBlank + private String formId; + + @NotEmpty + private List<FieldMapping> mappings; + + @Builder + @Getter + static class FieldMapping { + private String sourcePath; + private String targetPath; + } +} diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingSettingRepository.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingSettingRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..3614a99aad098ae462f1b8d3d1c2400b3ffaaf28 --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingSettingRepository.java @@ -0,0 +1,9 @@ +package de.ozgcloud.admin.reporting; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +@RepositoryRestResource +public interface ReportingSettingRepository extends MongoRepository<ReportingSetting, String> { + +} diff --git a/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingsITCase.java b/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingsITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..6e0a486da2fec9b410f770338962623438f1106f --- /dev/null +++ b/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingsITCase.java @@ -0,0 +1,72 @@ +package de.ozgcloud.admin.reporting; + +import static org.assertj.core.api.Assertions.*; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.web.servlet.MockMvc; + +import de.ozgcloud.common.test.DataITCase; +import lombok.SneakyThrows; + +@AutoConfigureMockMvc +@WithMockUser(roles = "ADMIN_ADMIN") +@DataITCase +class ReportingSettingsITCase { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private MongoOperations mongoOperations; + + @BeforeEach + void clearDatabase() { + mongoOperations.dropCollection("settings"); + } + + @Test + @SneakyThrows + void shouldHaveLinkToReporting() { + mockMvc.perform(get("/api/configuration")) + .andExpect(status().is2xxSuccessful()) + .andExpect(jsonPath("$._links.reportingSettings").exists()); + } + + @Test + @SneakyThrows + void shouldDenyWhileMissingFields() { + mockMvc.perform(post("/api/configuration/reportingSettings").with(csrf()) + .contentType(MediaType.APPLICATION_JSON).content("{}")) + .andExpect(status().isUnprocessableEntity()); + } + + @Disabled + @Test + @SneakyThrows + void shouldAddReportingSetting() { + mockMvc.perform(post("/api/configuration/reportingSettings").with(csrf()) + .contentType(MediaType.APPLICATION_JSON).content("{}")) + .andExpect(status().isCreated()); + + var collection = mongoOperations.getCollection("settings"); + assertThat(collection.countDocuments()).isEqualTo(1); + } + + @Test + @SneakyThrows + void shouldListReportings() { + mockMvc.perform(get("/api/configuration/reportingSettings")) + .andExpect(status().is2xxSuccessful()); + } + +}