//! Integration: build a camt.053 XML envelope from a statement and //! assert the structural elements every conformant parser keys on. use op_core::{Currency, Money}; use op_statements::{ Camt053Builder, Period, Statement, StatementLine, StatementLineKind, }; #[test] fn camt053_envelope_has_all_required_elements() { let mut s = Statement::new( "STMT-CAMT-1", "ACCT-LOREM", Period::new(1_700_000_000, 1_700_086_399).expect("period"), Currency::EUR, ) .expect("statement") .with_opening(Money::from_minor(50_000, Currency::EUR)) .expect("opening"); s.push_line( StatementLine::new( "ln-1", StatementLineKind::GrossCapture, Money::from_minor(12_345, Currency::EUR), 1_700_001_000, ) .with_external_id("E2E-REF-1"), ) .expect("push 1"); s.push_line(StatementLine::new( "ln-2", StatementLineKind::Fee, Money::from_minor(290, Currency::EUR), 1_700_001_500, )) .expect("push 2"); s.aggregate().expect("aggregate"); let xml = Camt053Builder.build(&s).expect("build"); // Envelope assert!(xml.contains("")); assert!(xml.contains("")); // Group header assert!(xml.contains("STMT-CAMT-1")); // Stmt assert!(xml.contains("STMT-CAMT-1")); assert!(xml.contains("")); assert!(xml.contains("ACCT-LOREM")); assert!(xml.contains("EUR")); // Balances assert!(xml.contains("OPBD")); assert!(xml.contains("CLBD")); // Entries assert!(xml.contains("")); assert!(xml.contains("E2E-REF-1")); assert!(xml.contains("123.45")); assert!(xml.contains("CRDT")); assert!(xml.contains("DBIT")); assert!(xml.contains("BOOK")); }