/* 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 { ErrorType } from "@gnu-taler/web-util/browser"; import * as tests from "@gnu-taler/web-util/testing"; import { SwrMockEnvironment } from "@gnu-taler/web-util/testing"; import { expect } from "chai"; import { TRANSACTION_API_EXAMPLE } from "../../endpoints.js"; import { Props } from "./index.js"; import { useComponentState } from "./state.js"; import { HttpStatusCode, TalerError, TalerErrorCode } from "@gnu-taler/taler-util"; describe("Transaction states", () => { it.skip("should query backend and render transactions", async () => { const env = new SwrMockEnvironment(); const props: Props = { account: "myAccount", }; //@ts-ignore env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_FIRST_PAGE, { response: { data: { 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 = { // account: "myAccount", // }; // env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_NOT_FOUND, { // response: { // error: { // description: "Transaction page 0 could not be retrieved.", // }, // }, // }); // const hookBehavior = await tests.hookBehaveLikeThis( // useComponentState, // props, // [ // ({ status, error }) => { // expect(status).equals("loading"); // expect(error).undefined; // }, // ({ status, error }) => { // expect(status).equals("loading-error"); // if (error === undefined || error.type !== ErrorType.CLIENT) { // throw Error("not the expected error"); // } // expect(error.payload).deep.equal({ // error: { // description: "Transaction page 0 could not be retrieved.", // }, // }); // }, // ], // env.buildTestingContext(), // ); // expect(hookBehavior).deep.eq({ result: "ok" }); // expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" }); // }); it.skip("should show error message on server error", async () => { const env = new SwrMockEnvironment(); const props: Props = { account: "myAccount", }; env.addRequestExpectation(TRANSACTION_API_EXAMPLE.LIST_ERROR, { response: { error: { code: TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED, }, }, }); const hookBehavior = await tests.hookBehaveLikeThis( useComponentState, props, [ ({ status, error }) => { expect(status).equals("loading"); expect(error).undefined; }, ({ status, error }) => { expect(status).equals("loading-error"); if (error === undefined || !error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) { throw Error("not the expected error"); } expect(error.errorDetail.code).deep.equal(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED); }, ], env.buildTestingContext(), ); expect(hookBehavior).deep.eq({ result: "ok" }); expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" }); }); });