wallet-core/src/wallet-test.ts

136 lines
3.2 KiB
TypeScript
Raw Normal View History

2017-05-27 19:20:27 +02:00
import {test} from "ava";
2017-05-28 00:00:26 +02:00
import * as types from "./types";
2016-11-14 03:37:47 +01:00
import * as wallet from "./wallet";
2017-05-28 00:00:26 +02:00
function a(x: string): types.AmountJson {
let amt = types.Amounts.parse(x);
if (!amt) {
throw Error("invalid amount");
}
return amt;
}
2016-11-14 03:37:47 +01:00
2017-05-28 00:00:26 +02:00
function fakeCwd(current: string, value: string, feeDeposit: string): wallet.CoinWithDenom {
return {
2016-11-14 03:37:47 +01:00
coin: {
2017-05-28 00:00:26 +02:00
currentAmount: a(current),
coinPub: "(mock)",
coinPriv: "(mock)",
denomPub: "(mock)",
denomSig: "(mock)",
exchangeBaseUrl: "(mock)",
blindingKey: "(mock)",
reservePub: "(mock)",
status: types.CoinStatus.Fresh,
2016-11-14 03:37:47 +01:00
},
denom: {
2017-05-28 00:00:26 +02:00
value: a(value),
feeDeposit: a(feeDeposit),
denomPub: "(mock)",
denomPubHash: "(mock)",
feeWithdraw: a("EUR:0.0"),
feeRefresh: a("EUR:0.0"),
feeRefund: a("EUR:0.0"),
stampStart: "(mock)",
stampExpireWithdraw: "(mock)",
stampExpireLegal: "(mock)",
stampExpireDeposit: "(mock)",
masterSig: "(mock)",
status: types.DenominationStatus.VerifiedGood,
isOffered: true,
exchangeBaseUrl: "(mock)",
2016-11-14 03:37:47 +01:00
},
2017-05-28 00:00:26 +02:00
}
}
2016-11-14 03:37:47 +01:00
2017-05-28 00:00:26 +02:00
test("coin selection 1", t => {
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.1"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.0"),
];
let res = wallet.selectCoins(cds, a("EUR:2.0"), a("EUR:0.1"));
2016-11-14 03:37:47 +01:00
if (!res) {
t.fail();
return;
}
2017-05-27 19:20:27 +02:00
t.true(res.length == 2);
2016-11-14 03:37:47 +01:00
t.pass();
});
2017-05-27 19:20:27 +02:00
test("coin selection 2", t => {
2017-05-28 00:00:26 +02:00
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.0"),
// Merchant covers the fee, this one shouldn't be used
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.0"),
];
let res = wallet.selectCoins(cds, a("EUR:2.0"), a("EUR:0.5"));
2016-11-14 03:37:47 +01:00
if (!res) {
t.fail();
return;
}
2017-05-27 19:20:27 +02:00
t.true(res.length == 2);
2016-11-14 03:37:47 +01:00
t.pass();
});
2017-05-28 00:00:26 +02:00
test("coin selection 3", t => {
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
// this coin should be selected instead of previous one with fee
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.0"),
];
let res = wallet.selectCoins(cds, a("EUR:2.0"), a("EUR:0.5"));
2016-11-14 03:37:47 +01:00
if (!res) {
t.fail();
return;
}
2017-05-27 19:20:27 +02:00
t.true(res.length == 2);
2016-11-14 03:37:47 +01:00
t.pass();
});
2017-05-28 00:00:26 +02:00
test("coin selection 4", t => {
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
];
let res = wallet.selectCoins(cds, a("EUR:2.0"), a("EUR:0.2"));
2016-11-14 03:37:47 +01:00
if (!res) {
t.fail();
return;
}
2017-05-27 19:20:27 +02:00
t.true(res.length == 3);
2016-11-14 03:37:47 +01:00
t.pass();
});
2017-05-28 00:00:26 +02:00
test("coin selection 5", t => {
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
];
let res = wallet.selectCoins(cds, a("EUR:4.0"), a("EUR:0.2"));
2017-05-27 19:20:27 +02:00
t.true(!res);
2016-11-14 03:37:47 +01:00
t.pass();
2017-05-28 00:00:26 +02:00
});
2016-11-14 03:37:47 +01:00
2017-05-28 00:00:26 +02:00
test("coin selection 6", t => {
let cds: wallet.CoinWithDenom[] = [
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
fakeCwd("EUR:1.0", "EUR:1.0", "EUR:0.5"),
];
let res = wallet.selectCoins(cds, a("EUR:2.0"), a("EUR:0.2"));
t.true(!res);
t.pass();
2016-11-14 03:37:47 +01:00
});