From ac9acdf0c6e4e7f47152295a4862b9edda1afb07 Mon Sep 17 00:00:00 2001 From: Adrian Pilarczyk Date: Mon, 31 Jul 2023 12:15:29 +0200 Subject: [PATCH] test: :white_check_mark: add tests for AvataxOrderCancelledPayloadTransformer --- ...rder-cancelled-payload-transformer.test.ts | 30 +++++++++++++++++++ ...tax-order-cancelled-payload-transformer.ts | 2 +- .../modules/taxjar/taxjar-webhook.service.ts | 3 +- .../src/pages/api/webhooks/order-cancelled.ts | 11 +++---- 4 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.test.ts diff --git a/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.test.ts b/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.test.ts new file mode 100644 index 0000000..d9c8a17 --- /dev/null +++ b/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.test.ts @@ -0,0 +1,30 @@ +import { OrderCancelledPayload } from "../../../pages/api/webhooks/order-cancelled"; +import { AvataxConfigMockGenerator } from "../avatax-config-mock-generator"; +import { AvataxOrderCancelledPayloadTransformer } from "./avatax-order-cancelled-payload-transformer"; +import { describe, expect, it } from "vitest"; + +const configMockGenerator = new AvataxConfigMockGenerator(); +const avataxMockConfig = configMockGenerator.generateAvataxConfig(); + +describe("AvataxOrderCancelledPayloadTransformer", () => { + it("throws an error when order = null", () => { + const payload = { order: null } as any as OrderCancelledPayload; + const transformer = new AvataxOrderCancelledPayloadTransformer(avataxMockConfig); + + expect(() => transformer.transform(payload)).toThrow("Order is required"); + }); + it("throws an error when no externalId is present", () => { + const payload = { order: {} } as any as OrderCancelledPayload; + const transformer = new AvataxOrderCancelledPayloadTransformer(avataxMockConfig); + + expect(() => transformer.transform(payload)).toThrow(); + }); + it("returns a valid AvataxOrderCancelledTarget", () => { + const payload = { order: { externalId: "123" } } as any as OrderCancelledPayload; + const transformer = new AvataxOrderCancelledPayloadTransformer(avataxMockConfig); + + const target = transformer.transform(payload); + + expect(target).toEqual({ transactionCode: "123", companyCode: "DEFAULT" }); + }); +}); diff --git a/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.ts b/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.ts index 779c530..1201310 100644 --- a/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.ts +++ b/apps/taxes/src/modules/avatax/order-cancelled/avatax-order-cancelled-payload-transformer.ts @@ -15,7 +15,7 @@ export class AvataxOrderCancelledPayloadTransformer { return { transactionCode, - companyCode: this.config.companyCode ?? "", + companyCode: this.config.companyCode ?? "", // If companyCode is not defined, we set the value to empty string so that the default company is used. }; } } diff --git a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts index 320aa48..d1b3222 100644 --- a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts +++ b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts @@ -48,7 +48,6 @@ export class TaxJarWebhookService implements ProviderWebhookService { } async cancelOrder(payload: OrderCancelledEventSubscriptionFragment) { - // todo: implement - this.logger.debug("cancelOrder", payload); + // TaxJar isn't implemented yet } } diff --git a/apps/taxes/src/pages/api/webhooks/order-cancelled.ts b/apps/taxes/src/pages/api/webhooks/order-cancelled.ts index 184b6d9..1b628be 100644 --- a/apps/taxes/src/pages/api/webhooks/order-cancelled.ts +++ b/apps/taxes/src/pages/api/webhooks/order-cancelled.ts @@ -33,22 +33,23 @@ export default orderCancelledAsyncWebhook.createHandler(async (req, res, ctx) => logger.info("Handler called with payload"); + if (!payload.order) { + return webhookResponse.error(new Error("Insufficient order data")); + } + try { const appMetadata = payload.recipient?.privateMetadata ?? []; - const channelSlug = payload.order?.channel.slug; + const channelSlug = payload.order.channel.slug; const taxProvider = getActiveConnectionService(channelSlug, appMetadata, ctx.authData); logger.info("Fetched taxProvider"); - if (!payload.order) { - return webhookResponse.error(new Error("Insufficient order data")); - } await taxProvider.cancelOrder(payload); logger.info("Order cancelled"); return webhookResponse.success(); } catch (error) { - return webhookResponse.error(new Error("Error while fulfilling tax provider order")); + return webhookResponse.error(new Error("Error while cancelling tax provider order")); } });