aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-02 19:45:34 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-02 19:45:34 +0200
commita201e83e59562e0e662196a616ff746cdaddd74e (patch)
treebebd570c3098f8793d9d6f3442bbb50433374917 /src/test/java
parentbac648b8fc06dfffaf67cf283f73fa2572e67575 (diff)
Close the NRW issue: 17. RÄStV-AusfG as a fourth acceptance case
Article 4 of the 22nd Broadcasting Amendment Act recasts § 1 of the act implementing the 17th Broadcasting Amendment Treaty. Both the pre- and the post-amendment consolidated version are served by recht.nrw.de, so this closes the last open article of GV. NRW. 7/2026. No production code needed changing: the article carries its single command without an enumeration item, and the recast quote contains nested quotation marks — both are already handled. The result matches the official version of 1 April 2026 character for character, including its editorial placeholders. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: If63606d113f2801f0c9e82350215443da8e8be8b
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/eu/mulk/aendggner/EndToEndTest.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
index 959e664..035c3f1 100644
--- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java
+++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
@@ -772,4 +772,76 @@ class EndToEndTest {
assertThat(ZitatExtraktor.extrahiere(text).warnungen())
.anyMatch(w -> w.startsWith("Zitat vor dem Aufzählungspunkt „cc)“ nicht geschlossen"));
}
+
+ /**
+ * Nordrhein-Westfalen: Artikel 4 desselben Heftes fasst § 1 des Ausführungsgesetzes zum
+ * Siebzehnten Rundfunkänderungsstaatsvertrag neu. Damit sind alle vier ändernden Artikel des
+ * Heftes GV. NRW. 7/2026 belegt.
+ *
+ * <p>Zwei Eigenheiten: Der Artikel führt seinen einzigen Befehl <em>ohne</em> Gliederungspunkt,
+ * und das Zitat der neuen Fassung trägt verschachtelte Anführungszeichen (ein vollständiges
+ * „durch Artikel 3 …“ innerhalb einer eckigen Klammer). Das Ergebnis stimmt zeichengenau mit der
+ * amtlichen Fassung vom 1. April 2026 (recht.nrw.de) überein — einschließlich der amtlichen
+ * Platzhalter „[einsetzen: …]“.
+ */
+ @Test
+ void rundfunkAusfuehrungsgesetzAcceptance() throws Exception {
+ var alt = SAMPLEDATA.resolve("NRW/17-RAEStV-AusfG-alt.txt");
+ var pdf = SAMPLEDATA.resolve("NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf");
+ assumeTrue(Files.exists(alt) && Files.exists(pdf), "17.-RÄStV-AusfG-Beispieldaten fehlen");
+
+ var gesetz = new eu.mulk.aendggner.gesetz.land.LandesRechtLoader().load(alt);
+ // Der Klammerzusatz führt hier nur eine (mehrteilige) Bezeichnung, keinen Kurztitel am
+ // Gedankenstrich; genau sie nennt der Einleitungssatz des Artikels 4.
+ assertThat(gesetz.jurabk()).isEqualTo("Siebzehnter Rundfunkänderungsstaatsvertrag"
+ + " Ausführungsgesetz");
+ assertThat(gesetz.kurzue()).isNull();
+ assertThat(gesetz.normen()).hasSize(3);
+ // Der alte § 1 besteht aus einem einzigen, unbezeichneten Absatz.
+ assertThat(gesetz.norm("§ 1").orElseThrow().absaetze()).hasSize(1);
+ assertThat(gesetz.norm("§ 1").orElseThrow().absaetze().get(0).nummer()).isNull();
+
+ var text = TextBereiniger.bereinige(new PatchTextExtraktor().extrahiere(pdf));
+ var parseErgebnis = new AenderungsgesetzParser().parse(text, gesetz, null);
+ // Nur Artikel 4 trifft dieses Gesetz — die Auswahl gelingt über die Bezeichnung allein.
+ assertThat(parseErgebnis.artikel()).containsExactly("4");
+ // Der Artikel trägt keine nummerierten Punkte: Der Text nach der Änderungsformel ist der Befehl.
+ assertThat(parseErgebnis.befehle()).hasSize(1);
+ assertThat(parseErgebnis.befehle().get(0)).isInstanceOf(Aenderungsbefehl.Neufassung.class);
+ assertThat(parseErgebnis.befehle().get(0).stelle().anzeigeText()).isEqualTo("§ 1");
+
+ var anwendung = BefehlAnwender.anwenden(gesetz, parseErgebnis.befehle());
+ assertThat(anwendung.anzahlAngewandt()).isEqualTo(1);
+ assertThat(anwendung.protokoll())
+ .noneMatch(a -> a.status() == BefehlAnwender.Status.MANUELL_PRUEFEN);
+
+ // Abgleich mit der amtlichen Fassung vom 01.04.2026: aus dem einen unbezeichneten Absatz sind
+ // zwei nummerierte geworden, Überschrift und Wortlaut stimmen zeichengenau.
+ var neu = anwendung.neu();
+ var paragraph1 = neu.norm("§ 1").orElseThrow();
+ assertThat(paragraph1.titel()).isEqualTo("Entsendungsbefugnis");
+ assertThat(paragraph1.absaetze()).hasSize(2);
+ assertThat(paragraph1.absaetze().get(0).text())
+ .isEqualTo(
+ "Die Vertreterin oder der Vertreter aus dem Bereich „Medienwirtschaft und Film“ nach"
+ + " § 21 Absatz 1 Satz 1 Buchstabe q Doppelbuchstabe jj des ZDF-Staatsvertrags vom"
+ + " 31. August 1991 (GV. NRW. S. 408), der zuletzt durch Artikel 2 des Vierten"
+ + " Medienänderungsstaatsvertrages vom 9. bis 16. Mai 2023 geändert worden ist"
+ + " (GV. NRW. S. 1252) [noch erforderliche Anpassung: „durch Artikel 3 des Siebten"
+ + " Medienänderungsstaatsvertrages vom 14. bis 26. März 2025 geändert worden ist"
+ + " (GV. NRW. [einsetzen: Datum der Bekanntmachung])“], wird gemeinsam durch die"
+ + " Allianz Deutscher Produzentinnen und Produzenten – Film, Fernsehen und"
+ + " Audiovisuelle Medien e.V., Produktionsallianz NRW, das Filmbüro NW e.V. und den"
+ + " Kulturrat NRW e.V., Sektion Medien, in den Fernsehrat des ZDF entsandt.");
+ assertThat(paragraph1.absaetze().get(1).text())
+ .isEqualTo(
+ "Bis zum Ende der zum Stichtag 31. Dezember 2025 laufenden Amtsperiode des Fernsehrates"
+ + " des ZDF ist § 1 in der am [einsetzen: Datum der Verkündung dieses Gesetzes]"
+ + " geltenden Fassung weiter anzuwenden.");
+ // §§ 2 und 3 bleiben unberührt.
+ assertThat(neu.norm("§ 2").orElseThrow().gesamtText())
+ .isEqualTo(gesetz.norm("§ 2").orElseThrow().gesamtText());
+ assertThat(neu.norm("§ 3").orElseThrow().gesamtText())
+ .isEqualTo(gesetz.norm("§ 3").orElseThrow().gesamtText());
+ }
}