aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-14 03:37:47 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-14 03:37:47 +0100
commitce334320363618c6c1ed3d2ae598d49cae98753c (patch)
tree1c77d9f7f8e193891b249410a4924e5d83532385
parentaf901cb892a5ecd493915e49c04dfbecf00c8b0e (diff)
add test cases for coin selection
-rw-r--r--src/types.ts7
-rw-r--r--src/wallet-test.ts193
-rw-r--r--tsconfig.json1
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",