From ea4023012099392dfe280418a2a445a78fe62d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Lauk=C3=B6tter?= Date: Thu, 13 Feb 2025 16:52:18 +0100 Subject: [PATCH 1/3] Remove time-machine from norm render endpoint RISDEV-0000 --- .../controller/NormExpressionController.java | 29 +------------------ .../NormExpressionControllerTest.java | 28 ------------------ 2 files changed, 1 insertion(+), 56 deletions(-) diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionController.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionController.java index a118d1820..8315dcaab 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionController.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionController.java @@ -10,7 +10,6 @@ import de.bund.digitalservice.ris.norms.adapter.input.restapi.schema.UpdateModsResponseSchema; import de.bund.digitalservice.ris.norms.application.port.input.*; import de.bund.digitalservice.ris.norms.domain.entity.eli.DokumentExpressionEli; -import de.bund.digitalservice.ris.norms.utils.XmlMapper; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import java.time.Instant; @@ -35,26 +34,20 @@ public class NormExpressionController { private final LoadNormUseCase loadNormUseCase; - private final LoadRegelungstextUseCase loadRegelungstextUseCase; private final LoadRegelungstextXmlUseCase loadRegelungstextXmlUseCase; private final UpdateRegelungstextXmlUseCase updateRegelungstextXmlUseCase; private final TransformLegalDocMlToHtmlUseCase transformLegalDocMlToHtmlUseCase; - private final ApplyPassiveModificationsUseCase applyPassiveModificationsUseCase; public NormExpressionController( LoadNormUseCase loadNormUseCase, - LoadRegelungstextUseCase loadRegelungstextUseCase, LoadRegelungstextXmlUseCase loadRegelungstextXmlUseCase, UpdateRegelungstextXmlUseCase updateRegelungstextXmlUseCase, - TransformLegalDocMlToHtmlUseCase transformLegalDocMlToHtmlUseCase, - ApplyPassiveModificationsUseCase applyPassiveModificationsUseCase + TransformLegalDocMlToHtmlUseCase transformLegalDocMlToHtmlUseCase ) { this.loadNormUseCase = loadNormUseCase; - this.loadRegelungstextUseCase = loadRegelungstextUseCase; this.loadRegelungstextXmlUseCase = loadRegelungstextXmlUseCase; this.updateRegelungstextXmlUseCase = updateRegelungstextXmlUseCase; this.transformLegalDocMlToHtmlUseCase = transformLegalDocMlToHtmlUseCase; - this.applyPassiveModificationsUseCase = applyPassiveModificationsUseCase; } /** @@ -103,26 +96,6 @@ public ResponseEntity getNormRender( @RequestParam(defaultValue = "false") boolean showMetadata, @RequestParam Optional atIsoDate ) { - if (atIsoDate.isPresent()) { - var regelungstext = loadRegelungstextUseCase.loadRegelungstext( - new LoadRegelungstextUseCase.Query(eli) - ); - regelungstext = - applyPassiveModificationsUseCase.applyPassiveModifications( - new ApplyPassiveModificationsUseCase.Query(regelungstext, atIsoDate.get()) - ); - - return ResponseEntity.ok( - this.transformLegalDocMlToHtmlUseCase.transformLegalDocMlToHtml( - new TransformLegalDocMlToHtmlUseCase.Query( - XmlMapper.toString(regelungstext.getDocument()), - showMetadata, - false - ) - ) - ); - } - var normXml = loadRegelungstextXmlUseCase.loadRegelungstextXml( new LoadRegelungstextXmlUseCase.Query(eli) ); diff --git a/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionControllerTest.java b/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionControllerTest.java index ffdd6b8f1..8e2acd077 100644 --- a/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionControllerTest.java +++ b/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/NormExpressionControllerTest.java @@ -12,7 +12,6 @@ import de.bund.digitalservice.ris.norms.application.exception.NormNotFoundException; import de.bund.digitalservice.ris.norms.application.port.input.*; import de.bund.digitalservice.ris.norms.config.SecurityConfig; -import de.bund.digitalservice.ris.norms.domain.entity.Fixtures; import de.bund.digitalservice.ris.norms.domain.entity.Norm; import de.bund.digitalservice.ris.norms.domain.entity.Regelungstext; import de.bund.digitalservice.ris.norms.domain.entity.eli.NormExpressionEli; @@ -59,9 +58,6 @@ class NormExpressionControllerTest { @MockitoBean private TransformLegalDocMlToHtmlUseCase transformLegalDocMlToHtmlUseCase; - @MockitoBean - private ApplyPassiveModificationsUseCase applyPassiveModificationsUseCase; - @Nested class getNorm { @@ -241,30 +237,6 @@ void itCallsNormServiceAndReturnsNormRenderWithMetadata() throws Exception { argThat(query -> query.xml().equals(xml) && query.showMetadata()) ); } - - @Test - void itCallsNormServiceAndReturnsNormRenderWithAtIsoDate() throws Exception { - // Given - final String eli = "eli/bund/bgbl-1/1990/s2954/2022-12-19/1/deu/regelungstext-1"; - final String html = "
"; - - when(loadNormUseCase.loadNorm(any())).thenReturn(Fixtures.loadNormFromDisk("SimpleNorm.xml")); - when(transformLegalDocMlToHtmlUseCase.transformLegalDocMlToHtml(any())).thenReturn(html); - when(applyPassiveModificationsUseCase.applyPassiveModifications(any())) - .thenReturn(Fixtures.loadRegelungstextFromDisk("SimpleNorm.xml")); - - // When // Then - mockMvc - .perform( - get("/api/v1/norms/{eli}?atIsoDate=2024-04-03T00:00:00.000Z", eli) - .accept(MediaType.TEXT_HTML) - ) - .andExpect(status().isOk()) - .andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_HTML)) - .andExpect(content().string(html)); - - verify(applyPassiveModificationsUseCase, times(1)).applyPassiveModifications(any()); - } } @Nested From 6d4f0c44c858f567a24cfdcacb8b986b92bdf235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Lauk=C3=B6tter?= Date: Thu, 13 Feb 2025 16:54:19 +0100 Subject: [PATCH 2/3] Remove time-machine from article render endpoint RISDEV-0000 --- .../restapi/controller/ArticleController.java | 2 +- .../port/input/LoadArticleHtmlUseCase.java | 10 +- .../application/service/ArticleService.java | 7 - .../ArticleControllerIntegrationTest.java | 250 ------------------ 4 files changed, 2 insertions(+), 267 deletions(-) diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ArticleController.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ArticleController.java index 83e41721f..f65ba03e9 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ArticleController.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ArticleController.java @@ -161,7 +161,7 @@ public ResponseEntity getArticleRender( @PathVariable final String eid, @RequestParam Optional atIsoDate ) { - var query = new LoadArticleHtmlUseCase.Query(eli, eid, atIsoDate.orElse(null)); + var query = new LoadArticleHtmlUseCase.Query(eli, eid); var articleHtml = loadArticleHtmlUseCase.loadArticleHtml(query); return ResponseEntity.ok(articleHtml); } diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadArticleHtmlUseCase.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadArticleHtmlUseCase.java index 1388823e8..456747a92 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadArticleHtmlUseCase.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadArticleHtmlUseCase.java @@ -1,8 +1,6 @@ package de.bund.digitalservice.ris.norms.application.port.input; import de.bund.digitalservice.ris.norms.domain.entity.eli.DokumentExpressionEli; -import java.time.Instant; -import org.springframework.lang.Nullable; /** Use case for loading a norm's article */ public interface LoadArticleHtmlUseCase { @@ -19,12 +17,6 @@ public interface LoadArticleHtmlUseCase { * * @param eli ELI of the norm to load the article from * @param eid EID of the article to load from the norm - * @param atIsoDate (Optional) Apply the norm's passive mods up to this date before loading the - * article */ - record Query(DokumentExpressionEli eli, String eid, @Nullable Instant atIsoDate) { - public Query(DokumentExpressionEli eli, String eid) { - this(eli, eid, null); - } - } + record Query(DokumentExpressionEli eli, String eid) {} } diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ArticleService.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ArticleService.java index 87d7a5b04..1a6fcfc06 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ArticleService.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ArticleService.java @@ -43,13 +43,6 @@ public String loadArticleHtml(final LoadArticleHtmlUseCase.Query query) { .loadRegelungstext(new LoadRegelungstextPort.Command(query.eli())) .orElseThrow(() -> new NormNotFoundException(query.eli().toString())); - if (query.atIsoDate() != null) { - regelungstext = - timeMachineService.applyPassiveModifications( - new ApplyPassiveModificationsUseCase.Query(regelungstext, query.atIsoDate()) - ); - } - return regelungstext .getArticles() .stream() diff --git a/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ArticleControllerIntegrationTest.java b/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ArticleControllerIntegrationTest.java index 0bef4b93b..928998885 100644 --- a/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ArticleControllerIntegrationTest.java +++ b/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ArticleControllerIntegrationTest.java @@ -9,11 +9,7 @@ import de.bund.digitalservice.ris.norms.adapter.output.database.repository.DokumentRepository; import de.bund.digitalservice.ris.norms.adapter.output.database.repository.NormManifestationRepository; import de.bund.digitalservice.ris.norms.domain.entity.Fixtures; -import de.bund.digitalservice.ris.norms.domain.entity.Norm; -import de.bund.digitalservice.ris.norms.domain.entity.Regelungstext; import de.bund.digitalservice.ris.norms.integration.BaseIntegrationTest; -import de.bund.digitalservice.ris.norms.utils.XmlMapper; -import java.util.Set; import org.hamcrest.core.IsNot; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Nested; @@ -551,31 +547,6 @@ void itReturnsArticleRender() throws Exception { .andExpect(xpath("//span[@data-eId=\"hauptteil-1_art-3_überschrift-1\"]").doesNotExist()); } - @Test - void itReturnsArticleRenderAtIsoDate() throws Exception { - // Given - dokumentRepository.save( - DokumentMapper.mapToDto(Fixtures.loadRegelungstextFromDisk("NormWithMultipleMods.xml")) - ); - dokumentRepository.save( - DokumentMapper.mapToDto( - Fixtures.loadRegelungstextFromDisk("NormWithMultiplePassiveModifications.xml") - ) - ); - - // When / Then - mockMvc - .perform( - get( - "/api/v1/norms/eli/bund/bgbl-1/1990/s2954/2022-12-19/1/deu/regelungstext-1/articles/hauptteil-1_art-1?atIsoDate=2017-03-01T00:00:00.000Z" - ) - .accept(MediaType.TEXT_HTML) - ) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("§ 9 Absatz 1 Satz 2, Absatz 2 oder 3"))) - .andExpect(content().string(not(containsString("§ 9 Abs. 1 Satz 2, Abs. 2")))); - } - @Test void itReturnsServerErrorForInvalidIsoDate() throws Exception { // Given @@ -676,226 +647,5 @@ void itReturnsNotFoundIfArticleDoesntExist() throws Exception { ) .andExpect(jsonPath("eid").value("hauptteil-1_art-9999")); } - - @Test - void itThrowsValidationExceptionBecauseWithinTimeMachineMetaModDoesNotHaveSourceHref() - throws Exception { - // Given - final Norm targetNorm = Norm - .builder() - .dokumente( - Set.of( - new Regelungstext( - XmlMapper.toDocument( - """ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - """ - ) - ) - ) - ) - .build(); - dokumentRepository.save( - DokumentMapper.mapToDto(Fixtures.loadRegelungstextFromDisk("NormWithMods.xml")) - ); - dokumentRepository.save(DokumentMapper.mapToDto(targetNorm.getRegelungstext1())); - - // When / Then - mockMvc - .perform( - get( - "/api/v1/norms/eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1/articles/hauptteil-1_art-20?atIsoDate=2017-03-23T00:00:00.000Z" - ) - .accept(MediaType.TEXT_HTML) - ) - .andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("type").value(equalTo("/errors/source-href-in-meta-mod-missing"))) - .andExpect(jsonPath("title").value(equalTo("Validation error"))) - .andExpect(jsonPath("status").value(equalTo(422))) - .andExpect( - jsonPath("detail") - .value( - equalTo( - "Did not find source href for textual mod with eId meta-1_analysis-1_pasmod-1_textualmod-2" - ) - ) - ) - .andExpect( - jsonPath("instance") - .value( - equalTo( - "/api/v1/norms/eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1/articles/hauptteil-1_art-20" - ) - ) - ) - .andExpect(jsonPath("eId").value(equalTo("meta-1_analysis-1_pasmod-1_textualmod-2"))); - } - - @Test - void itThrowsMandatoryNodeNotFoundBecauseTemporalDataMissing() throws Exception { - // Given - final Norm targetNorm = Norm - .builder() - .dokumente( - Set.of( - new Regelungstext( - XmlMapper.toDocument( - """ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - """ - ) - ) - ) - ) - .build(); - dokumentRepository.save( - DokumentMapper.mapToDto(Fixtures.loadRegelungstextFromDisk("NormWithMods.xml")) - ); - dokumentRepository.save(DokumentMapper.mapToDto(targetNorm.getRegelungstext1())); - - // When / Then - mockMvc - .perform( - get( - "/api/v1/norms/eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1/articles/hauptteil-1_art-20?atIsoDate=2017-03-23T00:00:00.000Z" - ) - .accept(MediaType.TEXT_HTML) - ) - .andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("type").value(equalTo("/errors/mandatory-node-not-found"))) - .andExpect(jsonPath("title").value(equalTo("Mandatory node not found"))) - .andExpect(jsonPath("status").value(equalTo(422))) - .andExpect( - jsonPath("detail") - .value( - equalTo( - "Element with xpath './temporalData' not found in 'akn:meta' of norm 'eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1'" - ) - ) - ) - .andExpect( - jsonPath("instance") - .value( - equalTo( - "/api/v1/norms/eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1/articles/hauptteil-1_art-20" - ) - ) - ) - .andExpect(jsonPath("xpath").value(equalTo("./temporalData"))) - .andExpect( - jsonPath("eli") - .value(equalTo("eli/bund/bgbl-1/1964/s593/2017-03-15/1/deu/regelungstext-1")) - ) - .andExpect(jsonPath("nodeName").value(equalTo("akn:meta"))); - } } } From 66b9186cca0dca8a541973e743d0e8cb048ddd4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Lauk=C3=B6tter?= Date: Thu, 13 Feb 2025 17:05:31 +0100 Subject: [PATCH 3/3] Remove time-machine from element render endpoint RISDEV-0000 --- .../restapi/controller/ElementController.java | 15 +- .../input/LoadElementHtmlAtDateUseCase.java | 26 ---- .../application/service/ElementService.java | 31 +--- .../controller/ElementControllerTest.java | 28 ---- .../service/ElementServiceTest.java | 140 +----------------- .../ElementControllerIntegrationTest.java | 26 ---- 6 files changed, 6 insertions(+), 260 deletions(-) delete mode 100644 backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadElementHtmlAtDateUseCase.java diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementController.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementController.java index 42b6facf0..effff0d07 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementController.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementController.java @@ -21,18 +21,15 @@ public class ElementController { private final LoadElementUseCase loadElementUseCase; private final LoadElementHtmlUseCase loadElementHtmlUseCase; - private final LoadElementHtmlAtDateUseCase loadElementHtmlAtDateUseCase; private final LoadElementsByTypeUseCase loadElementsByTypeUseCase; public ElementController( LoadElementUseCase loadElementUseCase, LoadElementHtmlUseCase loadElementHtmlUseCase, - LoadElementHtmlAtDateUseCase loadElementHtmlAtDateUseCase, LoadElementsByTypeUseCase loadElementsByTypeUseCase ) { this.loadElementUseCase = loadElementUseCase; this.loadElementHtmlUseCase = loadElementHtmlUseCase; - this.loadElementHtmlAtDateUseCase = loadElementHtmlAtDateUseCase; this.loadElementsByTypeUseCase = loadElementsByTypeUseCase; } @@ -52,15 +49,9 @@ public ResponseEntity getElementHtmlPreview( @PathVariable final String eid, @RequestParam Optional atIsoDate ) { - var elementHtml = atIsoDate - .map(date -> - loadElementHtmlAtDateUseCase.loadElementHtmlAtDate( - new LoadElementHtmlAtDateUseCase.Query(eli, eid, date) - ) - ) - .orElseGet(() -> - loadElementHtmlUseCase.loadElementHtml(new LoadElementHtmlUseCase.Query(eli, eid)) - ); + var elementHtml = loadElementHtmlUseCase.loadElementHtml( + new LoadElementHtmlUseCase.Query(eli, eid) + ); return ResponseEntity.ok(elementHtml); } diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadElementHtmlAtDateUseCase.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadElementHtmlAtDateUseCase.java deleted file mode 100644 index d3ec32ae3..000000000 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/port/input/LoadElementHtmlAtDateUseCase.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.bund.digitalservice.ris.norms.application.port.input; - -import de.bund.digitalservice.ris.norms.domain.entity.eli.DokumentExpressionEli; -import java.time.Instant; - -/** Use case for getting a single element as an HTML string. */ -public interface LoadElementHtmlAtDateUseCase { - /** - * Generates the version of a norm at a specific date by applying all pending modifications up - * until that date; then retrieves an element inside the norm and renders its HTML preview. The - * date can't be in the past. - * - * @param query Query used for identifying the element - * @return The HTML string - */ - String loadElementHtmlAtDate(LoadElementHtmlAtDateUseCase.Query query); - - /** - * Contains the parameters needed for loading an element from a norm at a specific date. - * - * @param eli The ELI used to identify the norm - * @param eid The eId of the element inside the norm - * @param atDate Apply all modifications until and including that date - */ - record Query(DokumentExpressionEli eli, String eid, Instant atDate) {} -} diff --git a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ElementService.java b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ElementService.java index 0a9affbb2..0e60d20cd 100644 --- a/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ElementService.java +++ b/backend/src/main/java/de/bund/digitalservice/ris/norms/application/service/ElementService.java @@ -27,15 +27,10 @@ */ @Service public class ElementService - implements - LoadElementUseCase, - LoadElementHtmlUseCase, - LoadElementHtmlAtDateUseCase, - LoadElementsByTypeUseCase { + implements LoadElementUseCase, LoadElementHtmlUseCase, LoadElementsByTypeUseCase { private final LoadRegelungstextPort loadRegelungstextPort; private final XsltTransformationService xsltTransformationService; - private final TimeMachineService timeMachineService; /** The types of elements that can be retrieved from a norm. */ public enum ElementType { @@ -81,12 +76,10 @@ public static ElementType fromLabel(String label) { public ElementService( LoadRegelungstextPort loadRegelungstextPort, - XsltTransformationService xsltTransformationService, - TimeMachineService timeMachineService + XsltTransformationService xsltTransformationService ) { this.loadRegelungstextPort = loadRegelungstextPort; this.xsltTransformationService = xsltTransformationService; - this.timeMachineService = timeMachineService; } @Override @@ -113,26 +106,6 @@ public String loadElementHtml(final LoadElementHtmlUseCase.Query query) { ); } - @Override - public String loadElementHtmlAtDate(final LoadElementHtmlAtDateUseCase.Query query) { - var regelungstext = loadRegelungstextPort - .loadRegelungstext(new LoadRegelungstextPort.Command(query.eli())) - .orElseThrow(() -> new RegelungstextNotFoundException(query.eli().toString())); - - regelungstext = - timeMachineService.applyPassiveModifications( - new ApplyPassiveModificationsUseCase.Query(regelungstext, query.atDate()) - ); - - final var element = NodeParser - .getElementFromExpression(getXPathForEid(query.eid()), regelungstext.getDocument()) - .orElseThrow(() -> new ElementNotFoundException(query.eli().toString(), query.eid())); - - return xsltTransformationService.transformLegalDocMlToHtml( - new TransformLegalDocMlToHtmlUseCase.Query(XmlMapper.toString(element), false, false) - ); - } - @Override public List loadElementsByType(LoadElementsByTypeUseCase.Query query) { // No need to do anything if no types are requested diff --git a/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementControllerTest.java b/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementControllerTest.java index 37486b495..f33b82114 100644 --- a/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementControllerTest.java +++ b/backend/src/test/java/de/bund/digitalservice/ris/norms/adapter/input/restapi/controller/ElementControllerTest.java @@ -44,9 +44,6 @@ class ElementControllerTest { @MockitoBean private LoadElementsByTypeUseCase loadElementsByTypeUseCase; - @MockitoBean - private LoadElementHtmlAtDateUseCase loadElementHtmlAtDateUseCase; - @Nested class getElementHtmlPreview { @@ -75,31 +72,6 @@ void itThrowsXmlProcessingException() throws Exception { ); } - @Test - void itThrowsXmlProcessingExceptionWithPassedDate() throws Exception { - when(loadElementHtmlAtDateUseCase.loadElementHtmlAtDate(any())) - .thenThrow(new XmlProcessingException("Error message", null)); - mockMvc - .perform( - get( - "/api/v1/norms/eli/bund/bgbl-1/2017/s419/2017-03-15/1/deu/regelungstext-1/elements/hauptteil-1_art-1?atIsoDate=2024-04-03T00:00:00.000Z" - ) - .accept(MediaType.TEXT_HTML) - ) - // then - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("type").value("/errors/xml-processing-error")) - .andExpect(jsonPath("title").value("XML processing error")) - .andExpect(jsonPath("status").value(500)) - .andExpect(jsonPath("detail").value("Error message")) - .andExpect( - jsonPath("instance") - .value( - "/api/v1/norms/eli/bund/bgbl-1/2017/s419/2017-03-15/1/deu/regelungstext-1/elements/hauptteil-1_art-1" - ) - ); - } - @Test void returnsHtmlRendering() throws Exception { // given diff --git a/backend/src/test/java/de/bund/digitalservice/ris/norms/application/service/ElementServiceTest.java b/backend/src/test/java/de/bund/digitalservice/ris/norms/application/service/ElementServiceTest.java index 753f342ce..063679a79 100644 --- a/backend/src/test/java/de/bund/digitalservice/ris/norms/application/service/ElementServiceTest.java +++ b/backend/src/test/java/de/bund/digitalservice/ris/norms/application/service/ElementServiceTest.java @@ -14,7 +14,6 @@ import de.bund.digitalservice.ris.norms.domain.entity.eli.DokumentExpressionEli; import de.bund.digitalservice.ris.norms.utils.NodeParser; import de.bund.digitalservice.ris.norms.utils.XmlMapper; -import java.time.Instant; import java.util.List; import java.util.Optional; import org.junit.jupiter.api.Nested; @@ -24,12 +23,10 @@ class ElementServiceTest { final LoadRegelungstextPort loadRegelungstextPort = mock(LoadRegelungstextPort.class); final XsltTransformationService xsltTransformationService = mock(XsltTransformationService.class); - final TimeMachineService timeMachineService = mock(TimeMachineService.class); final ElementService service = new ElementService( loadRegelungstextPort, - xsltTransformationService, - timeMachineService + xsltTransformationService ); @Nested @@ -259,141 +256,6 @@ void itThrowsIfNoElementIsFound() { } } - @Nested - class loadElementHtmlAtDateFromNorm { - - @Test - void itLoadsTheElementHtmlAtTheDateFromTheNorm() { - // Given - var eli = DokumentExpressionEli.fromString( - "eli/bund/bgbl-1/2000/s1/1970-01-01/1/deu/regelungstext-1" - ); - var eid = "meta-1"; - var date = Instant.parse("2099-12-31T00:00:00.00Z"); - - var normXml = - """ - - - - - - - - - - - - - - """; - - var regelungstext = new Regelungstext(XmlMapper.toDocument(normXml)); - when(loadRegelungstextPort.loadRegelungstext(new LoadRegelungstextPort.Command(eli))) - .thenReturn(Optional.of(regelungstext)); - when( - timeMachineService.applyPassiveModifications( - new ApplyPassiveModificationsUseCase.Query(regelungstext, date) - ) - ) - .thenReturn(regelungstext); - when(xsltTransformationService.transformLegalDocMlToHtml(any())).thenReturn("
"); - - // When - var html = service.loadElementHtmlAtDate( - new LoadElementHtmlAtDateUseCase.Query(eli, eid, date) - ); - - // Then - assertThat(html).contains("
"); - verify(loadRegelungstextPort).loadRegelungstext(new LoadRegelungstextPort.Command(eli)); - verify(timeMachineService) - .applyPassiveModifications(new ApplyPassiveModificationsUseCase.Query(regelungstext, date)); - verify(xsltTransformationService, times(1)).transformLegalDocMlToHtml(any()); - } - - @Test - void itThrowsIfDokumentIsNotFound() { - // Given - var eli = DokumentExpressionEli.fromString( - "eli/bund/notfound/2000/s1/1970-01-01/1/deu/regelungstext-1" - ); - var eid = "meta-1"; - var date = Instant.parse("2099-12-31T00:00:00.00Z"); - var query = new LoadElementHtmlAtDateUseCase.Query(eli, eid, date); - - when(loadRegelungstextPort.loadRegelungstext(new LoadRegelungstextPort.Command(eli))) - .thenReturn(Optional.empty()); - - // When / Then - assertThatThrownBy(() -> service.loadElementHtmlAtDate(query)) - .isInstanceOf(RegelungstextNotFoundException.class); - - verify(loadRegelungstextPort).loadRegelungstext(new LoadRegelungstextPort.Command(eli)); - } - - @Test - void itThrowsIfElementIsNotFound() { - // Given - var eli = DokumentExpressionEli.fromString( - "eli/bund/bgbl-1/2000/s1/1970-01-01/1/deu/regelungstext-1" - ); - var eid = "meta-1000"; - var date = Instant.parse("2099-12-31T00:00:00.00Z"); - var query = new LoadElementHtmlAtDateUseCase.Query(eli, eid, date); - - var normXml = - """ - - - - - - - - - - - - - - """; - - var regelungstext = new Regelungstext(XmlMapper.toDocument(normXml)); - when(loadRegelungstextPort.loadRegelungstext(new LoadRegelungstextPort.Command(eli))) - .thenReturn(Optional.of(regelungstext)); - when( - timeMachineService.applyPassiveModifications( - new ApplyPassiveModificationsUseCase.Query(regelungstext, date) - ) - ) - .thenReturn(regelungstext); - when(xsltTransformationService.transformLegalDocMlToHtml(any())).thenReturn("
"); - - // When / Then - assertThatThrownBy(() -> service.loadElementHtmlAtDate(query)) - .isInstanceOf(ElementNotFoundException.class); - - verify(loadRegelungstextPort).loadRegelungstext(new LoadRegelungstextPort.Command(eli)); - verify(timeMachineService) - .applyPassiveModifications(new ApplyPassiveModificationsUseCase.Query(regelungstext, date)); - } - } - @Nested class loadElementsByType { diff --git a/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ElementControllerIntegrationTest.java b/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ElementControllerIntegrationTest.java index 78f3aed64..b6a3004bb 100644 --- a/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ElementControllerIntegrationTest.java +++ b/backend/src/test/java/de/bund/digitalservice/ris/norms/integration/adapter/input/restapi/ElementControllerIntegrationTest.java @@ -1,7 +1,6 @@ package de.bund.digitalservice.ris.norms.integration.adapter.input.restapi; import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -128,31 +127,6 @@ void returnsElementRenderedAsHtml() throws Exception { .andExpect(content().string(containsString("Änderung des Vereinsgesetzes"))); } - @Test - void returnsElementAtGivenIsoDateRenderedAsHtml() throws Exception { - // Given - dokumentRepository.save( - DokumentMapper.mapToDto(Fixtures.loadRegelungstextFromDisk("NormWithMultipleMods.xml")) - ); - dokumentRepository.save( - DokumentMapper.mapToDto( - Fixtures.loadRegelungstextFromDisk("NormWithMultiplePassiveModifications.xml") - ) - ); - - // When / Then - mockMvc - .perform( - get( - "/api/v1/norms/eli/bund/bgbl-1/1990/s2954/2022-12-19/1/deu/regelungstext-1/elements/hauptteil-1_art-1?atIsoDate=2017-03-01T00:00:00.000Z" - ) - .accept(MediaType.TEXT_HTML) - ) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("§ 9 Absatz 1 Satz 2, Absatz 2 oder 3"))) - .andExpect(content().string(not(containsString("§ 9 Abs. 1 Satz 2, Abs. 2")))); - } - @Test void returnsBadRequestIfAtIsoDateIsInvalid() throws Exception { // Given