/* 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 { tests } from "@gnu-taler/web-util/lib/index.browser"; import { SwrMockEnvironment } from "@gnu-taler/web-util/lib/tests/swr"; import { expect } from "chai"; import { TRANSACTION_API_EXAMPLE } from "../../endpoints.js"; import { Props } from "./index.js"; import { useComponentState } from "./state.js"; describe("Transaction states", () => { it("should query backend and render transactions", async () => { const env = new SwrMockEnvironment(); const props: Props = { accountLabel: "myAccount", pageNumber: 0, }; env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_FIRST_PAGE, { response: { transactions: [ { creditorIban: "DE159593", creditorBic: "SANDBOXX", creditorName: "exchange company", debtorIban: "DE118695", debtorBic: "SANDBOXX", debtorName: "Name unknown", amount: "1", currency: "KUDOS", subject: "Taler Withdrawal N588V8XE9TR49HKAXFQ20P0EQ0EYW2AC9NNANV8ZP5P59N6N0410", date: "2022-12-12Z", uid: "8PPFR9EM", direction: "DBIT", pmtInfId: null, msgId: null, }, { creditorIban: "DE159593", creditorBic: "SANDBOXX", creditorName: "exchange company", debtorIban: "DE118695", debtorBic: "SANDBOXX", debtorName: "Name unknown", amount: "5.00", currency: "KUDOS", subject: "HNEWWT679TQC5P1BVXJS48FX9NW18FWM6PTK2N80Z8GVT0ACGNK0", date: "2022-12-07Z", uid: "7FZJC3RJ", direction: "DBIT", pmtInfId: null, msgId: null, }, { creditorIban: "DE118695", creditorBic: "SANDBOXX", creditorName: "Name unknown", debtorIban: "DE579516", debtorBic: "SANDBOXX", debtorName: "The Bank", amount: "100", currency: "KUDOS", subject: "Sign-up bonus", date: "2022-12-07Z", uid: "I31A06J8", direction: "CRDT", pmtInfId: null, msgId: null, }, ], }, }); const hookBehavior = await tests.hookBehaveLikeThis( useComponentState, props, [ ({ status, error }) => { expect(status).equals("loading"); expect(error).undefined; }, ({ status, error }) => { expect(status).equals("ready"); expect(error).undefined; }, ], env.buildTestingContext(), ); expect(hookBehavior).deep.eq({ result: "ok" }); expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" }); }); it("should show error message on not found", async () => { const env = new SwrMockEnvironment(); const props: Props = { accountLabel: "myAccount", pageNumber: 0, }; env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_NOT_FOUND, {}); const hookBehavior = await tests.hookBehaveLikeThis( useComponentState, props, [ ({ status, error }) => { expect(status).equals("loading"); expect(error).undefined; }, ({ status, error }) => { expect(status).equals("loading-error"); expect(error).deep.eq({ hasError: true, operational: false, message: "Transactions page 0 was not found.", }); }, ], env.buildTestingContext(), ); expect(hookBehavior).deep.eq({ result: "ok" }); expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" }); }); it("should show error message on server error", async () => { const env = new SwrMockEnvironment(false); const props: Props = { accountLabel: "myAccount", pageNumber: 0, }; env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_ERROR, {}); const hookBehavior = await tests.hookBehaveLikeThis( useComponentState, props, [ ({ status, error }) => { expect(status).equals("loading"); expect(error).undefined; }, ({ status, error }) => { expect(status).equals("loading-error"); expect(error).deep.equal({ hasError: true, operational: false, message: "Transaction page 0 could not be retrieved.", }); }, ], env.buildTestingContext(), ); expect(hookBehavior).deep.eq({ result: "ok" }); expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" }); }); });