import * as helper from "@/helpers/heritage-integration-helper"; import { cookieNames } from "@/constants/cookie-names"; import { setupMocksForJsFiles } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; import { storeMutations } from "@/constants/store-mutations"; import store from "@/store"; import router from "@/router"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; import baseMixin from "@/mixins/base-mixin"; import { externalUrls } from "@/router/router-constants/externalUrl-values"; describe("loadOrderIfPresent", () => { afterEach(() => { removeAllTestCookies(); }); test("ShouldResetState == true => concept cookie is deleted", () => { // Arrange const testShouldResetState = true; const testCookieValue = { ShouldResetState: testShouldResetState } document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; domain=${location.hostname}`; // Act helper.loadOrderIfPresent(); // Assert expect(document.cookie).toBe(""); }); test("ShouldResetState == true => reset store", () => { // Arrange const getConceptCookieMethod = jest.spyOn(helper, "getConceptCookie") getConceptCookieMethod.mockImplementation(() => { return { ShouldResetState: true, DidHeritageFunnelUpdateLast: false } }); const mockData = { actionList: [{ actionName: storeActions.RESET_STATE }], } setupMocksForJsFiles(mockData); // Act helper.loadOrderIfPresent(); // Assert expect(getConceptCookieMethod).toHaveBeenCalled(); expect(baseMixin.methods.dispatchNonBlockingStoreAction).toHaveBeenCalledWith(storeActions.RESET_STATE); getConceptCookieMethod.mockRestore(); }); test("Concept cookie is null => store is unchanged", () => { // Arrange const getConceptCookieMethod = jest.spyOn(helper, "getConceptCookie") getConceptCookieMethod.mockImplementation(() => null); store.dispatch = jest.spyOn(store, "dispatch"); const mockData = { actionList: [{ actionName: storeActions.RESET_STATE }], } setupMocksForJsFiles(mockData); // Act helper.loadOrderIfPresent(); // Assert expect(helper.getConceptCookie).toHaveBeenCalled(); expect(store.dispatch).not.toHaveBeenCalledWith(storeActions.RESET_STATE); getConceptCookieMethod.mockRestore(); }); }); describe("saveOrder", () => { afterEach(() => { removeAllTestCookies(); }); test("saveOrder => should set state order values", async () => { // Arrange const mockReferralNumber = 2; const mockCorrelationId = "55"; const mockReferralDate = "2022"; const mockOrderInfo = getMockOrderInfo(mockReferralNumber, mockCorrelationId, mockReferralDate); const mockData = { actionList: [ { actionName: storeActions.SAVE_ORDER, data: mockOrderInfo, }, { actionName: storeActions.SET_REFERRAL_INFORMATION } ] } const mocks = setupMocksForJsFiles(mockData); // Act await helper.saveOrder(); // Assert expect(mocks.baseMixin.methods.dispatchNonBlockingStoreAction).toHaveBeenCalledWith(storeActions.SAVE_ORDER); expect(mocks.baseMixin.methods.dispatchNonBlockingStoreAction).toHaveBeenCalledWith(storeActions.SET_REFERRAL_INFORMATION, { referralNumber: mockReferralNumber, referralDate: mockReferralDate, referralCorrelationId: mockCorrelationId }, false); }); test("saveOrder => should update DidHeritageFunnelUpdateLast cookie value to false", async () => { // Arrange const testReferralNumber = 1566818; const testReferralDate = "2022-03-15T10:56:24.597"; const testReferralCorrelationId = "404d2b04-f86e-45c3-b373-127b6217b060"; const mockOrderInfo = getMockOrderInfo(testReferralNumber, testReferralCorrelationId, testReferralDate); const mockData = { actionList: [{ actionName: storeActions.SAVE_ORDER, data: mockOrderInfo, }], router: router } setupMocksForJsFiles(mockData); const testCookieValue = { ReferralNumber: testReferralNumber, ReferralDate: testReferralDate, ReferralCorrelationId: testReferralCorrelationId, ShouldResetState: false, DidHeritageFunnelUpdateLast: true } setupCookies({ conceptCookieValue: JSON.stringify(testCookieValue) }); // Act await helper.saveOrder(); // Assert expect(helper.getConceptCookie().DidHeritageFunnelUpdateLast).toEqual(false); }); }); describe("navigateToHeritageFunnel", () => { test("should save order", async () => { // Arrange const mockReferralNumber = 2; const mockCorrelationId = "55"; const mockReferralDate = "2022"; const mockOrderInfo = getMockOrderInfo(mockReferralNumber, mockCorrelationId, mockReferralDate); const mockData = { actionList: [{ actionName: storeActions.SAVE_ORDER, data: mockOrderInfo, }] } setupMocksForJsFiles(mockData); const saveOrderFunction = jest.spyOn(helper, "saveOrder"); router.navigateToExternalUrl = jest.fn(); // Act await helper.navigateToHeritageFunnel(); // Assert expect(saveOrderFunction).toHaveBeenCalled(); // Should alway save before we navigate to heritage const saveOrderFunctionCallOrder = saveOrderFunction.mock.invocationCallOrder[0]; const routerNavigateFunctionCallOrder = router.navigateToExternalUrl.mock.invocationCallOrder[0]; expect(saveOrderFunctionCallOrder).toBeLessThan(routerNavigateFunctionCallOrder); saveOrderFunction.mockRestore(); }); test("should go to heritage funnel", async () => { // Arrange const mockReferralNumber = 2; const mockCorrelationId = "55"; const mockReferralDate = "2022"; const mockOrderInfo = getMockOrderInfo(mockReferralNumber, mockCorrelationId, mockReferralDate); const mockData = { actionList: [{ actionName: storeActions.SAVE_ORDER, data: mockOrderInfo, }] } setupMocksForJsFiles(mockData); store.getters.order.referralCorrelationId = mockCorrelationId router.navigateToExternalUrl = jest.fn(); // Act await helper.navigateToHeritageFunnel(); // Assert expect(router.navigateToExternalUrl).toHaveBeenCalled(); expect(router.navigateToExternalUrl).toHaveBeenCalledWith(externalUrls.HERITAGE_FUNNEL, expect.objectContaining({ corid: mockCorrelationId }) ); }); }); describe("cookies", () => { afterEach(() => { removeAllTestCookies(); }) describe("getConceptCookie method", () => { test("gets correct value when cookie is present", () => { // Arrange const testReferralNumber = 1566818; const testReferralDate = "2022-03-15T10:56:24.597"; const testReferralCorrelationId = "404d2b04-f86e-45c3-b373-127b6217b060"; const testShouldResetState = false; const testDidHeritageFunnelUpdateLast = true; const testCookieValue = { ReferralNumber: testReferralNumber, ReferralDate: testReferralDate, ReferralCorrelationId: testReferralCorrelationId, ShouldResetState: testShouldResetState, DidHeritageFunnelUpdateLast: testDidHeritageFunnelUpdateLast } setupCookies({ conceptCookieValue: JSON.stringify(testCookieValue) }); // Act var result = helper.getConceptCookie(); // Assert expect(result).toEqual(testCookieValue); expect(typeof result).toEqual("object"); expect(result.ReferralNumber).toEqual(testReferralNumber); expect(result.ReferralDate).toEqual(testReferralDate); expect(result.ReferralCorrelationId).toEqual(testReferralCorrelationId); expect(result.ShouldResetState).toEqual(testShouldResetState); expect(result.DidHeritageFunnelUpdateLast).toEqual(testDidHeritageFunnelUpdateLast); }); test("returns empty object when value is empty object", () => { // Arrange const testCookieValue = {}; setupCookies({ conceptCookieValue: JSON.stringify(testCookieValue) }); // Act var result = helper.getConceptCookie(); // Assert expect(result).toEqual(testCookieValue); expect(typeof result).toEqual("object"); expect(Object.keys(result)).toHaveLength(0); }); test("returns null when value is empty string", () => { // Arrange const testCookieValue = ""; setupCookies({ conceptCookieValue: testCookieValue }); // Act var result = helper.getConceptCookie(); // Assert expect(result).toEqual(null); }); test("returns null when concept cookie doesn't exist", () => { // Arrange setupCookies({ includeHeritageCookie: false }); // Act var result = helper.getConceptCookie(); // Assert expect(result).toEqual(null); }); test("gets correct cookie value", () => { // Arrange const testCookieValue = { test: "testValue" }; setupCookies({ conceptCookieValue: JSON.stringify(testCookieValue) }); // Act const actualCookieValue = helper.getConceptCookie(); // Assert expect(actualCookieValue).toEqual(testCookieValue); }); test("getCookieValue: Gets null cookie value", () => { // Arrange setupCookies({ includeHeritageCookie: false }); // Act const actualCookieValue = helper.getConceptCookie(); // Assert expect(actualCookieValue).toBeNull(); }); }) }) // document.cookie is not just a string, needs to be added individually const cookies = { "orderconfirmation": 1565980, "optimizelyEndUserId": "oeu1610051865958r0.07937134272718804", [cookieNames.CONCEPT_SESSION_INFO]: `{"ReferralNumber":"1566818","ReferralDate":"2022-03-15T10:56:24.597","ReferralCorrelationId":"404d2b04-f86e-45c3-b373-127b6217b060","ShouldResetState":false,"DidHeritageFunnelUpdateLast":true}`, "UNIQUE_SESSION_ID": "33756020-b58e-4ec7-b8b8-3f1576719c40", "_ga": "GA1.1.1631274579.1622658999", "da_lid": "B10847599A73EA95861EBB99009A283E27|0|0|0 clientTag=null", "addshoppers.com": "2%7C1%3A0%7C10%3A1646681050%7C15%3Aaddshoppers.com%7C44%3AODM1OTczNWI0MmFjNGNmMmExNDY3OWRlNTQ1NmM5MGY%3D%7Cef2a50fafe40fc5abf641a14ee5541c70bef2950666f59d3a809fd9352c7b963" }; function setupCookies({ conceptCookieValue = "", includeHeritageCookie = true }) { Object.keys(cookies).forEach(key => { const cookieValue = key == cookieNames.CONCEPT_SESSION_INFO ? conceptCookieValue : cookies[key]; if (includeHeritageCookie || key != cookieNames.CONCEPT_SESSION_INFO) document.cookie = `${key}=${cookieValue}; path=/;`; }); } function removeAllTestCookies() { Object.keys(cookies).forEach(key => { document.cookie = `${key}=;Max-Age=0;`; document.cookie = `${key}=;Max-Age=0;path=/`; }); } function getMockOrderInfo(mockReferralNumber, mockCorrelationId, mockReferralDate) { return { referralNumber: mockReferralNumber, referralCorrelationId: mockCorrelationId, referralDate: mockReferralDate } }