From c0a26b2a95a3f928eac487e593193b5431d0788b Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 15 Feb 2024 12:00:51 -0500 Subject: [PATCH] Update unit tests --- src/mixins/analytics-mixin.spec.js | 247 ++++++++++++++++++++++++++--- 1 file changed, 225 insertions(+), 22 deletions(-) diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js index ff6c30e7e..42aba5f31 100644 --- a/src/mixins/analytics-mixin.spec.js +++ b/src/mixins/analytics-mixin.spec.js @@ -38,27 +38,38 @@ const parts = { requiresRecalibration: true, salesTax: 63.86, sellingPrice: 791.46, + kitPrice: 0, + laborAmount: 0, }, frontWipers: { name: "front wipers", partNumber: "SBB16", description: "SAFELITE BEAM BLADE 16", partType: "FRONT WIPER", - price: 32.64, + sellingPrice: 32.64, + kitPrice: 0, + laborAmount: 0, + salesTax: 1, }, rearWipers: { name: "rear wipers", partNumber: "SBBR12A", description: "SAFELITE REAR BLADE 12A", partType: "REAR WIPER", - price: 24.48, + sellingPrice: 24.48, + kitPrice: 0, + laborAmount: 0, + salesTax: 2, }, rainDefense: { name: "rain defense", partNumber: "RAIN DEFENSE", description: null, partType: "RAIN DEFENSE", - price: 35.5, + sellingPrice: 35.5, + kitPrice: 0, + laborAmount: 0, + salesTax: 0, }, }; @@ -324,10 +335,10 @@ describe("analyticsMixin.js", () => { ]); }); - describe("pushSubmittedOrderToDataLayer", () => { + describe("pushOrderToDataLayer", () => { beforeEach(() => { - store.getters.hasSubmittedOrder = true; - store.getters.submittedOrder = { + store.getters.hasSubmittedOrder = false; + store.getters.order = { vehicle: { year: "2020", make: "acura", @@ -342,8 +353,8 @@ describe("analyticsMixin.js", () => { address2: "add2", city: "city", state: "state", - zipCode: "zip", - zipCodeCtu: "zipCtu", + zipCode: "11111", + zipCodeCtu: "11110", appointmentType: "IN_SHOP", isVehicleProtected: true, provider: { @@ -352,8 +363,8 @@ describe("analyticsMixin.js", () => { streetAddress: "add3", city: "city2", state: "state2", - zipCode: "zip2", - zipCodeCtu: "zipCtu2", + zipCode: "22222", + zipCodeCtu: "22220", }, }, techNotes: "", @@ -368,13 +379,28 @@ describe("analyticsMixin.js", () => { damage: { isRepair: false, numberOfChips: null, - glassToReplace: [{ glassName: "single", location: "windshield" }], + glassToReplace: [{ glassName: "single", glassLocation: "windshield" }], }, lineItems: { glassParts: [parts.windshield], supportingItems: [], vaps: [parts.frontWipers], - promos: [{ promoCode: "promoTEST" }, { promoCode: "promoTEST2" }], + promos: [ + { + promoCode: "promoTEST", + kitPrice: 0, + sellingPrice: 0, + laborAmount: 0, + salesTax: 0, + }, + { + promoCode: "promoTEST2", + kitPrice: 0, + sellingPrice: 0, + laborAmount: 0, + salesTax: 0, + }, + ], }, payment: { isInsurance: false, @@ -397,6 +423,8 @@ describe("analyticsMixin.js", () => { workOrderNumber: "01820-111111", workOrderId: "222222222222", }; + store.getters.isRecalibrationOnOrder = true; + store.getters.isRecalibrationOnSubmittedOrder = false; }); test("Pushes to data layer if nominal", () => { @@ -408,28 +436,203 @@ describe("analyticsMixin.js", () => { }; // Act - analyticsMixin.methods.pushSubmittedOrderToDataLayer(); + analyticsMixin.methods.pushOrderToDataLayer(); // Assert expect(mockDataLayerFn).toHaveBeenCalled(); }); - test("Does not push to data layer if no submitted order available.", () => { + test("Pushes populated data to data layer", () => { // Arrange - store.getters.hasSubmittedOrder = false; - store.getters.submittedOrder = undefined; + window.dataLayer = []; - const mockDataLayerFn = jest.fn(); + // Act + analyticsMixin.methods.pushOrderToDataLayer(); - window.dataLayer = { - push: mockDataLayerFn, + const result = window.dataLayer[0]; + + // Assert + console.log(result); + const allFieldsPopulated = Object.keys(result).every( + (key) => result[key] === false || !!result[key] + ); + expect(allFieldsPopulated).toBe(true); + }); + + test("Pushes correct data when submitted order is present", () => { + // Arrange + window.dataLayer = []; + store.getters.hasSubmittedOrder = true; + store.getters.submittedOrder = store.getters.order; + store.getters.order = { + vehicle: { + year: null, + make: null, + model: null, + style: null, + carId: null, + category: null, + vin: null, + }, + serviceLocation: { + address: null, + address2: null, + city: null, + state: null, + zipCode: null, + zipCodeCtu: null, + appointmentType: null, + isVehicleProtected: null, + provider: { + providerNumber: null, + address: { + streetAddress: null, + city: null, + state: null, + zipCode: null, + zipCodeCtu: null, + }, + }, + techNotes: null, + }, + customer: { + firstName: null, + lastName: null, + emailAddress: null, + phoneNumber: null, + isSmsOptIn: null, + }, + damage: { + isRepair: null, + numberOfChips: null, + glassToReplace: null, + }, + lineItems: { + glassParts: null, + supportingItems: null, + vaps: null, + promos: null, + }, + payment: { + isInsurance: null, + insuranceCoverage: { + isVerified: null, + coverageStatus: null, + coverageVerificationType: null, + }, + isPia: null, + piaType: null, + inactivePromos: null, + }, + schedule: { + date: null, + startTime: null, + endTime: null, + jobMinMinutes: null, + jobMaxMinutes: null, + }, + workOrderNumber: null, + workOrderId: null, }; // Act - analyticsMixin.methods.pushSubmittedOrderToDataLayer(); + analyticsMixin.methods.pushOrderToDataLayer(); + + const result = window.dataLayer[0]; // Assert - expect(mockDataLayerFn).not.toHaveBeenCalled(); + console.log(result); + const allFieldsPopulated = Object.keys(result).every( + (key) => result[key] === false || !!result[key] + ); + expect(allFieldsPopulated).toBe(true); + }); + + test("Pushes default values when data is missing", () => { + // Arrange + window.dataLayer = []; + store.getters.order = { + vehicle: { + year: null, + make: null, + model: null, + style: null, + carId: null, + category: null, + vin: null, + }, + serviceLocation: { + address: null, + address2: null, + city: null, + state: null, + zipCode: null, + zipCodeCtu: null, + appointmentType: null, + isVehicleProtected: null, + provider: { + providerNumber: null, + address: { + streetAddress: null, + city: null, + state: null, + zipCode: null, + zipCodeCtu: null, + }, + }, + techNotes: null, + }, + customer: { + firstName: null, + lastName: null, + emailAddress: null, + phoneNumber: null, + isSmsOptIn: null, + }, + damage: { + isRepair: null, + numberOfChips: null, + glassToReplace: null, + }, + lineItems: { + glassParts: null, + supportingItems: null, + vaps: null, + promos: null, + }, + payment: { + isInsurance: null, + insuranceCoverage: { + isVerified: null, + coverageStatus: null, + coverageVerificationType: null, + }, + isPia: null, + piaType: null, + inactivePromos: null, + }, + schedule: { + date: null, + startTime: null, + endTime: null, + jobMinMinutes: null, + jobMaxMinutes: null, + }, + workOrderNumber: null, + workOrderId: null, + }; + + // Act + analyticsMixin.methods.pushOrderToDataLayer(); + + const result = window.dataLayer[0]; + + // Assert + console.log(result); + const allFieldsPopulatedOrDefault = Object.keys(result).every( + (key) => result[key] === false || !!result[key] || result[key] === "" + ); + expect(allFieldsPopulatedOrDefault).toBe(true); }); test("Glass and Promo strings correctly formatted", () => { @@ -437,7 +640,7 @@ describe("analyticsMixin.js", () => { window.dataLayer = []; // Act - analyticsMixin.methods.pushSubmittedOrderToDataLayer(); + analyticsMixin.methods.pushOrderToDataLayer(); // Assert const glassString = window.dataLayer[0].glassToReplace;