use automapper_validation::eval::codelist::{ArtikelIdCodelist, CodelistColumn};
use automapper_validation::eval::{EvaluationContext, MapExternalProvider};
const MINI_JSON: &str = r#"{
"version": "5.6",
"valid_from": "2025-09-01",
"source_url": "https://example.com",
"source_published": "2025-09-30",
"pipeline_version": 1,
"codes": {
"1-02-0-001": {
"description": "Grundpreis Marktlokation",
"einheit": "€/Tag",
"utilmd": { "codeverwendung": true, "preisangabe": false },
"pricat": { "codeverwendung": true, "preisangabe": true },
"invoic": { "codeverwendung": true, "preisangabe": true }
},
"1-08-4-004": {
"description": "Höchstbetrag Konzessionsabgabe",
"einheit": "€/kWh",
"utilmd": { "codeverwendung": true, "preisangabe": false },
"pricat": { "codeverwendung": true, "preisangabe": false },
"invoic": { "codeverwendung": true, "preisangabe": true }
}
}
}"#;
#[test]
fn flag_returns_true_for_x_marked_column() {
let list = ArtikelIdCodelist::from_json(MINI_JSON).unwrap();
assert_eq!(
list.flag("1-02-0-001", CodelistColumn::UtilmdCodeverwendung),
Some(true)
);
assert_eq!(
list.flag("1-02-0-001", CodelistColumn::UtilmdPreisangabe),
Some(false)
);
assert_eq!(
list.flag("1-08-4-004", CodelistColumn::InvoicPreisangabe),
Some(true)
);
}
#[test]
fn flag_returns_none_for_unknown_code() {
let list = ArtikelIdCodelist::from_json(MINI_JSON).unwrap();
assert_eq!(
list.flag("9-99-9-999", CodelistColumn::UtilmdPreisangabe),
None
);
}
#[test]
fn embedded_contains_sample_entries() {
let list = ArtikelIdCodelist::embedded();
assert_eq!(
list.flag("1-02-0-001", CodelistColumn::UtilmdPreisangabe),
Some(false)
);
assert_eq!(
list.flag("1-02-0-001", CodelistColumn::PricatPreisangabe),
Some(true)
);
assert_eq!(
list.flag("1-08-4-004", CodelistColumn::InvoicPreisangabe),
Some(true)
);
}
#[test]
fn context_new_provides_embedded_codelist() {
let external = MapExternalProvider::new(Default::default());
let segments = vec![];
let ctx = EvaluationContext::new("55218", &external, &segments);
assert_eq!(
ctx.codelist.flag(
"1-02-0-001",
automapper_validation::eval::CodelistColumn::UtilmdPreisangabe
),
Some(false),
);
}