commit 9c975b780060afbc023a433ef53b8726f3d8420b
parent 664956c4f633956fc01e2c20ec30328e414d4556
Author: Antoine A <>
Date: Tue, 22 Sep 2026 13:32:15 +0200
nexus: add postfinance test
Diffstat:
3 files changed, 212 insertions(+), 16 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -390,9 +390,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.4.6"
+version = "1.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4"
+checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -1023,9 +1023,9 @@ dependencies = [
[[package]]
name = "find-msvc-tools"
-version = "0.1.12"
+version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d"
+checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b"
[[package]]
name = "flate2"
@@ -1440,9 +1440,9 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.27.9"
+version = "0.27.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
+checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53"
dependencies = [
"http",
"hyper",
@@ -1811,7 +1811,7 @@ dependencies = [
"jiff",
"pretty_assertions",
"prometheus-client",
- "rand 0.10.2",
+ "rand 0.10.3",
"regex",
"serde",
"serde_json",
@@ -1844,7 +1844,7 @@ dependencies = [
"jiff",
"pdf-writer",
"pretty_assertions",
- "rand 0.10.2",
+ "rand 0.10.3",
"rcgen",
"reqwest",
"reqwest-websocket",
@@ -1940,9 +1940,9 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.24"
+version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a"
+checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
dependencies = [
"bitflags 2.13.2",
"libc",
@@ -2470,7 +2470,7 @@ dependencies = [
"bytes",
"getrandom 0.4.3",
"lru-slab",
- "rand 0.10.2",
+ "rand 0.10.3",
"rand_pcg",
"ring",
"rustc-hash",
@@ -2541,9 +2541,9 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.10.2"
+version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
+checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
dependencies = [
"chacha20",
"getrandom 0.4.3",
@@ -3545,7 +3545,7 @@ dependencies = [
"jiff",
"listenfd",
"prometheus-client",
- "rand 0.10.2",
+ "rand 0.10.3",
"regex",
"serde",
"serde_json",
@@ -3579,7 +3579,7 @@ dependencies = [
"indexmap",
"jiff",
"mimalloc",
- "rand 0.10.2",
+ "rand 0.10.3",
"regex",
"serde",
"serde_json",
@@ -4107,7 +4107,7 @@ checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce"
dependencies = [
"getrandom 0.4.3",
"js-sys",
- "rand 0.10.2",
+ "rand 0.10.3",
"serde_core",
"wasm-bindgen",
]
diff --git a/libeufin-nexus/conf/postfinance.conf b/libeufin-nexus/conf/postfinance.conf
@@ -0,0 +1,14 @@
+[nexus-ebics]
+CURRENCY = CHF
+BANK_DIALECT = postfinance
+
+HOST_ID = PFEBICS
+USER_ID = PFC00563
+PARTNER_ID = PFC00563
+
+IBAN = CH9289144596463965762
+BIC = POFICHBEXXX
+NAME = myname
+
+[libeufin-nexusdb-postgres]
+CONFIG = postgres:///taler_rust_check
diff --git a/libeufin-nexus/src/fetch.rs b/libeufin-nexus/src/fetch.rs
@@ -1762,4 +1762,186 @@ pub mod test {
)
.await;
}
+
+ /** PostFinance dialect test */
+ #[tokio::test]
+ async fn postfinance() {
+ let (db, cfg) = setup_cfg("postfinance.conf").await;
+ batches(
+ &db,
+ &[
+ (
+ "ZS1PGNTSV0ZNDFAJBBWWB8015G",
+ &[
+ // Legacy notifications use MsgId when EndToEndId is NOTPROVIDED.
+ gen_init_pay!(
+ "ZS1PGNTSV0ZNDFAJBBWWB8015G",
+ "init payment",
+ amount("CHF:3")
+ ),
+ gen_init_pay!(
+ "POSTFINANCE_NOTIFICATION_BATCH",
+ "init payment",
+ amount("CHF:403")
+ ),
+ ],
+ ),
+ (
+ "50820f78-9024-44ff-978d-63a18c",
+ &[gen_init_pay!(
+ "50820f78-9024-44ff-978d-63a18c",
+ "init payment",
+ amount("CHF:1")
+ )],
+ ),
+ (
+ "889d1a80-1267-49bd-8fcc-85701a",
+ &[gen_init_pay!(
+ "889d1a80-1267-49bd-8fcc-85701a",
+ "init payment",
+ amount("CHF:1")
+ )],
+ ),
+ (
+ "4cc61cc7-6230-49c2-b5e2-b40bbb",
+ &[gen_init_pay!(
+ "4cc61cc7-6230-49c2-b5e2-b40bbb",
+ "init payment",
+ amount("CHF:1")
+ )],
+ ),
+ (
+ "EB4D22D428214261B2B3012D2A8CEC36",
+ &[
+ gen_init_pay!(
+ "POSTFINANCE_STATEMENT_FIRST",
+ "init payment",
+ amount("CHF:100")
+ ),
+ gen_init_pay!(
+ "POSTFINANCE_STATEMENT_SECOND",
+ "init payment",
+ amount("CHF:306")
+ ),
+ ],
+ ),
+ ],
+ )
+ .await;
+
+ register(
+ &db,
+ &cfg,
+ "postfinance_camt054.xml",
+ &OrderDoc::notification,
+ )
+ .await;
+ register(&db, &cfg, "postfinance_camt053.xml", &OrderDoc::statement).await;
+
+ check(
+ &db,
+ &[
+ (
+ "ZS1PGNTSV0ZNDFAJBBWWB8015G",
+ success,
+ &[
+ ("ZS1PGNTSV0ZNDFAJBBWWB8015G", success),
+ ("POSTFINANCE_NOTIFICATION_BATCH", success),
+ ],
+ ),
+ (
+ "50820f78-9024-44ff-978d-63a18c",
+ success,
+ &[("50820f78-9024-44ff-978d-63a18c", permanent_failure)],
+ ),
+ (
+ "889d1a80-1267-49bd-8fcc-85701a",
+ success,
+ &[("889d1a80-1267-49bd-8fcc-85701a", permanent_failure)],
+ ),
+ (
+ "4cc61cc7-6230-49c2-b5e2-b40bbb",
+ success,
+ &[("4cc61cc7-6230-49c2-b5e2-b40bbb", permanent_failure)],
+ ),
+ (
+ "EB4D22D428214261B2B3012D2A8CEC36",
+ success,
+ &[
+ ("POSTFINANCE_STATEMENT_FIRST", success),
+ ("POSTFINANCE_STATEMENT_SECOND", success),
+ ],
+ ),
+ ],
+ &[
+ tx_in(
+ (
+ Some("62e2b511-7313-4ccd-8d40-c9d8e612cd71"),
+ None,
+ Some("231121CH0AZWCR9T"),
+ ),
+ "CHF:10",
+ "CHF:0",
+ Some("G1XTY6HGWGMVRM7E6XQ4JHJK561ETFDFTJZ7JVGV543XZCB27YBG"),
+ "2023-12-19",
+ Some(("CH7389144832588726658", "Mr Test")),
+ ),
+ tx_in(
+ (
+ Some("62e2b511-7313-4ccd-8d40-c9d8e612cd72"),
+ None,
+ Some("231121CH0AZWCVR1"),
+ ),
+ "CHF:2.53",
+ "CHF:0",
+ Some("G1XTY6HGWGMVRM7E6XQ4JHJK561ETFDFTJZ7JVGV543XZCB27YB"),
+ "2023-12-19",
+ Some(("CH7389144832588726658", "Mr Test")),
+ ),
+ ],
+ &[
+ tx_out(
+ (None, Some("ZS1PGNTSV0ZNDFAJBBWWB8015G"), None),
+ "CHF:3",
+ "CHF:0",
+ None,
+ "2024-01-15",
+ None,
+ ),
+ tx_out(
+ (None, Some("POSTFINANCE_NOTIFICATION_BATCH"), None),
+ "CHF:403",
+ "CHF:0",
+ Some("init payment"),
+ "2024-01-15",
+ Some(("CH4189144589712575493", "Test")),
+ ),
+ tx_out(
+ (None, Some("POSTFINANCE_STATEMENT_FIRST"), None),
+ "CHF:100",
+ "CHF:0",
+ Some("init payment"),
+ "2024-08-26",
+ Some(("CH4189144589712575493", "Test")),
+ ),
+ tx_out(
+ (None, Some("POSTFINANCE_STATEMENT_SECOND"), None),
+ "CHF:306",
+ "CHF:0",
+ Some("init payment"),
+ "2024-08-26",
+ Some(("CH4189144589712575493", "Test")),
+ ),
+ ],
+ &[tx_out(
+ (None, None, None),
+ "CHF:2.53",
+ "CHF:0",
+ Some("bounce 62e2b511-7313-4ccd-8d40-c9d8e612cd72: missing reserve public key"),
+ "1970-01-01",
+ Some(("CH7389144832588726658", "Mr Test")),
+ )],
+ )
+ .await;
+ }
}