From 1910497b2e059605c37961837b3a4615b1334be6 Mon Sep 17 00:00:00 2001 From: Kroell Date: Mon, 24 Apr 2023 13:02:15 -0400 Subject: [PATCH 01/11] military zip alert --- .../service-location/service-location.vue | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 037423df..f5652c18 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -12,7 +12,15 @@ + { vm.setCmsContent(resultMap.cmsContent); + vm.setData( + resultMap.zipCodeData, + resultMap.serviceabilityDetails, + ) }); }, setup() { @@ -111,7 +124,10 @@ export default { zipCode: this.mainStore.order.customer.address.zipCode, state: this.mainStore.order.customer.address.state, isServiceZipServiceable: null, + isGlassServiceableMobile: null, + isRecalibrationServiceableMobile: null, selectedAppointmentType: "", + zipContainsMilitaryBase: false, }; }, computed: { @@ -138,6 +154,16 @@ export default { this.$nextTick(); }, + }, + isServiceableMobile() { + if (this.isRecalibrationServiceableMobile !== null) { + return this.isGlassServiceableMobile && this.isRecalibrationServiceableMobile; + } else { + return this.isGlassServiceableMobile; + } + }, + displayMilitaryZipAlert() { + return this.zipContainsMilitaryBase && this.isServiceableMobile; } }, methods: { @@ -154,7 +180,30 @@ export default { //validate and save data here this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD, this.$route); }, - resetDependentState() {}, + resetDependentState() { + + }, + setData(zipCodeData, serviceabilityDetails) { + if (zipCodeData) { + this.zipContainsMilitaryBase = zipCodeData.containsMilitaryBase; + } + if (serviceabilityDetails) { + this.setServiceabilityDetails(serviceabilityDetails); + } + }, + setContainsMilitaryBase(val) { + if (this.zipContainsMilitaryBase !== val) { + this.zipContainsMilitaryBase = val; + } + }, + setServiceabilityDetails(serviceabilityDetails) { + this.isGlassServiceableInshop = serviceabilityDetails.isGlassServiceableInshop; + this.isRecalibrationServiceableInshop = + serviceabilityDetails.isRecalibrationServiceableInshop; + this.isGlassServiceableMobile = serviceabilityDetails.isGlassServiceableMobile; + this.isRecalibrationServiceableMobile = + serviceabilityDetails.isRecalibrationServiceableMobile; + }, }, components: { siteFooter, @@ -163,6 +212,7 @@ export default { buttonQuestion, Form, serviceZipModalQuestion, + alert }, }; From c6967028e3061850a0c88fdc2fe411625cc02bc7 Mon Sep 17 00:00:00 2001 From: Kroell Date: Mon, 24 Apr 2023 13:25:05 -0400 Subject: [PATCH 02/11] unit test for military zip alert --- .../service-location/service-location.spec.js | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index d402619f..6d1ba5e2 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -1,6 +1,34 @@ import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import serviceLocation from "@/layouts/service-location/service-location.vue"; +import { getServiceabilityDetails, getZipCodeData } from "@/helpers/service-location-helper"; + +// Define Mocks +jest.mock("@/helpers/cms-content-helper", () => ({ + fetchCmsContentForPage: jest.fn(() => { + return Promise.resolve("content"); + }), +})); + +const mockGetServiceabilityDetails = (mockServiceZipCode) => { + const serviceabilityDetails = { + isGlassServiceableInshop: true, + isRecalibrationServiceableInshop: true, + isGlassServiceableMobile: true, + isRecalibrationServiceableMobile: true, + }; + + return Promise.resolve(serviceabilityDetails); +}; + +jest.mock( + "@/helpers/service-location-helper", + () => ({ + getServiceabilityDetails: jest.fn((mockServiceZipCode) => { + return mockGetServiceabilityDetails(mockServiceZipCode); + }), + }) +); const mockMixin = { methods: { @@ -26,6 +54,14 @@ const mockMixin = { }); } + if (zip === "45433") { + return Promise.resolve({ + containsMilitaryBase: true, + isValid: true, + state: "OH", + }); + } + return Promise.resolve({ containsMilitaryBase: false, isValid: false, @@ -98,6 +134,34 @@ describe("updating service zip", () => { // Assert expect(wrapper.vm.selectedAppointmentType).toStrictEqual(null); }); + + test("displays military zip message when zip is updated", () => { + // Arrange + const { wrapper } = setupMocks({}); + + const mobileLocationQuestionsComponent = wrapper.findComponent({ + ref: "mobileLocationQuestions", + }); + mobileLocationQuestionsComponent.resetComponent = jest.fn(); + + const serviceZipCodeComponent = wrapper.findComponent({ + ref: "serviceZipCodeQuestion", + }); + serviceZipCodeComponent.resetMobileFeePart = jest.fn(); + + expect(wrapper.vm.zipContainsMilitaryBase).toBe(false); + + const newServiceZipCodeQuestion = { + zipCode: "45433", + state: "OH", + }; + + // Act + serviceZipCodeComponent.vm.$emit("updated-contains-military-base", true); + + // Assert + expect(wrapper.vm.zipContainsMilitaryBase).toBe(true); + }); }); function setupMocks() From 96c519e32e3636ac8e3ec52778d275a3497e6c1c Mon Sep 17 00:00:00 2001 From: Reddy Date: Wed, 26 Apr 2023 10:49:10 +0530 Subject: [PATCH 03/11] SSR-427 Front end for order confirmation page --- .../order-confirmation/order-confirmation.vue | 77 +++++++++++++++++++ src/router/router-constants/issPage-values.js | 1 + src/router/router-constants/routing-table.js | 15 +++- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/layouts/order-confirmation/order-confirmation.vue diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue new file mode 100644 index 00000000..c1685696 --- /dev/null +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -0,0 +1,77 @@ + + + \ No newline at end of file diff --git a/src/router/router-constants/issPage-values.js b/src/router/router-constants/issPage-values.js index 70da2a0e..6f8877bf 100644 --- a/src/router/router-constants/issPage-values.js +++ b/src/router/router-constants/issPage-values.js @@ -10,6 +10,7 @@ export const issPageValues = { COVERAGE_STATEMENT: 'coverage-statement', LICENSE_PLATE_LOOKUP: 'license-plate-lookup', MOLDING_QUESTIONS: 'molding-questions', + ORDER_CONFIRMATION: 'order-confirmation', PAYMENT_PAGE: 'payment-page', PART_QUESTIONS: 'part-questions', POLICY_HOLDER_DETAILS: 'policy-holder-details', diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 1376ed00..fe335080 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -516,7 +516,7 @@ const routingTable = function(store) { }, { scenario: navigationScenarios.CLICKED_FORWARD, - destinationIssPageValue: issPageValues.WELCOME_PAGE + destinationIssPageValue: issPageValues.ORDER_CONFIRMATION, } ] }, @@ -545,7 +545,18 @@ const routingTable = function(store) { destinationIssPageValue: issPageValues.TPA_CONFIRMATION, }, ] - } + }, + { + issPageValue: issPageValues.ORDER_CONFIRMATION, + maps: [ + + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationIssPageValue: issPageValues.WELCOME_PAGE + }, + + ], + }, ]; }; From f28b9625aa06ee68a5956ccad5d72b4f9046627c Mon Sep 17 00:00:00 2001 From: Jethe Date: Wed, 26 Apr 2023 10:57:47 +0530 Subject: [PATCH 04/11] Added TPA Search page SSR-416 --- src/layouts/tpa-search/tpa-search.vue | 78 +++++++++++++++++++ src/router/router-constants/issPage-values.js | 1 + src/router/router-constants/routing-table.js | 13 ++++ 3 files changed, 92 insertions(+) create mode 100644 src/layouts/tpa-search/tpa-search.vue diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue new file mode 100644 index 00000000..4bbd0fba --- /dev/null +++ b/src/layouts/tpa-search/tpa-search.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/src/router/router-constants/issPage-values.js b/src/router/router-constants/issPage-values.js index 70da2a0e..66e82635 100644 --- a/src/router/router-constants/issPage-values.js +++ b/src/router/router-constants/issPage-values.js @@ -30,5 +30,6 @@ export const issPageValues = { VIN_LOOKUP: 'vin-lookup', TPA_SUBMIT: 'tpa-submit', BAILOUT_PAGE: 'bailout-page', + TPA_SEARCH: 'tpa-search' }; \ No newline at end of file diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 1376ed00..6424ca64 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -545,6 +545,19 @@ const routingTable = function(store) { destinationIssPageValue: issPageValues.TPA_CONFIRMATION, }, ] + }, + { + issPageValue: issPageValues.TPA_SEARCH, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationIssPageValue: issPageValues.PROVIDER_PREFERENCE + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationIssPageValue: issPageValues.TPA_SUBMIT, + }, + ] } ]; }; From 06d642e980d107170422c48ca74580df1be00f62 Mon Sep 17 00:00:00 2001 From: Jethe Date: Wed, 26 Apr 2023 12:30:26 +0530 Subject: [PATCH 05/11] Update tpa-search.vue --- src/layouts/tpa-search/tpa-search.vue | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index 4bbd0fba..20f579f1 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -73,6 +73,4 @@ export default { Form, }, } - - \ No newline at end of file + \ No newline at end of file From 051bdad4dd0b26cfc0484106c48a47ddcce434c2 Mon Sep 17 00:00:00 2001 From: Jethe Date: Wed, 26 Apr 2023 12:33:10 +0530 Subject: [PATCH 06/11] Update tpa-search.vue --- src/layouts/tpa-search/tpa-search.vue | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index 20f579f1..f3bb24f5 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -26,16 +26,11 @@ import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { Form } from "vee-validate"; import BaseFormMixin from '@/mixins/base-form-mixin.js'; -import { useMainStore } from '@/store'; export default { name: "tpa-search", mixins: [BaseFormMixin], data() { }, - setup() { - const mainStore = useMainStore(); - return { mainStore }; - }, async beforeRouteEnter(to, from, next) { // Call APIs From ed4e772575c0dc81f7c76893ef1f636060de8121 Mon Sep 17 00:00:00 2001 From: Reddy Date: Wed, 26 Apr 2023 14:06:21 +0530 Subject: [PATCH 07/11] Update order-confirmation.vue Added the changes --- .../order-confirmation/order-confirmation.vue | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index c1685696..2cdbc680 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -9,7 +9,7 @@ cmsWidgetName="SiteFooterWidget" ref="siteFooter" :isForwardActionDisabled="!meta.valid" - @ForwardClicked="navigateForward" + @ForwardClicked="forwardButtonAction" @back-clicked="backButtonAction" /> @@ -26,16 +26,9 @@ import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { Form } from "vee-validate"; import BaseFormMixin from '@/mixins/base-form-mixin.js'; -import { useMainStore } from '@/store'; export default { name: "order-confirmation", - mixins: [BaseFormMixin], - data() { - }, - setup() { - const mainStore = useMainStore(); - return { mainStore }; - }, + mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { // Call APIs @@ -58,6 +51,7 @@ export default { this.$router.navigate(this.navigationScenarios.CLICKED_BACK, this.$route); }, forwardButtonAction() { + return this.navigateForward(); }, navigateForward() { this.$router.navigate( @@ -73,5 +67,3 @@ export default { }, } - \ No newline at end of file From 0acf888dc00ccd77c8b365179432249701828215 Mon Sep 17 00:00:00 2001 From: Jethe Date: Wed, 26 Apr 2023 17:28:44 +0530 Subject: [PATCH 08/11] Created policy vehicle page SSR-385 --- .../policy-vehicles-question.vue | 28 ++++++++ .../policy-vehicles/policy-vehicles.vue | 71 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue create mode 100644 src/layouts/policy-vehicles/policy-vehicles.vue diff --git a/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue b/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue new file mode 100644 index 00000000..46d9d2d2 --- /dev/null +++ b/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue @@ -0,0 +1,28 @@ + + + \ No newline at end of file diff --git a/src/layouts/policy-vehicles/policy-vehicles.vue b/src/layouts/policy-vehicles/policy-vehicles.vue new file mode 100644 index 00000000..6a747bcd --- /dev/null +++ b/src/layouts/policy-vehicles/policy-vehicles.vue @@ -0,0 +1,71 @@ + + \ No newline at end of file From b801bba42eb3afaa396a5bdd6d788af5de1e3e9d Mon Sep 17 00:00:00 2001 From: Jethe Date: Wed, 26 Apr 2023 17:30:15 +0530 Subject: [PATCH 09/11] Update policy-vehicles-question.vue --- .../policy-vehicles-question/policy-vehicles-question.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue b/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue index 46d9d2d2..a69fb31c 100644 --- a/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue +++ b/src/layouts/policy-vehicles/policy-vehicles-question/policy-vehicles-question.vue @@ -2,7 +2,7 @@ From 8a39ff798925a18c4710470ae74dc09fd9e6608e Mon Sep 17 00:00:00 2001 From: David Back Date: Wed, 26 Apr 2023 08:18:12 -0400 Subject: [PATCH 10/11] SSR-316 and SSR-289. Please keep in mind that prices are present but incorrect. Also note that in cases of very short view height, tall modals appear underneath the header hamburger menu. This is endemic to all such situations, and not specific to these cards. --- src/global-methods.js | 2 +- .../service-package-question.vue | 64 ++++--------------- .../service-package-radio.vue | 17 ++--- .../service-packages/service-packages.vue | 61 ++++++++++++++---- src/router/router-constants/routing-table.js | 4 +- src/store/index.js | 16 +++-- 6 files changed, 85 insertions(+), 79 deletions(-) diff --git a/src/global-methods.js b/src/global-methods.js index 3f7e75b8..92e31d54 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -21,7 +21,7 @@ export default { url: cfDistroUrl + endpoint, data: payloadAndAnalyticsData, crossDomain: true, - responseType: {}, + responseType: 'json', headers: headers, }) .then((response) => { diff --git a/src/layouts/service-packages/service-package-question/service-package-question.vue b/src/layouts/service-packages/service-package-question/service-package-question.vue index ede27160..1a44ba9b 100644 --- a/src/layouts/service-packages/service-package-question/service-package-question.vue +++ b/src/layouts/service-packages/service-package-question/service-package-question.vue @@ -24,6 +24,7 @@ }; export default { name: 'servicePackageQuestion', + emits: ['vapsItemsSelected'], props: { cmsWidgetName: String, groupName: String, @@ -34,16 +35,10 @@ data() { return { servicePackageRadio: servicePackageRadio, - selectedPackageName: null + selectedPackageName: packageNames.TIER_ONE }; }, watch: { - availableLineItems() { - const store = useMainStore(); - if (this.allGlassPartsAndSupportingItemsHavePrices(store.order.lineItems)) { - this.selectDefaultPackage(); - } - }, selectedPackageName(newValue) { const VapsProductsInSelectedPackage = this.getVapsLineItemsForSelectedPackage(newValue); this.$emit('vapsItemsSelected', VapsProductsInSelectedPackage); @@ -51,10 +46,14 @@ }, computed: { nullSafeAvailableLineItems() { + if (this.availableLineItems?.lineItems) { + return this.availableLineItems.lineItems; + } + return this.availableLineItems ?? []; }, servicePackageAnswers() { - if (!this.cmsWidgetName) return {}; + if (!this.cmsWidgetName) return []; const cmsAnswersContent = [ { Name: 'TierOne', @@ -84,6 +83,9 @@ )); return modifiedAnswers; }, + isRecalibrationOnOrder() { + return this.lineItemsContainsPartType(partTypeStrings.RECALIBRATION); + }, frontWipersApplicableForTierTwo() { const store = useMainStore(); const frontWipersAreAvailable = this.lineItemsContainsPartType( @@ -205,50 +207,6 @@ }); return vapsPrice; }, - selectDefaultPackage() { - const store = useMainStore(); - const vapsFromStore = store.lineItems.vaps; - let lowestTierForPackage = packageNames.TIER_ONE; - if (vapsFromStore?.length > 0) { - vapsFromStore.every((vapsItem) => { - let lowestTierForThisItem = this.getLowestTierForThisItem(vapsItem); - if (lowestTierForThisItem === packageNames.TIER_THREE) { - lowestTierForPackage = packageNames.TIER_THREE; - return false; - } else if (lowestTierForThisItem === packageNames.TIER_TWO) { - lowestTierForPackage = packageNames.TIER_TWO; - return true; - } else { - return true; - } - }); - } - this.selectedPackageName = lowestTierForPackage; - }, - allGlassPartsAndSupportingItemsHavePrices(lineItems) { - if (lineItems?.glassParts) { - for (let i = 0; i < lineItems.glassParts.length; i++) { - if (this.priceIsNullOrZero(lineItems.glassParts[i])) { - return false; - } - } - } - if (lineItems?.supportingItems) { - for (let i = 0; i < lineItems.supportingItems.length; i++) { - if (this.priceIsNullOrZero(lineItems.supportingItems[i])) { - return false; - } - } - } - return true; - }, - priceIsNullOrZero(lineItem) { - return ( - (lineItem.kitPrice == null || lineItem.kitPrice == 0) && - (lineItem.laborAmount == null || lineItem.laborAmount == 0) && - (lineItem.sellingPrice == null || lineItem.sellingPrice == 0) - ); - }, getLowestTierForThisItem(vapsItem) { let lowestTierForThisItem = null; switch (vapsItem.partType) { @@ -345,7 +303,7 @@ return !!glassLocationMatches.length; }, getTotalLineItemPrice(lineItem) { - return lineItem.kitPrice + lineItem.laborAmount + lineItem.sellingPrice + return lineItem.kitPrice + lineItem.laborAmount + lineItem.sellingPrice; } }, components: { diff --git a/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue b/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue index c32dd9d3..fbf3f111 100644 --- a/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue +++ b/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue @@ -1,5 +1,5 @@