357 lines
11 KiB
JavaScript
357 lines
11 KiB
JavaScript
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
|
|
}
|
|
}
|