use super::identity::*;
use crate::passport::ManufacturerInfo;
use crate::passport::Passport;
use crate::product_group::ProductGroup;
use crate::product_group::{ProductGroupData, TextileData};
fn base_passport(
product_group: ProductGroup,
product_group_data: Option<ProductGroupData>,
) -> Passport {
Passport {
batch_id: Some("BATCH-1".into()),
serial_number: None,
product_name: "Test".into(),
product_group,
manufacturer: ManufacturerInfo {
name: "Acme".into(),
address: "1 Street".into(),
country: None,
did_web_url: None,
registered_trade_name: None,
electronic_address: None,
},
product_group_data,
..crate::test_support::sample_passport()
}
}
fn battery_data() -> ProductGroupData {
ProductGroupData::Battery(Box::new(crate::test_support::sample_battery_data()))
}
#[test]
fn battery_passport_yields_identity() {
let p = base_passport(ProductGroup::Battery, Some(battery_data()));
let id = ProductIdentity::from_passport(&p).expect("battery has a gtin");
assert_eq!(id.product_group, ProductGroup::Battery);
assert_eq!(id.gtin, "09506000134352");
assert_eq!(id.batch_id.as_deref(), Some("BATCH-1"));
}
#[test]
fn textile_passport_yields_identity() {
let textile_data = ProductGroupData::Textile(Box::new(TextileData {
country_of_origin: "BD".into(),
care_instructions: "wash".into(),
chemical_compliance_standard: "OEKO-TEX 100".into(),
..crate::test_support::sample_textile_data()
}));
let p = base_passport(ProductGroup::Textile, Some(textile_data));
let id = ProductIdentity::from_passport(&p).expect("textile has a gtin");
assert_eq!(id.product_group, ProductGroup::Textile);
assert_eq!(id.gtin, "09506000134352");
}
#[test]
fn no_product_group_data_yields_no_identity() {
let p = base_passport(ProductGroup::Battery, None);
assert!(ProductIdentity::from_passport(&p).is_none());
}