diff options
author | Florian Dold <florian@dold.me> | 2021-03-27 20:48:44 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-03-27 20:48:44 +0100 |
commit | 2be1c3c8bd78b501ddf3a0b989f954f9163b3702 (patch) | |
tree | e562c21cdc3941bc9f2f5e9033250783e29e48a7 | |
parent | 93128f935817c86172406c9de41677db125d0273 (diff) |
re-add tests, more coin selection tests
-rw-r--r-- | packages/taler-wallet-core/package.json | 2 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/operations/withdraw.test.ts (renamed from packages/taler-wallet-core/src/operations/withdraw-test.ts) | 0 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/util/coinSelection.test.ts (renamed from packages/taler-wallet-core/src/util/coinSelection-test.ts) | 68 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/util/coinSelection.ts | 3 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/util/helpers.test.ts (renamed from packages/taler-wallet-core/src/util/helpers-test.ts) | 0 |
5 files changed, 71 insertions, 2 deletions
diff --git a/packages/taler-wallet-core/package.json b/packages/taler-wallet-core/package.json index 15485cb56..de974469d 100644 --- a/packages/taler-wallet-core/package.json +++ b/packages/taler-wallet-core/package.json @@ -71,7 +71,7 @@ "esm" ], "files": [ - "src/**/*-test.*" + "src/**/*.test.*" ], "typescript": { "extensions": [ diff --git a/packages/taler-wallet-core/src/operations/withdraw-test.ts b/packages/taler-wallet-core/src/operations/withdraw.test.ts index ad52a5f0c..ad52a5f0c 100644 --- a/packages/taler-wallet-core/src/operations/withdraw-test.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.test.ts diff --git a/packages/taler-wallet-core/src/util/coinSelection-test.ts b/packages/taler-wallet-core/src/util/coinSelection.test.ts index 962a14835..bfcd05cce 100644 --- a/packages/taler-wallet-core/src/util/coinSelection-test.ts +++ b/packages/taler-wallet-core/src/util/coinSelection.test.ts @@ -184,3 +184,71 @@ test("coin selection 6", (t) => { t.true(!res); t.pass(); }); + +test("coin selection 7", (t) => { + const acis: AvailableCoinInfo[] = [ + fakeAci("EUR:1.0", "EUR:0.1"), + fakeAci("EUR:1.0", "EUR:0.1"), + ]; + const res = selectPayCoins({ + candidates: { + candidateCoins: acis, + wireFeesPerExchange: {}, + }, + contractTermsAmount: a("EUR:2.0"), + depositFeeLimit: a("EUR:0.2"), + wireFeeLimit: a("EUR:0"), + wireFeeAmortization: 1, + }); + t.truthy(res); + t.true(Amounts.cmp(res!.customerDepositFees, "EUR:0.0") === 0); + t.true( + Amounts.cmp(Amounts.sum(res!.coinContributions).amount, "EUR:2.0") === 0, + ); + t.pass(); +}); + +test("coin selection 8", (t) => { + const acis: AvailableCoinInfo[] = [ + fakeAci("EUR:1.0", "EUR:0.2"), + fakeAci("EUR:0.1", "EUR:0.2"), + fakeAci("EUR:0.05", "EUR:0.05"), + fakeAci("EUR:0.05", "EUR:0.05"), + ]; + const res = selectPayCoins({ + candidates: { + candidateCoins: acis, + wireFeesPerExchange: {}, + }, + contractTermsAmount: a("EUR:1.1"), + depositFeeLimit: a("EUR:0.4"), + wireFeeLimit: a("EUR:0"), + wireFeeAmortization: 1, + }); + t.truthy(res); + t.true(res!.coinContributions.length === 3); + t.pass(); +}); + +test("coin selection 9", (t) => { + const acis: AvailableCoinInfo[] = [ + fakeAci("EUR:1.0", "EUR:0.2"), + fakeAci("EUR:0.2", "EUR:0.2"), + ]; + const res = selectPayCoins({ + candidates: { + candidateCoins: acis, + wireFeesPerExchange: {}, + }, + contractTermsAmount: a("EUR:1.2"), + depositFeeLimit: a("EUR:0.4"), + wireFeeLimit: a("EUR:0"), + wireFeeAmortization: 1, + }); + t.truthy(res); + t.true(res!.coinContributions.length === 2); + t.true( + Amounts.cmp(Amounts.sum(res!.coinContributions).amount, "EUR:1.2") === 0, + ); + t.pass(); +}); diff --git a/packages/taler-wallet-core/src/util/coinSelection.ts b/packages/taler-wallet-core/src/util/coinSelection.ts index a840993c4..e1fec5c97 100644 --- a/packages/taler-wallet-core/src/util/coinSelection.ts +++ b/packages/taler-wallet-core/src/util/coinSelection.ts @@ -284,9 +284,10 @@ export function selectPayCoins( for (const aci of candidateCoins) { // Don't use this coin if depositing it is more expensive than // the amount it would give the merchant. - if (Amounts.cmp(aci.feeDeposit, aci.availableAmount) >= 0) { + if (Amounts.cmp(aci.feeDeposit, aci.availableAmount) > 0) { continue; } + if (Amounts.isZero(tally.amountPayRemaining)) { // We have spent enough! break; diff --git a/packages/taler-wallet-core/src/util/helpers-test.ts b/packages/taler-wallet-core/src/util/helpers.test.ts index dbecf14b8..dbecf14b8 100644 --- a/packages/taler-wallet-core/src/util/helpers-test.ts +++ b/packages/taler-wallet-core/src/util/helpers.test.ts |