saleor-apps-redis_apl/apps/crm/src/test/webhooks/customer-created-webhook.test.ts
Lukasz Ostrowski 112bed4a0b
Add test for CUSTOMER_CREATED webhook in CRM app (#422)
* Add test for CUSTOMER_CREATED webhook in CRM app

* remove log
2023-04-25 18:57:17 +02:00

82 lines
2.2 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { createMocks } from "node-mocks-http";
import { customerCreatedHandler } from "../../pages/api/webhooks/customer-created";
import { AuthData } from "@saleor/app-sdk/APL";
import mailchimp_marketing from "@mailchimp/mailchimp_marketing";
import {
IMailchimpConfigSettingsManagerV1,
MailchimpConfigType,
} from "../../modules/mailchimp/mailchimp-config-settings-manager";
/**
* Mock settings manager. Consider mocking graphQL api instead
*/
vi.mock("../../modules/mailchimp/mailchimp-config-settings-manager", () => {
class MockManager implements IMailchimpConfigSettingsManagerV1 {
async getConfig(): Promise<MailchimpConfigType> {
return {
token: "mailchimpToken",
customerCreateEvent: {
enabled: true,
listId: "saleor",
},
dc: "us41",
};
}
}
return {
MailchimpConfigSettingsManager: MockManager,
};
});
/**
* Spy on mailchimp client
*/
mailchimp_marketing.lists.addListMember = vi.fn();
const mockAuthData: AuthData = {
saleorApiUrl: "https://demo.saleor.io/graphql/",
domain: "demo.saleor.io",
appId: "XYZ",
token: "token-mocked",
};
describe("CUSTOMER_CREATED webhook", () => {
it("Call Mailchimp client to add customer with properly mapped data and tags", async () => {
const { req, res } = createMocks({});
await customerCreatedHandler(req, res, {
authData: mockAuthData,
payload: {
user: {
id: "user-id",
email: "someuser@gmail.com",
firstName: "John",
lastName: "Doe",
privateMetadata: [
{
key: "mailchimp_tags",
value: JSON.stringify(["tag1"]),
},
],
},
},
event: "CUSTOMER_CREATED",
baseUrl: "localhost:3000",
});
return expect(mailchimp_marketing.lists.addListMember).toHaveBeenCalledWith("saleor", {
email_address: "someuser@gmail.com",
merge_fields: {
FNAME: "John",
LNAME: "Doe",
},
status: "transactional",
tags: ["Saleor Import", "tag1"],
});
});
it.todo('Doesnt do anything if configuration "customerCreateEvent" is disabled');
});