Files
enok/tests/rapport.rs
blandClaude Opus 5 bef3bb1090
test / test (pull_request) Successful in 2m22s
Vis prosjektversjonen i et internkontrollfelt på forsiden
Rapporten bar enok-versjonen og datoen i bunnteksten på hver side, men ikke hvilken versjon
av prosjektet den var laget fra. Det er den opplysningen som knytter rapporten til en bestemt
utgivelse av bygningsmodellen, og den hører hjemme ett sted, tydelig plassert.

Forsiden har nå et internkontrollfelt med prosjekt, prosjektversjon, oppdragsgiver,
energirådgiver, dato og enok-versjon. Bunnteksten gjentar ikke lenger versjon og dato.

Versjonen settes med «rapport.versjon» eller «--versjon», slik at byggeserveren kan sende
taggen på utgivelsen uten at noen fil endres.

Lukker #1

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-10-05 19:57:21 +02:00

70 lines
2.3 KiB
Rust

//! Kontroll av opplysningene rapporten skal bære: hvilket prosjekt, hvilken versjon og når.
use enok::data::Datakilde;
use enok::{inndata, kjor, rapport};
use std::path::{Path, PathBuf};
fn rapportkilde(versjon: Option<&str>, katalog: &str) -> String {
let mut b = inndata::les_bygning(Path::new("eksempler/referansebygg/smaahus.toml")).unwrap();
b.rapport.versjon = versjon.map(str::to_string);
let r = kjor::kjor(&b, &Datakilde::default()).unwrap();
let ut: PathBuf = std::env::temp_dir().join(katalog);
rapport::typst_ut::skriv(&r, &ut, &[]).unwrap();
std::fs::read_to_string(ut.join("rapport.typ")).unwrap()
}
fn oppsettlinjen(kilde: &str) -> String {
kilde
.lines()
.find(|l| l.starts_with("#show: oppsett.with("))
.unwrap_or_default()
.to_string()
}
/// Prosjektversjonen hører hjemme i internkontrollfeltet på forsiden.
#[test]
fn prosjektversjonen_staar_i_internkontrollfeltet() {
let kilde = rapportkilde(Some("v0.3.12"), "enok-rapport-med-versjon");
assert!(
kilde.contains("#internkontroll(("),
"mangler internkontrollfeltet"
);
assert!(
kilde.contains("(\"Prosjektversjon\", \"v0.3.12\")"),
"mangler prosjektversjonen"
);
assert!(kilde.contains("(\"Prosjekt\","), "mangler prosjektnavnet");
assert!(kilde.contains("(\"Dato\","), "mangler datoen");
assert!(
kilde.contains("(\"Beregnet med\", \"enok "),
"mangler enok-versjonen"
);
}
/// Uten oppgitt versjon står feltet der, men uten en tom versjonslinje.
#[test]
fn uten_versjon_staar_ingen_versjonslinje() {
let kilde = rapportkilde(None, "enok-rapport-uten-versjon");
assert!(kilde.contains("#internkontroll(("));
assert!(
!kilde.contains("Prosjektversjon"),
"skal ikke stå tom versjon"
);
}
/// Versjon og dato skal stå ett sted, på forsiden, ikke på hver eneste side.
#[test]
fn bunnteksten_gjentar_ikke_versjon_og_dato() {
let kilde = rapportkilde(Some("v0.3.12"), "enok-rapport-bunntekst");
let linje = oppsettlinjen(&kilde);
assert!(!linje.is_empty(), "fant ikke oppsettlinjen");
assert!(
!linje.contains("enok "),
"bunnteksten gjentar enok-versjonen: {linje}"
);
assert!(
!linje.contains("v0.3.12"),
"bunnteksten gjentar prosjektversjonen"
);
}