aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-26 07:46:48 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-26 07:46:48 +0200
commit5efff363d45cf03f334bf10145367e7bc43d2754 (patch)
tree5fe5edc57c17a246a61bd74f3c840b7cf9c283c6 /src/test/java
parente0754851af52d64d912d19828cab6044d1520cfc (diff)
Die Eingabe darf eine Anschrift sein
Das Handbuch verlangte, jede Eingabe als Datei bereitzuhalten. Für das Bundesrecht war das eine Zumutung: Die Anschrift des Norm-XML folgt aus der Abkürzung des Gesetzes, und wer sie von Hand herunterlädt, verrichtet eine Arbeit, die das Erzeugnis selbst verrichten kann. Der neue Bezug nimmt einen Dateipfad, eine Anschrift oder die Kurzform „gii:<Kennung>“ und gibt eine Quelle zurück. Die Kennung ist die klein geschriebene Abkürzung, in der jedes andere Zeichen als Buchstabe, Ziffer und Bindestrich zum Unterstrich wird; führt sie ins Leere, so wird im Verzeichnis des Portals nachgeschlagen, denn dass das UWG dort „uwg_2004“ heißt, kann niemand wissen. Bleibt es mehrdeutig, so wird nicht geraten, sondern aufgezählt. Die vorhandene Datei behält den Vorrang: Wer eine Datei „gii:etwas“ nennt, meint sie. Zwei Kleinigkeiten, die das Werkzeug erst brauchbar machen: Der Zwischenspeicher ist eine Bequemlichkeit und keine Bedingung — ist das Heimatverzeichnis schreibgeschützt, so wird eben jedes Mal geladen. Und ein Vermittler wird aus HTTPS_PROXY samt Kennung übernommen; die Laufzeit liest das nicht von sich aus, obgleich es auf der Kommandozeile die gewohnte Angabe ist und in einer Behörde jeder Weg darüber führt. Der Bezug gehört allein der Befehlszeile. Die Pipeline kennt weiterhin nur Name und Bytes, und die Browserfassung rührt ihn nicht an. Geprüft: mvnw verify, 415 Tests (zuvor 406), reuse lint 196/196. Von Hand belegt ist der Lauf ganz ohne Datei — „gii:UWG 2004“ nebst der Drucksache 21/1855 von dserver.bundestag.de, zwanzig Befehle angewandt; die Synopse aus „gii:UWG 2004“ gleicht bis auf den Quellennamen zeichengenau der aus der örtlichen XML-Datei. Change-Id: I935efb19a5777fc8dd08c96ff44376b65fb7211b
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/eu/mulk/aendggner/BezugTest.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/test/java/eu/mulk/aendggner/BezugTest.java b/src/test/java/eu/mulk/aendggner/BezugTest.java
new file mode 100644
index 0000000..6b54691
--- /dev/null
+++ b/src/test/java/eu/mulk/aendggner/BezugTest.java
@@ -0,0 +1,59 @@
+// SPDX-FileCopyrightText: 2026 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
+// SPDX-License-Identifier: AGPL-3.0-or-later
+package eu.mulk.aendggner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+/**
+ * Geprüft wird, was ohne Netz zu prüfen ist: die Ableitung der Kennung, die Ableitung des Namens
+ * und der Vorrang der vorhandenen Datei. Der Abruf selbst gehört nicht in eine Prüfung, die auf
+ * jedem Rechner laufen soll.
+ */
+class BezugTest {
+
+ /**
+ * Die Kennung des Portals: klein geschrieben, und was kein Buchstabe, keine Ziffer und kein
+ * Bindestrich ist, wird zum Unterstrich. So schreibt gesetze-im-internet.de seine Anschriften.
+ */
+ @ParameterizedTest
+ @CsvSource({
+ "UWG 2004, uwg_2004",
+ "uwg_2004, uwg_2004",
+ "GEG, geg",
+ "1-DM-GoldmünzG, 1-dm-goldm_nzg",
+ "' IfSG ', ifsg",
+ })
+ void leitetDieKennungAb(String angabe, String erwartet) {
+ assertThat(Bezug.kennung(angabe)).isEqualTo(erwartet);
+ }
+
+ @ParameterizedTest
+ @CsvSource({
+ "https://dserver.bundestag.de/btd/21/018/2101855.pdf, 2101855.pdf",
+ "https://www.gesetze-im-internet.de/uwg_2004/xml.zip, xml.zip",
+ "https://example.org/heft.pdf?fassung=2#seite3, heft.pdf",
+ })
+ void leitetDenNamenAusDerAnschriftAb(String anschrift, String erwartet) {
+ assertThat(Bezug.dateiname(anschrift)).isEqualTo(erwartet);
+ }
+
+ /** Die vorhandene Datei hat den Vorrang: Wer eine Datei „gii:etwas“ nennt, meint sie. */
+ @Test
+ void nimmtDieVorhandeneDateiVorJederDeutung() throws IOException, InterruptedException {
+ var datei = Path.of("src/test/resources/sampledata/Brandenburg/FraktG-alt.txt");
+ assumeTrue(Files.exists(datei), "Beispieldaten fehlen");
+
+ var quelle = Bezug.hole(datei.toString());
+
+ assertThat(quelle.name()).isEqualTo("FraktG-alt.txt");
+ assertThat(quelle.inhalt()).isEqualTo(Files.readAllBytes(datei));
+ }
+}