
* Make channels section expandable based on override setting * Revert "Make channels section expandable based on override setting" This reverts commit e107c5e990b4110156043ed494fb0054bd936654. * Add status component * Remove no longer used component * Remove no longer used component * Removed webhook creation during App installation * Extend tRPC meta to contain webhook sync flag * Add app baseUrl to the context * Webhook management service * Add changeset
159 lines
5.2 KiB
TypeScript
159 lines
5.2 KiB
TypeScript
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();
|
|
});
|
|
});
|