aboutsummaryrefslogtreecommitdiff
path: root/src/wallet-test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet-test.ts')
-rw-r--r--src/wallet-test.ts193
1 files changed, 193 insertions, 0 deletions
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();
+
+});