//! 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"));
}