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 | |
parent | af901cb892a5ecd493915e49c04dfbecf00c8b0e (diff) |
add test cases for coin selection
-rw-r--r-- | src/types.ts | 7 | ||||
-rw-r--r-- | src/wallet-test.ts | 193 | ||||
-rw-r--r-- | tsconfig.json | 1 |
3 files changed, 201 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(); + +}); diff --git a/tsconfig.json b/tsconfig.json index 54ec05ca8..2002012d0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,6 +28,7 @@ "src/types-test.ts", "decl/chrome/chrome.d.ts", "src/cryptoWorker.ts", + "src/wallet-test.ts", "src/db.ts", "src/emscriptif.ts", "src/helpers.ts", |