From c59ad4dd9ac5c11ecf667e365443470f278138ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 06:02:01 +0000 Subject: [PATCH 1/8] Bump qs from 6.5.2 to 6.5.3 Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3. - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3) --- updated-dependencies: - dependency-name: qs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index a838afe8f..d7fc25822 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19150,9 +19150,9 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, "engines": { "node": ">=0.6" @@ -39784,9 +39784,9 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "query-string": { From 30e3ddc541e9004d6d91a45312bfc188c4fa76ff Mon Sep 17 00:00:00 2001 From: Herd Date: Thu, 16 Feb 2023 15:09:11 -0500 Subject: [PATCH 2/8] Initial implementation --- src/layouts/service-location/service-location.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 37a4cda43..f8a6de292 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -26,6 +26,7 @@ import { Form } from "vee-validate"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import store from "@/store"; export default { name: "service-location", @@ -53,7 +54,11 @@ export default { }, methods: { arePagePrerequisitesValid() { - return true; + return ( + store.getters.lineItems.supportingItems !== null && + store.getters.order.serviceLocation.zipCode !== null && + store.getters.payment.isInsurance !== null + ); }, backButtonAction() { From 8874519cb06cde810d2a97fd957e7df8c31fcbd9 Mon Sep 17 00:00:00 2001 From: Herd Date: Thu, 16 Feb 2023 16:48:59 -0500 Subject: [PATCH 3/8] Added first basic test --- .../service-location/service-location.spec.js | 73 ++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 85555dd59..5b2f3474a 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -1,3 +1,74 @@ +// Components +import serviceLocation from "@/layouts/service-location/service-location.vue"; + +// Supporting files +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper"; +import baseMixin from "@/mixins/base-mixin"; +import { nextTick } from "vue"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper.js"; + +// Define Mocks +jest.mock("@/helpers/layout-helper.js", () => ({ + settleAllPromises: jest.fn() +})); + +jest.mock("@/helpers/cms-content-helper", () => ({ + fetchCmsContentForPage: jest.fn() +})); + +jest.mock("@/store", () => ({ + commit: jest.fn(), + dispatch: jest.fn(), + getters: { + lineItems: { + supportingItems: null + }, + order: { + serviceLocation: { + zipCode: null + } + }, + payment: { + isInsurance: null + } + }, +})); + describe("service-location.vue", () => { - test.todo("test this"); + describe("arePagePrerequisitesValid", () => { + test("No prerequisites set: Should return false.", async () => { + const { wrapper } = setupMocks({}); + + serviceLocation.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "service-location" } }, + undefined, + (c) => c(wrapper.vm) + ); + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + await nextTick(); + + expect(arePagePrerequisitesValid).toBe(false); + }); + }); }); + +function setupMocks({ + mountOptionsMockData = {} +}) { + const apiResponses = {}; + + const apiPromise = Promise.resolve(apiResponses); + + settleAllPromises.mockImplementation(() => apiPromise); + fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + + const mountOptions = getMountOptions(mountOptionsMockData); + const wrapper = shallowMount(serviceLocation, mountOptions); + wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; + + return { wrapper, apiPromise }; +} \ No newline at end of file From 97eaf64232a45f6d9c0ed9d1668090685692c552 Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 16 Feb 2023 17:18:44 -0500 Subject: [PATCH 4/8] Added additional tests --- .../service-location/service-location.spec.js | 85 ++++++++++++++++--- 1 file changed, 74 insertions(+), 11 deletions(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 5b2f3474a..1b6fcd57f 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -8,14 +8,15 @@ import baseMixin from "@/mixins/base-mixin"; import { nextTick } from "vue"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper.js"; +import store from "@/store"; // Define Mocks jest.mock("@/helpers/layout-helper.js", () => ({ - settleAllPromises: jest.fn() + settleAllPromises: jest.fn(), })); jest.mock("@/helpers/cms-content-helper", () => ({ - fetchCmsContentForPage: jest.fn() + fetchCmsContentForPage: jest.fn(), })); jest.mock("@/store", () => ({ @@ -23,24 +24,88 @@ jest.mock("@/store", () => ({ dispatch: jest.fn(), getters: { lineItems: { - supportingItems: null + supportingItems: [], }, order: { serviceLocation: { - zipCode: null - } + zipCode: "00000", + }, }, payment: { - isInsurance: null - } + isInsurance: false, + }, }, })); +beforeEach(() => { + store.getters = { + lineItems: { + supportingItems: [], + }, + order: { + serviceLocation: { + zipCode: "00000", + }, + }, + payment: { + isInsurance: false, + }, + } +}) + describe("service-location.vue", () => { describe("arePagePrerequisitesValid", () => { test("No prerequisites set: Should return false.", async () => { const { wrapper } = setupMocks({}); + store.getters = { + lineItems: { + supportingItems: null, + }, + order: { + serviceLocation: { + zipCode: null, + }, + }, + payment: { + isInsurance: null, + }, + } + + serviceLocation.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "service-location" } }, + undefined, + (c) => c(wrapper.vm) + ); + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + await nextTick(); + + expect(arePagePrerequisitesValid).toBe(false); + }); + + test("All prerequisites set: Should return true.", async () => { + const { wrapper } = setupMocks({}); + + serviceLocation.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "service-location" } }, + undefined, + (c) => c(wrapper.vm) + ); + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + await nextTick(); + + expect(arePagePrerequisitesValid).toBe(true); + }); + + test("Some prerequisites set: Should return false.", async () => { + const { wrapper } = setupMocks({}); + + store.getters.order.serviceLocation.zipCode = null; + serviceLocation.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "service-location" } }, @@ -56,9 +121,7 @@ describe("service-location.vue", () => { }); }); -function setupMocks({ - mountOptionsMockData = {} -}) { +function setupMocks({ mountOptionsMockData = {} }) { const apiResponses = {}; const apiPromise = Promise.resolve(apiResponses); @@ -71,4 +134,4 @@ function setupMocks({ wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; return { wrapper, apiPromise }; -} \ No newline at end of file +} From 1fb34d29b1029c95c9e06d84ff3c63c170b4ad77 Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Fri, 17 Feb 2023 15:53:06 -0500 Subject: [PATCH 5/8] Updated test case data --- .../service-location/service-location.spec.js | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 1b6fcd57f..904580d9d 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -24,11 +24,20 @@ jest.mock("@/store", () => ({ dispatch: jest.fn(), getters: { lineItems: { - supportingItems: [], + supportingItems: [ + { + description: null, + kitPrice: 0, + laborAmount: 0, + partNumber: "SUPPLIES-REPAIR", + partType: "REPAIR FEE", + sellingPrice: 7.99 + } + ], }, order: { serviceLocation: { - zipCode: "00000", + zipCode: "43235", }, }, payment: { @@ -40,18 +49,27 @@ jest.mock("@/store", () => ({ beforeEach(() => { store.getters = { lineItems: { - supportingItems: [], + supportingItems: [ + { + description: null, + kitPrice: 0, + laborAmount: 0, + partNumber: "SUPPLIES-REPAIR", + partType: "REPAIR FEE", + sellingPrice: 7.99 + } + ], }, order: { serviceLocation: { - zipCode: "00000", + zipCode: "43235", }, }, payment: { isInsurance: false, }, - } -}) + }; +}); describe("service-location.vue", () => { describe("arePagePrerequisitesValid", () => { @@ -70,7 +88,7 @@ describe("service-location.vue", () => { payment: { isInsurance: null, }, - } + }; serviceLocation.beforeRouteEnter.call( wrapper.vm, From c148f56361871aa16221fd207b2ec4a237e5086a Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Mon, 20 Feb 2023 15:41:43 -0500 Subject: [PATCH 6/8] Removed unnecessary nextTick calls from tests --- src/layouts/service-location/service-location.spec.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 904580d9d..4dec285bd 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -73,7 +73,7 @@ beforeEach(() => { describe("service-location.vue", () => { describe("arePagePrerequisitesValid", () => { - test("No prerequisites set: Should return false.", async () => { + test("No prerequisites set: Should return false.", () => { const { wrapper } = setupMocks({}); store.getters = { @@ -98,12 +98,11 @@ describe("service-location.vue", () => { ); let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - await nextTick(); expect(arePagePrerequisitesValid).toBe(false); }); - test("All prerequisites set: Should return true.", async () => { + test("All prerequisites set: Should return true.", () => { const { wrapper } = setupMocks({}); serviceLocation.beforeRouteEnter.call( @@ -114,12 +113,11 @@ describe("service-location.vue", () => { ); let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - await nextTick(); expect(arePagePrerequisitesValid).toBe(true); }); - test("Some prerequisites set: Should return false.", async () => { + test("Some prerequisites set: Should return false.", () => { const { wrapper } = setupMocks({}); store.getters.order.serviceLocation.zipCode = null; @@ -132,7 +130,6 @@ describe("service-location.vue", () => { ); let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - await nextTick(); expect(arePagePrerequisitesValid).toBe(false); }); From ca215c3af53eece80d9e2924ec1ce0751c8619e5 Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Mon, 20 Feb 2023 15:42:48 -0500 Subject: [PATCH 7/8] Fix formatting --- src/layouts/service-location/service-location.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 4dec285bd..a1f44936b 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -31,8 +31,8 @@ jest.mock("@/store", () => ({ laborAmount: 0, partNumber: "SUPPLIES-REPAIR", partType: "REPAIR FEE", - sellingPrice: 7.99 - } + sellingPrice: 7.99, + }, ], }, order: { @@ -56,8 +56,8 @@ beforeEach(() => { laborAmount: 0, partNumber: "SUPPLIES-REPAIR", partType: "REPAIR FEE", - sellingPrice: 7.99 - } + sellingPrice: 7.99, + }, ], }, order: { From 3f99650208cc9346d324cc434b87522a7cfd4b44 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 23 Feb 2023 15:37:55 -0500 Subject: [PATCH 8/8] Unit Tests (Quote Page) Also refactored one store action name. --- src/constants/store-actions.js | 2 +- src/layouts/quote/quote.spec.js | 305 +++++++++++++++++- src/layouts/quote/quote.vue | 2 +- .../service-location/service-location.spec.js | 21 -- src/store/index.js | 2 +- 5 files changed, 302 insertions(+), 30 deletions(-) diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index 428280d40..d82f01232 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -31,7 +31,7 @@ const storeActions = { LOAD_SESSION: "loadSession", UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE: "updateStoreWithSaveSessionResponse", VALIDATE_ZIP: "validateZip", - PRICE_ORDER_ITEMS: "priceOrderItems", + PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA: "priceOrderItemsAndSaveServerData", LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure", LOG_PAGE_VIEW: "logPageView", LOG_CUSTOM_EVENT: "logCustomEvent", diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index dccc73346..edfdbc8b0 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -1,23 +1,20 @@ import { shallowMount, flushPromises } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { applicationConfig } from "@/constants/application-config"; +import { storeActions } from "@/constants/store-actions"; import quote from "@/layouts/quote/quote.vue"; import store from "@/store"; import * as navigateToHeritage from "@/helpers/heritage-integration/navigation-helper"; +import { nextTick } from "vue"; jest.mock("@/store", () => ({ commit: jest.fn(), dispatch: jest.fn(), })); -// Mock our module for promises. -jest.mock("@/helpers/layout-helper.js", () => ({ - settleAllPromises: jest.fn(), -})); - // Mock fetchCmsContentForPage jest.mock("@/helpers/cms-content-helper", () => ({ - fetchCmsContentForPage: jest.fn(), + fetchCmsContentForPage: () => Promise.resolve("content"), })); jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ @@ -32,6 +29,38 @@ jest.mock( { virtual: true } ); +// START beforeRouteEnter mock arranging // +jest.mock("@/mixins/base-mixin", () => ({ + methods: { + dispatchStoreAction(action, items, encode) { + if (action === mockPriceOrderStoreAction) return items; + else return mockStoreActionResults[action]; + }, + getTierOnePackagePrice() { + return mockTierOnePrice; + }, + filterOutFees() { + return null; + }, + }, +})); +let mockTierOnePrice = 501; + +const mockPriceOrderStoreAction = storeActions.PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA; +const mockStoreActionResults = {}; + +mockStoreActionResults[storeActions.GET_WIPERS] = Promise.resolve([ + { partNumber: "SBB24", partType: "FRONT WIPER" }, +]); +mockStoreActionResults[storeActions.GET_RAIN_DEFENSE] = Promise.resolve({ + partNumber: "RAIN DEFENSE", + partType: "RAIN DEFENSE", +}); +mockStoreActionResults[storeActions.GET_SUPPORTING_ITEMS] = Promise.resolve([ + { partNumber: "WSREPAIR", partType: "WSREPAIR" }, +]); +// END beforeRouteEnter mock arranging + store.getters = { order: { accountNumber: applicationConfig.CASH_ACCOUNT_NUMBER, @@ -117,6 +146,269 @@ describe("quote.vue", () => { //Assert expect(navigateToHeritage.navigateToHeritageFunnel).toHaveBeenCalled(); }); + test("should pass arePagePrerequisitesValid with a repair order", () => { + //Arrange + const { wrapper } = setupMocks({}); + store.getters = { + order: { + serviceLocation: { + zipCode: "12345", + zipCodeCtu: "value", + }, + damage: { + isRepair: true, + }, + referralNumber: "1234567", + }, + }; + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + + expect(arePagePrerequisitesValid).toBe(true); + }); + test("should pass arePagePrerequisitesValid with a replace order", () => { + //Arrange + const { wrapper } = setupMocks({}); + store.getters = { + order: { + serviceLocation: { + zipCode: "12345", + zipCodeCtu: "value", + }, + damage: { + isRepair: false, + }, + referralNumber: "1234567", + lineItems: { + glassParts: ["item", "item2"], + }, + }, + }; + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + + expect(arePagePrerequisitesValid).toBe(true); + }); + test("should fail arePagePrerequisitesValid without glass parts or flagged as repair", () => { + //Arrange + const { wrapper } = setupMocks({}); + store.getters = { + order: { + serviceLocation: { + zipCode: "12345", + zipCodeCtu: "value", + }, + damage: { + isRepair: false, + }, + referralNumber: "1234567", + }, + }; + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + + expect(arePagePrerequisitesValid).toBe(false); + }); + test("should have non-null values for necessary data members after 'beforeRouteEnter'", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + }, + }; + + //mock this to avoid needing to populate this.$route in an unrelated test + wrapper.vm.getDefaultIsInsuranceSelectedValue = jest.fn(); + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.pricedGlassParts !== null).toBe(true); + expect(wrapper.vm.supportingItems !== null).toBe(true); + expect(wrapper.vm.availableLineItems !== null).toBe(true); + // This should have its own test + //expect(vm.isInsuranceSelected !== null).toBe(true); + }); + test("should default to insurance if query param 'isInsurance' is true", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: null, + }, + }, + }; + wrapper.vm.$route = { query: { isInsurance: "true" } }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(true); + }); + test("should default to cash if query param 'isInsurance' is false", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: null, + }, + }, + }; + wrapper.vm.$route = { query: { isInsurance: "false" } }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(false); + }); + test("should default to insurance if insurance selection is saved to store", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: true, + }, + }, + }; + // Ensure that query param isn't overriding selection + wrapper.vm.$route = { query: null }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(true); + }); + test("should default to cash if cash selection is saved to store", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: false, + }, + }, + }; + // Ensure that query param isn't overriding selection + wrapper.vm.$route = { query: null }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(false); + }); + test("should default to cash if total economy package price is under $500", async () => { + // Also needs no query parameter or previous selection in store to be present + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: null, // Ensure that previous selection isn't overriding selection + }, + }, + }; + mockTierOnePrice = 200; + // Ensure that query param isn't overriding selection + wrapper.vm.$route = { query: null }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(false); + }); + test("should default to insurance if total economy package price is over $500", async () => { + // Also needs no query parameter or previous selection in store to be present + //Arrange + const { wrapper } = setupMocks({}); + + store.getters = { + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: null, // Ensure that previous selection isn't overriding selection + }, + }, + }; + mockTierOnePrice = 505; + // Ensure that query param isn't overriding selection + wrapper.vm.$route = { query: null }; + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote" } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(true); + }); }); function setupMocks({ customMountOptions }) { @@ -128,5 +420,6 @@ function setupMocks({ customMountOptions }) { mountOptions["attachTo"] = document.body; const wrapper = shallowMount(quote, mountOptions); + wrapper.vm.setCmsContent = jest.fn(); return { wrapper }; } diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 786b046b9..52b8f2687 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -113,7 +113,7 @@ export default { ]; const pricingResults = await baseMixin.methods.dispatchStoreAction( - storeActions.PRICE_ORDER_ITEMS, + storeActions.PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA, availableLineItems, false ); diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index a1f44936b..a7093cef0 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -90,13 +90,6 @@ describe("service-location.vue", () => { }, }; - serviceLocation.beforeRouteEnter.call( - wrapper.vm, - { query: { fmgPage: "service-location" } }, - undefined, - (c) => c(wrapper.vm) - ); - let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); expect(arePagePrerequisitesValid).toBe(false); @@ -105,13 +98,6 @@ describe("service-location.vue", () => { test("All prerequisites set: Should return true.", () => { const { wrapper } = setupMocks({}); - serviceLocation.beforeRouteEnter.call( - wrapper.vm, - { query: { fmgPage: "service-location" } }, - undefined, - (c) => c(wrapper.vm) - ); - let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); expect(arePagePrerequisitesValid).toBe(true); @@ -122,13 +108,6 @@ describe("service-location.vue", () => { store.getters.order.serviceLocation.zipCode = null; - serviceLocation.beforeRouteEnter.call( - wrapper.vm, - { query: { fmgPage: "service-location" } }, - undefined, - (c) => c(wrapper.vm) - ); - let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); expect(arePagePrerequisitesValid).toBe(false); diff --git a/src/store/index.js b/src/store/index.js index 93a3e5a25..cf5903bf9 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1416,7 +1416,7 @@ export const actions = { context.commit(storeMutations.UPDATE_VAPS, vaps); }, // Price order actions - async priceOrderItems(context, availableLineItems) { + async priceOrderItemsAndSaveServerData(context, availableLineItems) { const availableLineItemsFormattedForRequest = getLineItemQueryStringForPricing(availableLineItems); const vehicle = context.getters.order.vehicle;