use super::ManufacturerInfo;
fn manufacturer(country: Option<&str>) -> ManufacturerInfo {
ManufacturerInfo {
name: "GreenCell GmbH".to_owned(),
address: "Alexanderplatz 1, Berlin".to_owned(),
country: country.map(str::to_owned),
did_web_url: None,
registered_trade_name: None,
electronic_address: None,
}
}
#[test]
fn a_document_written_before_the_field_existed_reads_with_no_country() {
let stored = serde_json::json!({
"name": "GreenCell GmbH",
"address": "Alexanderplatz 1, Berlin",
"didWebUrl": null,
});
let info: ManufacturerInfo = serde_json::from_value(stored).expect("pre-field document reads");
assert_eq!(info.country, None);
assert_eq!(info.name, "GreenCell GmbH");
}
#[test]
fn the_wire_key_is_country() {
let json = serde_json::to_value(manufacturer(Some("DE"))).unwrap();
assert_eq!(json["country"], "DE");
}
#[test]
fn an_assigned_code_is_accepted() {
assert!(manufacturer(Some("DE")).validate_country().is_ok());
assert!(manufacturer(Some("BD")).validate_country().is_ok());
}
#[test]
fn an_absent_country_is_not_an_error() {
assert!(manufacturer(None).validate_country().is_ok());
}
#[test]
fn a_well_formed_but_unassigned_code_is_refused() {
assert_eq!(manufacturer(Some("XX")).validate_country(), Err("XX"));
assert_eq!(manufacturer(Some("QZ")).validate_country(), Err("QZ"));
}
#[test]
fn a_country_name_or_an_address_is_refused_where_a_code_belongs() {
assert_eq!(
manufacturer(Some("Germany")).validate_country(),
Err("Germany")
);
assert_eq!(manufacturer(Some("de")).validate_country(), Err("de"));
assert_eq!(
manufacturer(Some("Alexanderplatz 1, Berlin")).validate_country(),
Err("Alexanderplatz 1, Berlin")
);
}
#[test]
fn a_document_written_before_the_contact_fields_existed_reads_with_neither() {
let stored = serde_json::json!({
"name": "GreenCell GmbH",
"address": "Alexanderplatz 1, Berlin",
"country": "DE",
});
let info: ManufacturerInfo = serde_json::from_value(stored).expect("pre-field document reads");
assert_eq!(info.registered_trade_name, None);
assert_eq!(info.electronic_address, None);
}
#[test]
fn a_trade_name_distinct_from_the_legal_name_round_trips() {
let mut info = manufacturer(Some("DE"));
info.registered_trade_name = Some("GreenCell".to_owned());
info.electronic_address = Some("contact@greencell.example".to_owned());
let json = serde_json::to_value(&info).expect("serialises");
assert_eq!(json["name"], "GreenCell GmbH");
assert_eq!(json["registeredTradeName"], "GreenCell");
assert_eq!(json["electronicAddress"], "contact@greencell.example");
let back: ManufacturerInfo = serde_json::from_value(json).expect("deserialises");
assert_eq!(back.registered_trade_name.as_deref(), Some("GreenCell"));
assert_eq!(
back.electronic_address.as_deref(),
Some("contact@greencell.example")
);
}
#[test]
fn unstated_contact_fields_are_omitted_not_nulled() {
let json = serde_json::to_value(manufacturer(Some("DE"))).expect("serialises");
assert!(
json.get("registeredTradeName").is_none(),
"expected the key to be absent, got {json}"
);
assert!(json.get("electronicAddress").is_none());
}
#[test]
fn the_public_view_keeps_the_contact_details() {
use crate::access::redact_passport;
use crate::disclosure::Audience;
let mut passport = crate::test_support::fully_populated_passport();
passport.manufacturer.registered_trade_name = Some("GreenCell".to_owned());
passport.manufacturer.electronic_address = Some("contact@greencell.example".to_owned());
let public = redact_passport(&passport, Audience::Public);
let json = serde_json::to_value(&public).expect("serialises");
assert_eq!(json["manufacturer"]["registeredTradeName"], "GreenCell");
assert_eq!(
json["manufacturer"]["electronicAddress"],
"contact@greencell.example"
);
}