saleor-apps-redis_apl/apps/emails-and-messages/src/modules/webhook-management/sync-webhook-status.test.ts

160 lines
5.2 KiB
TypeScript
Raw Normal View History

import { vi, expect, describe, it, afterEach } from "vitest";
import { SettingsManager } from "@saleor/app-sdk/settings-manager";
import { SmtpPrivateMetadataManager } from "../smtp/configuration/smtp-metadata-manager";
import { SmtpConfigurationService } from "../smtp/configuration/smtp-configuration.service";
import { syncWebhookStatus } from "./sync-webhook-status";
import { SendgridPrivateMetadataManager } from "../sendgrid/configuration/sendgrid-metadata-manager";
import { SendgridConfigurationService } from "../sendgrid/configuration/sendgrid-configuration.service";
import { WebhookManagementService } from "./webhook-management-service";
import { Client } from "urql";
import * as statusesExports from "./get-webhook-statuses-from-configurations";
const mockSaleorApiUrl = "https://demo.saleor.io/graphql/";
describe("syncWebhookStatus", function () {
const createMockedClient = () => ({} as Client);
const webhookManagementService = new WebhookManagementService(
mockSaleorApiUrl,
createMockedClient()
);
const createWebhookMock = vi
.spyOn(webhookManagementService, "createWebhook")
.mockImplementation((_) => Promise.resolve());
const deleteWebhookMock = vi
.spyOn(webhookManagementService, "deleteWebhook")
.mockImplementation((_) => Promise.resolve());
const smtpConfigurator = new SmtpPrivateMetadataManager(
null as unknown as SettingsManager,
mockSaleorApiUrl
);
const smtpConfigurationService = new SmtpConfigurationService({
metadataManager: smtpConfigurator,
initialData: {
configurations: [],
},
});
const sendgridConfigurator = new SendgridPrivateMetadataManager(
null as unknown as SettingsManager,
mockSaleorApiUrl
);
const sendgridConfigurationService = new SendgridConfigurationService({
metadataManager: sendgridConfigurator,
initialData: {
configurations: [],
},
});
afterEach(() => {
vi.resetAllMocks();
});
it("No webhook should be created or deleted, when both API and configurations don't use any", async () => {
vi.spyOn(statusesExports, "getWebhookStatusesFromConfigurations").mockReturnValue({
invoiceSentWebhook: false,
notifyWebhook: false,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
const getWebhooksStatusMock = vi
.spyOn(webhookManagementService, "getWebhooksStatus")
.mockResolvedValue({
invoiceSentWebhook: false,
notifyWebhook: false,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
await syncWebhookStatus({
smtpConfigurationService,
sendgridConfigurationService,
webhookManagementService,
});
expect(getWebhooksStatusMock).toHaveBeenCalled();
expect(deleteWebhookMock).not.toHaveBeenCalled();
expect(createWebhookMock).not.toHaveBeenCalled();
});
it("Webhooks should be deleted from API, when configurations no longer use them", async () => {
vi.spyOn(statusesExports, "getWebhookStatusesFromConfigurations").mockReturnValue({
invoiceSentWebhook: false,
notifyWebhook: false,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
const getWebhooksStatusMock = vi
.spyOn(webhookManagementService, "getWebhooksStatus")
.mockResolvedValue({
invoiceSentWebhook: true,
notifyWebhook: true,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
await syncWebhookStatus({
smtpConfigurationService,
sendgridConfigurationService,
webhookManagementService,
});
expect(getWebhooksStatusMock).toHaveBeenCalled();
expect(createWebhookMock).not.toHaveBeenCalled();
expect(deleteWebhookMock).toHaveBeenCalledTimes(2);
});
it("Webhooks should be created using API, when new configurations use them", async () => {
vi.spyOn(statusesExports, "getWebhookStatusesFromConfigurations").mockReturnValue({
invoiceSentWebhook: true,
notifyWebhook: true,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
const getWebhooksStatusMock = vi
.spyOn(webhookManagementService, "getWebhooksStatus")
.mockResolvedValue({
invoiceSentWebhook: false,
notifyWebhook: false,
orderCancelledWebhook: false,
orderConfirmedWebhook: false,
orderFulfilledWebhook: false,
orderCreatedWebhook: false,
orderFullyPaidWebhook: false,
});
await syncWebhookStatus({
smtpConfigurationService,
sendgridConfigurationService,
webhookManagementService,
});
expect(getWebhooksStatusMock).toHaveBeenCalled();
expect(createWebhookMock).toHaveBeenCalledTimes(2);
expect(deleteWebhookMock).not.toHaveBeenCalled();
});
});