commit d17c89c7e0254b075dcae7ecc972bf3ca5193681
parent 69e819fa86037d32c4c86948b97f8651e3f475bd
Author: Florian Dold <florian@dold.me>
Date: Mon, 9 Feb 2026 17:22:29 +0100
fix withdrawal test
selectWithdrawalDenominations now has some extra preconditions
Diffstat:
1 file changed, 62 insertions(+), 79 deletions(-)
diff --git a/packages/taler-wallet-core/src/withdraw.test.ts b/packages/taler-wallet-core/src/withdraw.test.ts
@@ -14,7 +14,13 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { AmountString, Amounts, DenomKeyType } from "@gnu-taler/taler-util";
+import {
+ AbsoluteTime,
+ AmountString,
+ Amounts,
+ DenomKeyType,
+ Duration,
+} from "@gnu-taler/taler-util";
import test from "ava";
import {
DenominationRecord,
@@ -30,6 +36,29 @@ test("withdrawal selection bug repro", (t) => {
value: 23,
};
+ const now = AbsoluteTime.now();
+
+ const stampStart = timestampProtocolToDb(
+ AbsoluteTime.toProtocolTimestamp(
+ AbsoluteTime.subtractDuraction(now, Duration.fromSpec({ minutes: 1 })),
+ ),
+ );
+ const stampExpireWithdraw = timestampProtocolToDb(
+ AbsoluteTime.toProtocolTimestamp(
+ AbsoluteTime.addDuration(now, Duration.fromSpec({ hours: 1 })),
+ ),
+ );
+ const stampExpireDeposit = timestampProtocolToDb(
+ AbsoluteTime.toProtocolTimestamp(
+ AbsoluteTime.addDuration(now, Duration.fromSpec({ hours: 5 })),
+ ),
+ );
+ const stampExpireLegal = timestampProtocolToDb(
+ AbsoluteTime.toProtocolTimestamp(
+ AbsoluteTime.addDuration(now, Duration.fromSpec({ hours: 10 })),
+ ),
+ );
+
const denoms: DenominationRecord[] = [
{
denominationFamilySerial: 0,
@@ -69,19 +98,11 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"4F0P456CNNTTWK8BFJHGM3JTD6FVVNZY8EP077GYAHDJ5Y81S5RQ3SMS925NXMDVG9A88JAAP0E2GDZBC21PP5NHFFVWHAW3AVT8J3R",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
currency: "KUDOS",
value: "KUDOS:1000" as AmountString,
},
@@ -124,19 +145,11 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"P99AW82W46MZ0AKW7Z58VQPXFNTJQM9DVTYPBDF6KVYF38PPVDAZTV7JQ8TY7HGEC7JJJAY4E7AY7J3W1WV10DAZZQHHKTAVTSRAC20",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
value: "KUDOS:10" as AmountString,
currency: "KUDOS",
},
@@ -178,19 +191,11 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"8S4VZGHE5WE0N5ZVCHYW9KZZR4YAKK15S46MV1HR1QB9AAMH3NWPW4DCR4NYGJK33Q8YNFY80SWNS6XKAP5DEVK933TM894FJ2VGE3G",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
value: "KUDOS:5" as AmountString,
currency: "KUDOS",
},
@@ -233,19 +238,11 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"E3AWGAG8VB42P3KXM8B04Z6M483SX59R3Y4T53C3NXCA2NPB6C7HVCMVX05DC6S58E9X40NGEBQNYXKYMYCF3ASY2C4WP1WCZ4ME610",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
value: "KUDOS:1" as AmountString,
currency: "KUDOS",
},
@@ -287,19 +284,11 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"0ES1RKV002XB4YP21SN0QB7RSDHGYT0XAE65JYN8AVJAA6H7JZFN7JADXT521DJS89XMGPZGR8GCXF1516Y0Q9QDV00E6NMFA6CF838",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
value: Amounts.stringify({
currency: "KUDOS",
fraction: 10000000,
@@ -345,24 +334,18 @@ test("withdrawal selection bug repro", (t) => {
isRevoked: false,
masterSig:
"58QEB6C6N7602E572E3JYANVVJ9BRW0V9E2ZFDW940N47YVQDK9SAFPWBN5YGT3G1742AFKQ0CYR4DM2VWV0Z0T1XMEKWN6X2EZ9M0R",
- stampExpireDeposit: timestampProtocolToDb({
- t_s: 1742909388,
- }),
- stampExpireLegal: timestampProtocolToDb({
- t_s: 1900589388,
- }),
- stampExpireWithdraw: timestampProtocolToDb({
- t_s: 1679837388,
- }),
- stampStart: timestampProtocolToDb({
- t_s: 1585229388,
- }),
- verificationStatus: DenominationVerificationStatus.Unverified,
+ stampExpireDeposit,
+ stampExpireLegal,
+ stampExpireWithdraw,
+ stampStart,
+ verificationStatus: DenominationVerificationStatus.VerifiedGood,
value: "KUDOS:2" as AmountString,
currency: "KUDOS",
},
];
+ denoms.sort((d1, d2) => Amounts.cmp(d2.value, d1.value));
+
const res = selectWithdrawalDenominations(amount, denoms);
t.assert(Amounts.cmp(res.totalWithdrawCost, amount) <= 0);