diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-26 07:46:48 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-26 07:46:48 +0200 |
| commit | 5efff363d45cf03f334bf10145367e7bc43d2754 (patch) | |
| tree | 5fe5edc57c17a246a61bd74f3c840b7cf9c283c6 /src/test | |
| parent | e0754851af52d64d912d19828cab6044d1520cfc (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')
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/BezugTest.java | 59 |
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)); + } +} |
