taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

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:
Mpackages/taler-harness/src/harness/tops.ts | 25+++++++++++++++++++++++++
Mpackages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts | 24++++++++++++++++++------
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",