commit 187a4cd7e750fb3d5a6aeb699de3aea83ee956e5
parent b97f97c11f2f0505354eb49721eb7ea0dd27487a
Author: Florian Dold <florian@dold.me>
Date: Fri, 12 Dec 2025 22:18:56 +0100
harness: use submitOfficerForm to submit AML officer form
Diffstat:
2 files changed, 43 insertions(+), 6 deletions(-)
diff --git a/packages/taler-harness/src/harness/tops.ts b/packages/taler-harness/src/harness/tops.ts
@@ -1003,6 +1003,7 @@ export interface MeasuresTestEnvironment {
address: any,
) => Promise<void>;
submitForm: (form: string, data: any) => Promise<void>;
+ submitOfficerForm: (form: string, data: any) => Promise<void>;
decideMeasure: (measure: string) => Promise<{
currentDecision: AmlDecision;
}>;
@@ -1079,6 +1080,29 @@ export async function setupMeasuresTestEnvironment(
t.assertDeepEqual(uploadRes.case, "ok");
};
+ const submitOfficerForm = async (form: string, data: any) => {
+ const decisionsResp = succeedOrThrow(
+ await exchangeClient.getAmlDecisions(officerAcc, {
+ active: true,
+ }),
+ );
+ console.log(`existing decision:`, j2s(decisionsResp));
+
+ const currDec = decisionsResp.records[0];
+
+ succeedOrThrow(
+ await exchangeClient.makeAmlDesicion(officerAcc, {
+ decision_time: TalerProtocolTimestamp.now(),
+ h_payto: merchantPaytoHash,
+ justification: "bla",
+ properties: currDec.properties || {},
+ keep_investigating: currDec.to_investigate,
+ new_rules: currDec.limits,
+ attributes: data,
+ }),
+ );
+ };
+
const fakeChallenger = async (
challenger: TestfakeChallengerService,
address: any,
@@ -1162,6 +1186,7 @@ export async function setupMeasuresTestEnvironment(
decideMeasure: myTriggerMeasure,
decideReset: myTriggerReset,
submitForm,
+ submitOfficerForm,
async expectFrozen() {
const dec = await getCurrentDecision();
t.assertTrue(isFrozen(dec));
diff --git a/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts b/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts
@@ -24,12 +24,19 @@ import { setupMeasuresTestEnvironment } from "../harness/tops.js";
export const logger = new Logger("test-tops-aml-measures.ts");
+interface FileField {
+ CONTENTS: string;
+ ENCODING: "base64";
+ FILENAME: string;
+ MIME_TYPE: string;
+}
+
/**
* Helper function to create a mock PDF file attachment.
*/
-function createPdfAttachment(content: string): string {
+function createPdfAttachment(name: string): FileField {
// Escape parentheses for PDF literal strings
- const contentEscaped = content.replace(/\(/g, "\\(").replace(/\)/g, "\\)");
+ const contentEscaped = name.replace(/\(/g, "\\(").replace(/\)/g, "\\)");
// Minimal PDF
const pdf = `%PDF-1.1
@@ -73,7 +80,12 @@ startxref
// FIXME: Dold: which encoding are we using? Base64 or Crockford?
// Also: this doesn't yet wrap in "FILE". "File" data type seems
// unspecified in tops.rst!
- return Buffer.from(pdf, "utf8").toString("base64");
+ return {
+ CONTENTS: Buffer.from(pdf, "utf8").toString("base64"),
+ ENCODING: "base64",
+ FILENAME: name + `.pdf`,
+ MIME_TYPE: "application/pdf",
+ };
}
/**
@@ -85,6 +97,7 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) {
const {
decideMeasure,
submitForm,
+ submitOfficerForm,
expectInvestigate,
expectNoInvestigate,
officerAcc,
@@ -230,11 +243,10 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) {
console.log(`written to ${f}`);
}
- // Test vqf_902_1_officer form
- if (false) {
+ {
// FIXME: Dold
await decideMeasure("kyx");
- await submitForm("vqf_902_1_officer", {
+ await submitOfficerForm("vqf_902_1_officer", {
FORM_ID: "vqf_902_1_officer",
FORM_VERSION: 1,
ACCEPTANCE_DATE: "2025-12-01",