diff --git a/packages/app-store/paypal/lib/Paypal.ts b/packages/app-store/paypal/lib/Paypal.ts index e59b41d7dc238f..15d635db3587a9 100644 --- a/packages/app-store/paypal/lib/Paypal.ts +++ b/packages/app-store/paypal/lib/Paypal.ts @@ -2,6 +2,7 @@ import { v4 as uuidv4 } from "uuid"; import z from "zod"; import { IS_PRODUCTION, WEBAPP_URL } from "@calcom/lib/constants"; +import { convertFromSmallestToPresentableCurrencyUnit } from "@calcom/lib/currencyConversions"; import logger from "@calcom/lib/logger"; import prisma from "@calcom/prisma"; import type { Prisma } from "@calcom/prisma/client"; @@ -85,7 +86,7 @@ class Paypal { reference_id: referenceId, amount: { currency_code: currency, - value: (amount / 100).toString(), + value: convertFromSmallestToPresentableCurrencyUnit(amount, currency).toString(), }, }, ], diff --git a/packages/app-store/paypal/lib/PaypalCurrency.unit.test.ts b/packages/app-store/paypal/lib/PaypalCurrency.unit.test.ts new file mode 100644 index 00000000000000..cbb65014c8c43f --- /dev/null +++ b/packages/app-store/paypal/lib/PaypalCurrency.unit.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from "vitest"; +import { convertFromSmallestToPresentableCurrencyUnit } from "@calcom/lib/currencyConversions"; + +describe("PayPal currency conversion for zero-decimal and standard currencies", () => { + it("converts standard minor unit currencies (USD, EUR) by dividing by 100", () => { + expect(convertFromSmallestToPresentableCurrencyUnit(5000, "USD").toString()).toBe("50"); + expect(convertFromSmallestToPresentableCurrencyUnit(1000, "EUR").toString()).toBe("10"); + }); + + it("preserves unscaled amounts for zero-decimal currencies (JPY, KRW, VND)", () => { + expect(convertFromSmallestToPresentableCurrencyUnit(10000, "JPY").toString()).toBe("10000"); + expect(convertFromSmallestToPresentableCurrencyUnit(1050, "JPY").toString()).toBe("1050"); + expect(convertFromSmallestToPresentableCurrencyUnit(50000, "KRW").toString()).toBe("50000"); + }); +});