saleor-app-sdk-REDIS_APL/src/handlers/next/saleor-webhooks/saleor-sync-webhook.test.ts
Michał Miszczyszyn b108460435
Add types for payment webhooks (#212)
* Add types for payment webhooks

* Add transaction webhooks

* Update responses for transactions

* Create .changeset/gold-buses-warn.md

* Simplify returned values for some webhooks

* Update changesets

---------

Co-authored-by: Lukasz Ostrowski <lukasz@monolog.tech>
2023-03-30 14:23:12 +02:00

80 lines
2.2 KiB
TypeScript

import { createMocks } from "node-mocks-http";
import { describe, expect, it, vi } from "vitest";
import { MockAPL } from "../../../test-utils/mock-apl";
import { processSaleorWebhook } from "./process-saleor-webhook";
import { SaleorSyncWebhook } from "./saleor-sync-webhook";
describe("SaleorSyncWebhook", () => {
const mockApl = new MockAPL();
it("Provides type-safe response builder in the context", async () => {
vi.mock("./process-saleor-webhook");
vi.mocked(processSaleorWebhook).mockImplementationOnce(async () => ({
baseUrl: "example.com",
event: "CHECKOUT_CALCULATE_TAXES",
payload: { data: "test_payload" },
authData: {
domain: mockApl.workingSaleorDomain,
token: mockApl.mockToken,
jwks: mockApl.mockJwks,
saleorApiUrl: mockApl.workingSaleorApiUrl,
appId: mockApl.mockAppId,
},
}));
const { req, res } = createMocks({
method: "POST",
headers: {
host: "some-saleor-host.cloud",
"x-forwarded-proto": "https",
"saleor-api-url": "https://mock-saleor-domain.saleor.cloud/graphql/",
"saleor-domain": "https://mock-saleor-domain.saleor.cloud/",
},
});
const webhook = new SaleorSyncWebhook({
apl: mockApl,
webhookPath: "/test",
event: "CHECKOUT_CALCULATE_TAXES",
query: "",
name: "Webhook test name",
isActive: true,
});
const handler = webhook.createHandler((_req, _res, ctx) => {
_res.send(
ctx.buildResponse({
lines: [
{
tax_rate: 8,
total_net_amount: 10,
total_gross_amount: 1.08,
},
],
shipping_price_gross_amount: 2,
shipping_tax_rate: 8,
shipping_price_net_amount: 1,
})
);
});
await handler(req, res);
expect(res._getData()).toEqual(
expect.objectContaining({
lines: [
{
tax_rate: 8,
total_net_amount: 10,
total_gross_amount: 1.08,
},
],
shipping_price_gross_amount: 2,
shipping_tax_rate: 8,
shipping_price_net_amount: 1,
})
);
});
});