UNPKG

@causalfoundry/js-sdk

Version:

Causal Foundry WEB SDK (JS/TS)

215 lines (179 loc) 5.47 kB
/** * @jest-environment jsdom */ import CfCore from "../../../core/CfCore"; import ECommerce from ".."; import { ECommerceTypes, ItemReportProperties, ItemType } from "../typings"; import { ContentBlock } from "../../Navigation/typings"; let windowSpy; let mockSender; let mockImpressionManager = { on: () => {}, }; const device_id = "asdf"; describe("ECommerce", () => { beforeEach(() => { mockSender = { add() { return false; }, sendException() { return false; }, }; windowSpy = jest.spyOn(window, "window", "get"); }); afterEach(() => { // to remove the singleton instance (CfCore as any).instance = null; }); it('Should deliver a "ItemReport" event', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: "111", item_type: ItemType.Drug, report_id: "111", report_remarks: "111", store_id: "111", }; await ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true); expect(senderSpy).toHaveBeenCalledWith( expect.stringMatching(device_id), expect.stringMatching(device_id), expect.objectContaining({ name: ECommerceTypes.ItemReport, ctx: { ...event }, }), true, expect.anything() ); }); it('Should not deliver a "ItemReport" event with bad item_id', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const sendExceptionSpy = jest.spyOn(mockSender, "sendException"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: undefined as any, item_type: ItemType.Drug, report_id: "111", report_remarks: "111", store_id: "111", }; await expect( ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true) ).rejects.toThrow(); expect(senderSpy).not.toHaveBeenCalled(); expect(sendExceptionSpy).toHaveBeenCalled(); }); it('Should not deliver a "ItemReport" event with bad item_type', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const sendExceptionSpy = jest.spyOn(mockSender, "sendException"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: "111", item_type: undefined as any, report_id: "111", report_remarks: "111", store_id: "111", }; await expect( ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true) ).rejects.toThrow(); expect(senderSpy).not.toHaveBeenCalled(); expect(sendExceptionSpy).toHaveBeenCalled(); }); it('Should not deliver a "ItemReport" event with bad report_id', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const sendExceptionSpy = jest.spyOn(mockSender, "sendException"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: "111", item_type: ItemType.Drug, report_id: undefined as any, report_remarks: "111", store_id: "111", }; await expect( ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true) ).rejects.toThrow(); expect(senderSpy).not.toHaveBeenCalled(); expect(sendExceptionSpy).toHaveBeenCalled(); }); it('Should not deliver a "ItemReport" event with bad report_remarks', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const sendExceptionSpy = jest.spyOn(mockSender, "sendException"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: "111", item_type: ItemType.Drug, report_id: "111", report_remarks: undefined as any, store_id: "111", }; await expect( ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true) ).rejects.toThrow(); expect(senderSpy).not.toHaveBeenCalled(); expect(sendExceptionSpy).toHaveBeenCalled(); }); it('Should not deliver a "ItemReport" event with bad store_id', async () => { const senderSpy = jest.spyOn(mockSender, "add"); const sendExceptionSpy = jest.spyOn(mockSender, "sendException"); const cfCore = CfCore.createInstance( mockSender as any, mockImpressionManager as any, false, ContentBlock.Core, device_id, false ); const event: ItemReportProperties = { item_id: "111", item_type: ItemType.Drug, report_id: "111", report_remarks: "111", store_id: undefined as any, }; await expect( ECommerce.logIngestEvent(ECommerceTypes.ItemReport, event, true) ).rejects.toThrow(); expect(senderSpy).not.toHaveBeenCalled(); expect(sendExceptionSpy).toHaveBeenCalled(); }); });