use crate::util::Parser;
use crate::util::X12Element;
use crate::v005010::element::{E373, E374, E737, E738};
use crate::v005010::*;
#[test]
fn dtm_typed() {
let (rest, dtm) = DTM::parse("DTM*011*20200101~").unwrap();
assert_eq!(rest, "");
assert_eq!(dtm._01, E374::Shipped); assert_eq!(
dtm._02.as_ref().and_then(|d| d.date()),
chrono::NaiveDate::from_ymd_opt(2020, 1, 1)
);
assert_eq!(format!("{dtm}"), "DTM*011*20200101~\n");
let (_, dtm2) = DTM::parse("DTM*ZZZ~").unwrap();
assert_eq!(dtm2._01, E374::Unknown("ZZZ".to_string()));
assert_eq!(format!("{dtm2}"), "DTM*ZZZ~\n");
}
#[test]
fn mea_typed_codes() {
let (rest, mea) = MEA::parse("MEA*PD*HT*5~").unwrap();
assert_eq!(rest, "");
assert_eq!(mea._01, Some(E737::Pd)); assert_eq!(mea._02, Some(E738::Ht)); assert_eq!(mea._03.as_ref().map(|e| e.raw()), Some("5"));
assert_eq!(mea._03.as_ref().and_then(|e| e.as_f64()), Some(5.0));
assert_eq!(format!("{mea}"), "MEA*PD*HT*5~\n");
}
#[test]
fn mea_unknown_code_round_trips() {
let (_, mea) = MEA::parse("MEA*ZZ*QQ~").unwrap();
assert_eq!(mea._01, Some(E737::Unknown("ZZ".to_string())));
assert_eq!(mea._02, Some(E738::Unknown("QQ".to_string())));
assert_eq!(format!("{mea}"), "MEA*ZZ*QQ~\n");
}
#[test]
fn mea_object_round_trip() {
let (_, a) = MEA::parse("MEA*WT*N*100*LB~").unwrap();
let r = format!("{a}");
let (_, b) = MEA::parse(r.trim_end()).unwrap();
assert_eq!(a, b);
}
#[test]
fn date_element() {
let d = E373::from_x12("20200101");
assert_eq!(d.raw(), "20200101");
assert_eq!(format!("{d}"), "20200101");
assert_eq!(d.date(), chrono::NaiveDate::from_ymd_opt(2020, 1, 1));
let built = E373::from_date(chrono::NaiveDate::from_ymd_opt(2020, 1, 1).unwrap());
assert_eq!(built, d);
assert_eq!(built.raw(), "20200101");
}