diff options
author | Florian Dold <florian.dold@gmail.com> | 2016-11-14 03:37:47 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2016-11-14 03:37:47 +0100 |
commit | ce334320363618c6c1ed3d2ae598d49cae98753c (patch) | |
tree | 1c77d9f7f8e193891b249410a4924e5d83532385 /src | |
parent | af901cb892a5ecd493915e49c04dfbecf00c8b0e (diff) | |
download | wallet-core-ce334320363618c6c1ed3d2ae598d49cae98753c.tar.xz |
add test cases for coin selection
Diffstat (limited to 'src')
-rw-r--r-- | src/types.ts | 7 | ||||
-rw-r--r-- | src/wallet-test.ts | 193 |
2 files changed, 200 insertions, 0 deletions
diff --git a/src/types.ts b/src/types.ts index 8f24fda90..f6458955b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -559,3 +559,10 @@ export interface CheckRepurchaseResult { export interface Notifier { notify(): void; } + +/** + * For terseness. + */ +export function mkAmount(value: number, fraction: number, currency: string): AmountJson { + return {value, fraction, currency}; +} diff --git a/src/wallet-test.ts b/src/wallet-test.ts new file mode 100644 index 000000000..144b2054c --- /dev/null +++ b/src/wallet-test.ts @@ -0,0 +1,193 @@ +import {test, TestLib} from "testlib/talertest"; +import {mkAmount} from "./types"; +import * as wallet from "./wallet"; + + +test("coin selection 1", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,5,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + +test("coin selection 2", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + // Merchant covers the fee, this one shouldn't be used + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,5,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + +test("coin selection 2", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,2,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + + +test("coin selection 3", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,2,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 3); + t.pass(); +}); + + +test("coin selection 3", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(4,0,"EUR"), mkAmount(0,2,"EUR")); + t.assert(!res); + t.pass(); + +}); |