/* 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 { Amounts, MerchantContractTerms as ContractTerms, PreparePayResultType, } from "@gnu-taler/taler-util"; import * as tests from "@gnu-taler/web-util/testing"; import beer from "../../../static-dev/beer.png"; import merchantIcon from "../../../static-dev/merchant-icon.jpeg"; import { nullFunction } from "../../mui/handlers.js"; import { BaseView } from "./views.js"; export default { title: "payment", component: BaseView, argTypes: {}, }; export const NoEnoughBalanceAvailable = tests.createExample(BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:9", balanceMaterial: "USD:9", balanceAgeAcceptable: "USD:9", balanceMerchantAcceptable: "USD:9", balanceMerchantDepositable: "USD:9", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }); export const NoEnoughBalanceMaterial = tests.createExample(BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:10", balanceMaterial: "USD:9", balanceAgeAcceptable: "USD:9", balanceMerchantAcceptable: "USD:9", balanceMerchantDepositable: "USD:0", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }); export const NoEnoughBalanceAgeAcceptable = tests.createExample(BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:10", balanceMaterial: "USD:10", balanceAgeAcceptable: "USD:9", balanceMerchantAcceptable: "USD:9", balanceMerchantDepositable: "USD:9", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, minimum_age: 18, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }); export const NoEnoughBalanceMerchantAcceptable = tests.createExample(BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:10", balanceMaterial: "USD:10", balanceAgeAcceptable: "USD:10", balanceMerchantAcceptable: "USD:9", balanceMerchantDepositable: "USD:9", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }); export const NoEnoughBalanceMerchantDepositable = tests.createExample( BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:10", balanceMaterial: "USD:10", balanceAgeAcceptable: "USD:10", balanceMerchantAcceptable: "USD:10", balanceMerchantDepositable: "USD:9", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }, ); export const NoEnoughBalanceFeeGap = tests.createExample(BaseView, { status: "no-enough-balance", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 12, }, uri: "", payStatus: { status: PreparePayResultType.InsufficientBalance, balanceDetails: { amountRequested: "USD:10", balanceAvailable: "USD:10", balanceMaterial: "USD:10", balanceAgeAcceptable: "USD:10", balanceMerchantAcceptable: "USD:10", balanceMerchantDepositable: "USD:10", feeGapEstimate: "USD:1", }, talerUri: "taler://pay/..", noncePriv: "", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, minimum_age: 18, summary: "some beers", amount: "USD:10", } as Partial as any, amountRaw: "USD:10", }, }); export const PaymentPossible = tests.createExample(BaseView, { status: "ready", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 11, }, payHandler: { onClick: nullFunction, }, uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0", payStatus: { status: PreparePayResultType.PaymentPossible, talerUri: "taler://pay/..", amountEffective: "USD:10", amountRaw: "USD:10", noncePriv: "", contractTerms: { nonce: "123213123", merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, pay_deadline: { t_s: new Date().getTime() / 1000 + 60 * 60 * 3, }, amount: "USD:10", summary: "some beers", } as Partial as any, contractTermsHash: "123456", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", }, }); export const PaymentPossibleWithFee = tests.createExample(BaseView, { status: "ready", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 11, }, payHandler: { onClick: nullFunction, }, uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0", payStatus: { status: PreparePayResultType.PaymentPossible, talerUri: "taler://pay/..", amountEffective: "USD:10.20", amountRaw: "USD:10", noncePriv: "", contractTerms: { nonce: "123213123", merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, amount: "USD:10", summary: "some beers", } as Partial as any, contractTermsHash: "123456", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", }, }); export const TicketWithAProductList = tests.createExample(BaseView, { status: "ready", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 11, }, payHandler: { onClick: nullFunction, }, uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0", payStatus: { status: PreparePayResultType.PaymentPossible, talerUri: "taler://pay/..", amountEffective: "USD:10.20", amountRaw: "USD:10", noncePriv: "", contractTerms: { nonce: "123213123", merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, amount: "USD:10", summary: "some beers", products: [ { description: "ten beers", price: "USD:1", quantity: 10, image: beer, }, { description: "beer without image", price: "USD:1", quantity: 10, }, { description: "one brown beer", price: "USD:2", quantity: 1, image: beer, }, ], } as Partial as any, contractTermsHash: "123456", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", }, }); export const TicketWithShipping = tests.createExample(BaseView, { status: "ready", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 11, }, payHandler: { onClick: nullFunction, }, uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0", payStatus: { status: PreparePayResultType.PaymentPossible, talerUri: "taler://pay/..", amountEffective: "USD:10.20", amountRaw: "USD:10", noncePriv: "", contractTerms: { nonce: "123213123", merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, amount: "USD:10", summary: "banana pi set", products: [ { description: "banana pi", price: "USD:2", quantity: 1, }, ], delivery_date: { t_s: new Date().getTime() / 1000 + 30 * 24 * 60 * 60, }, delivery_location: { town: "Liverpool", street: "Down st 1234", }, } as Partial as any, contractTermsHash: "123456", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", }, }); export const AlreadyConfirmedByOther = tests.createExample(BaseView, { status: "confirmed", error: undefined, amount: Amounts.parseOrThrow("USD:10"), balance: { currency: "USD", fraction: 40000000, value: 11, }, uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0", payStatus: { status: PreparePayResultType.AlreadyConfirmed, talerUri: "taler://pay/..", amountEffective: "USD:10", amountRaw: "USD:10", contractTerms: { merchant: { name: "the merchant", logo: merchantIcon, website: "https://www.themerchant.taler", email: "contact@merchant.taler", }, summary: "some beers", amount: "USD:10", } as Partial as any, contractTermsHash: "123456", proposalId: "96YY92RQZGF3V7TJSPN4SF9549QX7BRF88Q5PYFCSBNQ0YK4RPK0", paid: false, }, });