aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-09-12 10:57:13 -0300
committerSebastian <sebasjm@gmail.com>2022-09-12 10:58:09 -0300
commit27201416c7d234361507e6055ce7ed42c11c650e (patch)
tree9a8a6ec614f8c8a221af86ddf2c9fd3b54cfceb5 /packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts
parentfc413bb5eca2171abb93b96e9b86f7b76c0a27af (diff)
downloadwallet-core-27201416c7d234361507e6055ce7ed42c11c650e.tar.xz
ref #7323
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts')
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts672
1 files changed, 0 insertions, 672 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts
index 4fc41ce93..61bc6425f 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/test.ts
@@ -24,675 +24,3 @@ import {
Amounts, DenominationInfo
} from "@gnu-taler/taler-util";
import { expect } from "chai";
-import { bitcoinExchanges } from "./example.js";
-import { FeeDescription, FeeDescriptionPair } from "./index.js";
-import { createDenominationPairTimeline, createDenominationTimeline } from "./state.js";
-
-const values = Array.from({ length: 10 }).map((undef, t) => Amounts.parseOrThrow(`USD:${t}`))
-const timestamps = Array.from({ length: 20 }).map((undef, t_s) => ({ t_s }))
-const moments = timestamps.map(m => AbsoluteTime.fromTimestamp(m))
-
-function normalize(list: DenominationInfo[]): DenominationInfo[] {
- return list.map((e, idx) => ({ ...e, denomPubHash: `id${idx}` }))
-}
-
-describe("Denomination timeline creation", () => {
- describe("single value example", () => {
-
- it("should have one row with start and exp", () => {
-
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[2],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[1],
- } as FeeDescription])
- });
-
- it("should have two rows with the second denom in the middle if second is better", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }, {
- value: values[1],
- from: moments[3],
- until: moments[4],
- fee: values[2],
- }] as FeeDescription[])
-
- });
-
- it("should have two rows with the first denom in the middle if second is worse", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[4],
- fee: values[1],
- }] as FeeDescription[])
-
- });
-
- it("should add a gap when there no fee", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[2],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[3],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[3],
-
- }, {
- value: values[1],
- from: moments[3],
- until: moments[4],
- fee: values[1],
- }] as FeeDescription[])
-
- });
-
- it("should have three rows when first denom is between second and second is worse", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[3],
- fee: values[1],
- }, {
- value: values[1],
- from: moments[3],
- until: moments[4],
- fee: values[2],
- }] as FeeDescription[])
-
- });
-
- it("should have one row when first denom is between second and second is better", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[4],
- fee: values[1],
- }] as FeeDescription[])
-
- });
-
- it("should only add the best1", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[4],
- fee: values[1],
- }] as FeeDescription[])
-
- });
-
- it("should only add the best2", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[5],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[5],
- stampExpireDeposit: timestamps[6],
- feeDeposit: values[3]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[5],
- fee: values[1],
- }, {
- value: values[1],
- from: moments[5],
- until: moments[6],
- fee: values[3],
- }] as FeeDescription[])
-
- });
-
- it("should only add the best3", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[5],
- feeDeposit: values[3]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[5],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[5],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[2],
- until: moments[5],
- fee: values[1],
- }] as FeeDescription[])
-
- })
- })
-
- describe("multiple value example", () => {
-
- //TODO: test the same start but different value
-
- it("should not merge when there is different value", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[2],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }, {
- value: values[2],
- from: moments[2],
- until: moments[4],
- fee: values[2],
- }] as FeeDescription[])
-
- });
-
- it("should not merge when there is different value (with duplicates)", () => {
- const timeline = createDenominationTimeline(normalize([
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[2],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[1],
- stampStart: timestamps[1],
- stampExpireDeposit: timestamps[3],
- feeDeposit: values[1]
- } as Partial<DenominationInfo> as DenominationInfo,
- {
- value: values[2],
- stampStart: timestamps[2],
- stampExpireDeposit: timestamps[4],
- feeDeposit: values[2]
- } as Partial<DenominationInfo> as DenominationInfo,
- ]), "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }, {
- value: values[2],
- from: moments[2],
- until: moments[4],
- fee: values[2],
- }] as FeeDescription[])
-
- });
-
- it.skip("real world example: bitcoin exchange", () => {
- const timeline = createDenominationTimeline(
- bitcoinExchanges[0].denominations.filter(d => Amounts.cmp(d.value, Amounts.parseOrThrow('BITCOINBTC:0.01048576'))),
- "stampExpireDeposit", "feeDeposit");
-
- expect(timeline).deep.equal([{
- fee: Amounts.parseOrThrow('BITCOINBTC:0.00000001'),
- from: { t_ms: 1652978648000 },
- until: { t_ms: 1699633748000 },
- value: Amounts.parseOrThrow('BITCOINBTC:0.01048576'),
- }, {
- fee: Amounts.parseOrThrow('BITCOINBTC:0.00000003'),
- from: { t_ms: 1699633748000 },
- until: { t_ms: 1707409448000 },
- value: Amounts.parseOrThrow('BITCOINBTC:0.01048576'),
- }] as FeeDescription[])
- })
-
- })
-
-})
-
-describe("Denomination timeline pair creation", () => {
-
- describe("single value example", () => {
-
- it("should return empty", () => {
-
- const left = [] as FeeDescription[];
- const right = [] as FeeDescription[];
-
- const pairs = createDenominationPairTimeline(left, right)
-
- expect(pairs).deep.equals([])
- });
-
- it("should return first element", () => {
-
- const left = [{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }] as FeeDescription[];
-
- const right = [] as FeeDescription[];
-
- {
- const pairs = createDenominationPairTimeline(left, right)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- left: values[1],
- right: undefined,
- }] as FeeDescriptionPair[])
- }
- {
- const pairs = createDenominationPairTimeline(right, left)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- right: values[1],
- left: undefined,
- }] as FeeDescriptionPair[])
- }
-
- });
-
- it("should add both to the same row", () => {
-
- const left = [{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }] as FeeDescription[];
-
- const right = [{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[2],
- }] as FeeDescription[];
-
- {
- const pairs = createDenominationPairTimeline(left, right)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- left: values[1],
- right: values[2],
- }] as FeeDescriptionPair[])
- }
- {
- const pairs = createDenominationPairTimeline(right, left)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- left: values[2],
- right: values[1],
- }] as FeeDescriptionPair[])
- }
- });
-
- it("should repeat the first and change the second", () => {
-
- const left = [{
- value: values[1],
- from: moments[1],
- until: moments[5],
- fee: values[1],
- }] as FeeDescription[];
-
- const right = [{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[2],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[3],
- }, {
- value: values[1],
- from: moments[3],
- until: moments[4],
- fee: values[3],
- }] as FeeDescription[];
-
- {
- const pairs = createDenominationPairTimeline(left, right)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[2],
- value: values[1],
- left: values[1],
- right: values[2],
- }, {
- from: moments[2],
- until: moments[3],
- value: values[1],
- left: values[1],
- right: undefined,
- }, {
- from: moments[3],
- until: moments[4],
- value: values[1],
- left: values[1],
- right: values[3],
- }, {
- from: moments[4],
- until: moments[5],
- value: values[1],
- left: values[1],
- right: undefined,
- }] as FeeDescriptionPair[])
- }
-
-
- });
-
- })
-
- describe("multiple value example", () => {
-
- it("should separate denominations of different value", () => {
-
- const left = [{
- value: values[1],
- from: moments[1],
- until: moments[3],
- fee: values[1],
- }] as FeeDescription[];
-
- const right = [{
- value: values[2],
- from: moments[1],
- until: moments[3],
- fee: values[2],
- }] as FeeDescription[];
-
- {
- const pairs = createDenominationPairTimeline(left, right)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- left: values[1],
- right: undefined,
- }, {
- from: moments[1],
- until: moments[3],
- value: values[2],
- left: undefined,
- right: values[2],
- }] as FeeDescriptionPair[])
- }
- {
- const pairs = createDenominationPairTimeline(right, left)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[3],
- value: values[1],
- left: undefined,
- right: values[1],
- }, {
- from: moments[1],
- until: moments[3],
- value: values[2],
- left: values[2],
- right: undefined,
- }] as FeeDescriptionPair[])
- }
- });
-
- it("should separate denominations of different value2", () => {
-
- const left = [{
- value: values[1],
- from: moments[1],
- until: moments[2],
- fee: values[1],
- }, {
- value: values[1],
- from: moments[2],
- until: moments[4],
- fee: values[2],
- }] as FeeDescription[];
-
- const right = [{
- value: values[2],
- from: moments[1],
- until: moments[3],
- fee: values[2],
- }] as FeeDescription[];
-
- {
- const pairs = createDenominationPairTimeline(left, right)
- expect(pairs).deep.equals([{
- from: moments[1],
- until: moments[2],
- value: values[1],
- left: values[1],
- right: undefined,
- }, {
- from: moments[2],
- until: moments[4],
- value: values[1],
- left: values[2],
- right: undefined,
- }, {
- from: moments[1],
- until: moments[3],
- value: values[2],
- left: undefined,
- right: values[2],
- }] as FeeDescriptionPair[])
- }
- // {
- // const pairs = createDenominationPairTimeline(right, left)
- // expect(pairs).deep.equals([{
- // from: moments[1],
- // until: moments[3],
- // value: values[1],
- // left: undefined,
- // right: values[1],
- // }, {
- // from: moments[1],
- // until: moments[3],
- // value: values[2],
- // left: values[2],
- // right: undefined,
- // }] as FeeDescriptionPair[])
- // }
- });
- it.skip("should render real world", () => {
- const left = createDenominationTimeline(
- bitcoinExchanges[0].denominations.filter(d => Amounts.cmp(d.value, Amounts.parseOrThrow('BITCOINBTC:0.01048576'))),
- "stampExpireDeposit", "feeDeposit");
- const right = createDenominationTimeline(
- bitcoinExchanges[1].denominations.filter(d => Amounts.cmp(d.value, Amounts.parseOrThrow('BITCOINBTC:0.01048576'))),
- "stampExpireDeposit", "feeDeposit");
-
-
- const pairs = createDenominationPairTimeline(left, right)
- })
- })
-})
-