diff options
author | Sebastian <sebasjm@gmail.com> | 2023-01-09 20:20:09 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-01-09 20:20:09 -0300 |
commit | 4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7 (patch) | |
tree | 5c16976f99eb973ff62d78ed64107ca01df57b99 /packages/taler-wallet-webextension/src/cta/Tip | |
parent | 8a70edb2f8e235c3462127b0aa4e1b65aa1aee0b (diff) | |
download | wallet-core-4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7.tar.gz wallet-core-4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7.tar.bz2 wallet-core-4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7.zip |
fix #7153: more error handling
if handler do not trap error then fail at compile time,
all safe handlers push alert on error
errors are typed so they render good information
Diffstat (limited to 'packages/taler-wallet-webextension/src/cta/Tip')
3 files changed, 10 insertions, 8 deletions
diff --git a/packages/taler-wallet-webextension/src/cta/Tip/state.ts b/packages/taler-wallet-webextension/src/cta/Tip/state.ts index 29a9c4c71..3b9abf5a3 100644 --- a/packages/taler-wallet-webextension/src/cta/Tip/state.ts +++ b/packages/taler-wallet-webextension/src/cta/Tip/state.ts @@ -16,7 +16,7 @@ import { Amounts } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; -import { alertFromError } from "../../context/alert.js"; +import { alertFromError, useAlertContext } from "../../context/alert.js"; import { useBackendContext } from "../../context/backend.js"; import { useTranslationContext } from "../../context/translation.js"; import { useAsyncAsHook } from "../../hooks/useAsyncAsHook.js"; @@ -29,6 +29,7 @@ export function useComponentState({ }: Props): State { const api = useBackendContext(); const { i18n } = useTranslationContext(); + const { pushAlertOnError } = useAlertContext(); const tipInfo = useAsyncAsHook(async () => { if (!talerTipUri) throw Error("ERROR_NO-URI-FOR-TIP"); const tip = await api.wallet.call(WalletApiOperation.PrepareTip, { @@ -77,7 +78,7 @@ export function useComponentState({ amount: Amounts.parseOrThrow(tip.tipAmountEffective), error: undefined, cancel: { - onClick: onCancel, + onClick: pushAlertOnError(onCancel), }, }; @@ -92,7 +93,7 @@ export function useComponentState({ status: "ready", ...baseInfo, accept: { - onClick: doAccept, + onClick: pushAlertOnError(doAccept), }, }; } diff --git a/packages/taler-wallet-webextension/src/cta/Tip/stories.tsx b/packages/taler-wallet-webextension/src/cta/Tip/stories.tsx index 86bdd27a9..dd358d9d2 100644 --- a/packages/taler-wallet-webextension/src/cta/Tip/stories.tsx +++ b/packages/taler-wallet-webextension/src/cta/Tip/stories.tsx @@ -20,14 +20,14 @@ */ import { Amounts } from "@gnu-taler/taler-util"; -import { createExample } from "../../test-utils.js"; +import { tests } from "@gnu-taler/web-util/lib/index.browser"; import { AcceptedView, ReadyView } from "./views.js"; export default { title: "tip", }; -export const Accepted = createExample(AcceptedView, { +export const Accepted = tests.createExample(AcceptedView, { status: "accepted", error: undefined, amount: Amounts.parseOrThrow("EUR:1"), @@ -35,7 +35,7 @@ export const Accepted = createExample(AcceptedView, { merchantBaseUrl: "", }); -export const Ready = createExample(ReadyView, { +export const Ready = tests.createExample(ReadyView, { status: "ready", error: undefined, amount: Amounts.parseOrThrow("EUR:1"), diff --git a/packages/taler-wallet-webextension/src/cta/Tip/test.ts b/packages/taler-wallet-webextension/src/cta/Tip/test.ts index 2cc95f424..44a6f9b0b 100644 --- a/packages/taler-wallet-webextension/src/cta/Tip/test.ts +++ b/packages/taler-wallet-webextension/src/cta/Tip/test.ts @@ -23,7 +23,8 @@ import { Amounts } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { expect } from "chai"; import { tests } from "../../../../web-util/src/index.browser.js"; -import { createWalletApiMock, nullFunction } from "../../test-utils.js"; +import { nullFunction } from "../../mui/handlers.js"; +import { createWalletApiMock } from "../../test-utils.js"; import { Props } from "./index.js"; import { useComponentState } from "./state.js"; @@ -48,7 +49,7 @@ describe("Tip CTA states", () => { ({ status, error }) => { expect(status).equals("error"); if (!error) expect.fail(); - expect(error.cause?.message).eq("ERROR_NO-URI-FOR-TIP"); + expect(error.description).eq("ERROR_NO-URI-FOR-TIP"); }, ], TestingContext, |