taler-typescript-core

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

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:
Mpackages/taler-wallet-core/src/withdraw.test.ts | 141+++++++++++++++++++++++++++++++++++--------------------------------------------
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);