# Copyright (c) 2026 Kjell Tore Guttormsen. MIT License, see LICENSE. """Kjernen er uendret fra notatet, og kjernens utskrifter er lik fasit.""" from __future__ import annotations import hashlib import json import os import subprocess import sys from typing import TYPE_CHECKING import pytest from conftest import EKSEMPLER, FASIT, MODELL, fasit if TYPE_CHECKING: from pathlib import Path KILDE = json.loads((MODELL / "kjerne" / "KILDE.json").read_text(encoding="utf-8")) def test_kilde_peker_paa_notatets_commit() -> None: assert KILDE["repo"] == "https://git.fromaitochitta.com/open/den-dynamiske-rettsstaten" assert KILDE["commit"] == "2badc25e5134ee26309bd8c3bd008ac64afe55a4" assert set(KILDE["filer"]) == {"sim.py", "diagnose.py", "forlop.py"} assert {f.name for f in (MODELL / "kjerne").glob("*.py")} == set(KILDE["filer"]) @pytest.mark.parametrize("navn", ["sim.py", "diagnose.py", "forlop.py"]) def test_kjernen_har_sin_sha256(navn: str) -> None: innhold = (MODELL / "kjerne" / navn).read_bytes() assert hashlib.sha256(innhold).hexdigest() == KILDE["filer"][navn]["sha256"] assert KILDE["filer"][navn]["kilde"] == f"paper/{navn}" def test_fasit_har_22_datafiler() -> None: assert len(list((FASIT / "data").glob("*.dat"))) == 22 @pytest.mark.parametrize( ("skript", "eksempel"), [("diagnose", "eksempel_domstol"), ("diagnose", "norge_2025"), ("forlop", "eksempel_domstol"), ("forlop", "norge_2025")], ) def test_kjernens_utskrift_er_lik_fasit(skript: str, eksempel: str, tmp_path: Path) -> None: miljo = dict(os.environ, PYTHONIOENCODING="utf-8", PYTHONDONTWRITEBYTECODE="1") prosess = subprocess.run( [sys.executable, str(MODELL / "kjerne" / f"{skript}.py"), str(EKSEMPLER / f"{eksempel}.json")], capture_output=True, text=True, encoding="utf-8", env=miljo, cwd=str(tmp_path), check=False, ) assert prosess.returncode == 0, prosess.stderr assert prosess.stdout == fasit(f"{skript}_{eksempel}.txt") def test_fasit_har_ankrene_fra_notatet() -> None: domstol = fasit("diagnose_eksempel_domstol.txt") assert "Skranken som binder: Domstol (utnyttelse 1,28" in domstol assert "det vil si 19 % mer" in domstol norge = fasit("diagnose_norge_2025.txt") for ledd, utnyttelse in (("Politi og påtale", "1,09"), ("Tingrett, meddomsrett", "1,04"), ("Lagmannsrett, bevisanke", "0,88"), ("Fengsel", "1,09")): linje = next(linje for linje in norge.splitlines() if linje.startswith(ledd)) assert linje.split()[-4] == utnyttelse forlop = fasit("forlop_eksempel_domstol.txt") assert "Kritisk forsinkelse: 7,2 mnd." in forlop assert "- nå: bestill 19 % mer kapasitet" in forlop assert "- om 12 mnd: bestill 12 % mer kapasitet" in forlop