/* This file is part of GNU Taler (C) 2022 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { ExchangeEntryStatus, ExchangeTosStatus, ExchangeUpdateStatus, ScopeType, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import * as tests from "@gnu-taler/web-util/testing"; import { expect } from "chai"; import { nullFunction } from "../../mui/handlers.js"; import { createWalletApiMock } from "../../test-utils.js"; import { Props } from "./index.js"; import { useComponentState } from "./state.js"; const props: Props = { onBack: nullFunction, noDebounce: true, }; describe("AddExchange states", () => { it("should start in 'verify' state", async () => { const { handler, TestingContext } = createWalletApiMock(); handler.addWalletCallResponse( WalletApiOperation.ListExchanges, {}, { exchanges: [ { exchangeBaseUrl: "http://exchange.local/", ageRestrictionOptions: [], scopeInfo: { currency: "ARS", type: ScopeType.Exchange, url: "http://exchange.local/", }, masterPub: "123qwe123", currency: "ARS", exchangeEntryStatus: ExchangeEntryStatus.Ephemeral, tosStatus: ExchangeTosStatus.Pending, exchangeUpdateStatus: ExchangeUpdateStatus.UnavailableUpdate, paytoUris: [], lastUpdateTimestamp: undefined, noFees: false, peerPaymentsDisabled: false, }, ], }, ); const hookBehavior = await tests.hookBehaveLikeThis( useComponentState, props, [ (state) => { expect(state.status).equal("verify"); if (state.status !== "verify") return; expect(state.url.value).eq(""); expect(state.expectedCurrency).is.undefined; expect(state.result).is.undefined; }, (state) => { expect(state.status).equal("verify"); if (state.status !== "verify") return; expect(state.url.value).eq(""); expect(state.expectedCurrency).is.undefined; expect(state.result).is.undefined; }, ], TestingContext, ); expect(hookBehavior).deep.equal({ result: "ok" }); expect(handler.getCallingQueueState()).eq("empty"); }); // it("should not be able to add a known exchange", async () => { // const { handler, TestingContext } = createWalletApiMock(); // handler.addWalletCallResponse( // WalletApiOperation.ListExchanges, // {}, // { // exchanges: [ // { // exchangeBaseUrl: "http://exchange.local/", // ageRestrictionOptions: [], // scopeInfo: undefined, // currency: "ARS", // exchangeEntryStatus: ExchangeEntryStatus.Used, // tosStatus: ExchangeTosStatus.Pending, // exchangeUpdateStatus: ExchangeUpdateStatus.Ready, // paytoUris: [], // }, // ], // }, // ); // const hookBehavior = await tests.hookBehaveLikeThis( // useComponentState, // props, // [ // (state) => { // expect(state.status).equal("verify"); // if (state.status !== "verify") return; // expect(state.url.value).eq(""); // expect(state.expectedCurrency).is.undefined; // expect(state.result).is.undefined; // }, // (state) => { // expect(state.status).equal("verify"); // if (state.status !== "verify") return; // expect(state.url.value).eq(""); // expect(state.expectedCurrency).is.undefined; // expect(state.result).is.undefined; // expect(state.error).is.undefined; // expect(state.url.onInput).is.not.undefined; // if (!state.url.onInput) return; // state.url.onInput("http://exchange.local/"); // }, // (state) => { // expect(state.status).equal("verify"); // if (state.status !== "verify") return; // expect(state.url.value).eq(""); // expect(state.expectedCurrency).is.undefined; // expect(state.result).is.undefined; // expect(state.url.error).eq("This exchange is already active"); // expect(state.url.onInput).is.not.undefined; // }, // ], // TestingContext, // ); // expect(hookBehavior).deep.equal({ result: "ok" }); // expect(handler.getCallingQueueState()).eq("empty"); // }); // it("should be able to add a preset exchange", async () => { // const { handler, TestingContext } = createWalletApiMock(); // handler.addWalletCallResponse( // WalletApiOperation.ListExchanges, // {}, // { // exchanges: [ // { // exchangeBaseUrl: "http://exchange.local/", // ageRestrictionOptions: [], // scopeInfo: undefined, // currency: "ARS", // exchangeEntryStatus: ExchangeEntryStatus.Preset, // tosStatus: ExchangeTosStatus.Pending, // exchangeUpdateStatus: ExchangeUpdateStatus.Ready, // paytoUris: [], // }, // ], // }, // ); // const hookBehavior = await tests.hookBehaveLikeThis( // useComponentState, // props, // [ // (state) => { // expect(state.status).equal("verify"); // if (state.status !== "verify") return; // expect(state.url.value).eq(""); // expect(state.expectedCurrency).is.undefined; // expect(state.result).is.undefined; // }, // (state) => { // expect(state.status).equal("verify"); // if (state.status !== "verify") return; // expect(state.url.value).eq(""); // expect(state.expectedCurrency).is.undefined; // expect(state.result).is.undefined; // expect(state.error).is.undefined; // expect(state.url.onInput).is.not.undefined; // if (!state.url.onInput) return; // state.url.onInput("http://exchange.local/"); // }, // ], // TestingContext, // ); // expect(hookBehavior).deep.equal({ result: "ok" }); // expect(handler.getCallingQueueState()).eq("empty"); // }); });