//! 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" ); }