From 8aac1a1d0ace954033538535142f8323a12af096 Mon Sep 17 00:00:00 2001 From: Jason Wheeler Date: Thu, 9 Feb 2023 12:35:46 -0500 Subject: [PATCH 1/6] update --- .../questions-page-layout/questions-page-layout.vue | 2 +- src/layouts/vehicle-parts/vehicle-parts.vue | 4 ++-- src/router/index.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/iss-components/questions-page-layout/questions-page-layout.vue b/src/iss-components/questions-page-layout/questions-page-layout.vue index e5e65685..a68c0ef4 100644 --- a/src/iss-components/questions-page-layout/questions-page-layout.vue +++ b/src/iss-components/questions-page-layout/questions-page-layout.vue @@ -23,7 +23,7 @@ :answerKey="questionsDatum.answerKey" :validationRules="validationRules" /> - diff --git a/src/router/index.js b/src/router/index.js index df451aa2..ca0dcee3 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -208,7 +208,7 @@ function getNavigationMap (scenario, currentRoute) { }; function GoToStartOn404(next) { - const errorPageName = issPageValues.VEHICLE_YEAR; + const errorPageName = issPageValues.WELCOME_PAGE; router.addRoute({ path: "/", name: errorPageName, From be3f574cac765ad0a93100ac13fa94964eb26014 Mon Sep 17 00:00:00 2001 From: Jason Wheeler Date: Tue, 14 Feb 2023 12:47:19 -0500 Subject: [PATCH 2/6] fixed autopopulation rules --- .../glass-part-question.spec.js | 2 +- .../glass-part-question.vue | 36 +++++++++++++++---- src/layouts/vehicle-parts/vehicle-parts.vue | 4 +-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js index ad35c306..d702daae 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js @@ -270,7 +270,7 @@ function setupMocks({ glassNameProp, glassLocationProp, colorAnswersProp, modelV const mountOptions = getMountOptions({ route: { query: { - iisPage: "vehicle-parts", + issPage: "vehicle-parts", }, }, }); diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index 69ff2cc2..096cbe08 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -4,7 +4,7 @@
-
+
part.partNumber == newValue)[0] + this.partsForSelectedTint.filter((part) => part.partNumber == newValue.value)[0] ); }, }, @@ -150,7 +151,6 @@ export default { // Add onto the final object arr[itemColor].push(mappedItem); - return arr; }, {}); @@ -158,7 +158,7 @@ export default { }, PartDataFromApi() { - return this.mainStore.pageData(this.$route.query.iisPage) ?? {}; + return this.mainStore.pageData(this.$route.query.issPage) ?? {}; }, }, methods: { @@ -190,7 +190,31 @@ export default { // Check if only a single part is present for the tint and set the v-model if it is. AutoSelectIfSinglePart() { if (this.partsForSelectedTint?.length == 1) { - this.selectedPartNumber = this.partsForSelectedTint[0].partNumber; + this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; + + this.$nextTick(() => { + //select element with matching partNumber + const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; + + }); + } + else{ + if(this.selectedPartNumber && this.partsForSelectedTint.filter(x => x.partNumber == this.selectedPartNumber).length > 0) + { + this.$nextTick(() => { + //select element with matching partNumber + const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; + + }); + } + else{ + this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber } + this.$nextTick(() => { + //select element with matching partNumber + const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; + + }); + } } }, @@ -198,7 +222,7 @@ export default { LoadPreselectedValues() { this.$nextTick(() => { if (this.modelValue !== undefined) { - // Populate button-question model-value if parts data already exists in VueX + // Populate button-question model-value if parts data already exists in store this.selectedTint = this.modelValue?.color; } }); diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index a89b6c63..b9b88916 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -7,7 +7,7 @@ cmsWidgetName="VehicleBannerWidget" :displayGenericVehicleImage="false" /> -
+
@@ -178,7 +178,7 @@ export default { } // If no parts could be matched, throw an error (isForwardActionDisabled is based off of matchedParts) if (this.isForwardActionDisabled) { - this.$refs.funnelFooter.removeLoader(); + this.$refs.siteFooter.removeLoader(); throw new Error("Could not match any parts to the selected parts"); } From 76b31a3faa6c33b8ab4ae48c6ca612407f509c2c Mon Sep 17 00:00:00 2001 From: Jason Wheeler Date: Thu, 16 Feb 2023 14:19:38 -0500 Subject: [PATCH 3/6] refactored --- .../glass-part-question.vue | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index 096cbe08..da16f281 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -115,7 +115,6 @@ export default { return this.modelValue?.partNumber; }, set(newValue) { - console.log(this.selectedPartNumber) this.$emit( "update:modelValue", this.partsForSelectedTint.filter((part) => part.partNumber == newValue.value)[0] @@ -184,40 +183,28 @@ export default { // Also checks if only a single part is present for the tint. ResetTintAndPartSelections() { this.selectedPartNumber = null; - this.AutoSelectIfSinglePart(); + this.AutoSelect(); }, - // Check if only a single part is present for the tint and set the v-model if it is. - AutoSelectIfSinglePart() { + + AutoSelect() { + // Check if only a single part is present for the tint and set the v-model if it is. if (this.partsForSelectedTint?.length == 1) { this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; - - this.$nextTick(() => { - //select element with matching partNumber - const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; - - }); } else{ - if(this.selectedPartNumber && this.partsForSelectedTint.filter(x => x.partNumber == this.selectedPartNumber).length > 0) + // If selected part isn't in the current list or it's null, select the first part + if(!this.selectedPartNumber || this.partsForSelectedTint.filter(x => x.partNumber == this.selectedPartNumber).length === 0) { - this.$nextTick(() => { - //select element with matching partNumber - const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; - - }); - } - else{ - this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber } - this.$nextTick(() => { - //select element with matching partNumber - const element = document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; - - }); + this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; } } - }, + //select element with matching partNumber + this.$nextTick(() => { + document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; + }); + }, // Loads the preselected values from the store. LoadPreselectedValues() { this.$nextTick(() => { @@ -230,7 +217,7 @@ export default { }, watch: { selectedTint() { - this.AutoSelectIfSinglePart(); + this.AutoSelect(); }, }, }; From a8a25c21b888f4d29930e7b72d93e57fb1c6e013 Mon Sep 17 00:00:00 2001 From: Kroell Date: Thu, 16 Feb 2023 16:19:48 -0500 Subject: [PATCH 4/6] fix to save vin to store correctly so getPartsOrQuestions can use vin --- src/layouts/license-plate-lookup/license-plate-lookup.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index a3896f85..404a8785 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -194,7 +194,7 @@ export default { await useMainStore().saveRegistrationLicensePlateLookup( { isSelectedGlassAvailableForVehicle: this.isSelectedGlassAvailableForVehicle, - vehicleInfo: Object.assign(vehicleFromLookup, {vin: vehicleFromLookup.vin }), + vehicleInfo: Object.assign(vinLookupResponse.data.vehicle, { vin: vinLookupResponse.data.vin }), registrationInfo: { licensePlate: this.licensePlate, state: this.licenseState, From c46d527acbace9dac975e28064ff141cd0a3c78c Mon Sep 17 00:00:00 2001 From: Jason Wheeler Date: Thu, 16 Feb 2023 16:31:48 -0500 Subject: [PATCH 5/6] All defaults selection logic is working --- .../glass-part-question.vue | 24 +++++++++---------- src/layouts/vehicle-parts/vehicle-parts.vue | 1 - 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index da16f281..9b5fe8ed 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -179,14 +179,6 @@ export default { return tintSourceObject.src; }, - // Reset selections when tint changes for the same glass to ensure proper selection. - // Also checks if only a single part is present for the tint. - ResetTintAndPartSelections() { - this.selectedPartNumber = null; - this.AutoSelect(); - }, - - AutoSelect() { // Check if only a single part is present for the tint and set the v-model if it is. if (this.partsForSelectedTint?.length == 1) { @@ -205,14 +197,22 @@ export default { document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; }); }, + // Loads the preselected values from the store. LoadPreselectedValues() { this.$nextTick(() => { - if (this.modelValue !== undefined) { - // Populate button-question model-value if parts data already exists in store - this.selectedTint = this.modelValue?.color; + // Populate button-question model-value if parts data already exists in store + if(this.modelValue) + { + this.selectedTint = this.modelValue.color; } - }); + else{ + // If one item in list, select it + if (this.tintSelectionOptions?.length == 1) { + this.selectedTint = this.tintSelectionOptions[0].value; + } + } + }); }, }, watch: { diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index b9b88916..7d8f4e25 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -34,7 +34,6 @@ cmsWidgetName="SiteFooterWidget" ref="siteFooter" :isForwardActionDisabled="isForwardActionDisabled" - @tempButtonClicked="() => handleTempButtonClicked(this)" @backClicked="navigateBack" @ForwardClicked="forwardButtonAction" />
From 17fbf65129798c6eeeb0a262d327ef7812fade2e Mon Sep 17 00:00:00 2001 From: Jason Wheeler Date: Thu, 16 Feb 2023 17:31:22 -0500 Subject: [PATCH 6/6] tests updated --- .../glass-part-question.spec.js | 42 +++---------------- .../glass-part-question.vue | 29 +++++++------ 2 files changed, 22 insertions(+), 49 deletions(-) diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js index d702daae..819ddaa4 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.spec.js @@ -32,6 +32,7 @@ describe("glass-part-question.vue", () => { //Act await wrapper.vm.$nextTick(); + console.log(wrapper.vm.featureListData["Green Tint"][0].Text) //Assert expect(Object.keys(wrapper.vm.featureListData).length).toBe(2); expect(wrapper.vm.featureListData["Green Tint"][0].Text).toBe( @@ -101,36 +102,7 @@ describe("glass-part-question.vue", () => { expect(listCard.attributes("groupname")).toBe("Rear-Stationary"); expect(listCard.attributes("validationrules")).toBe("Rear-Stationary-tint-required"); }); - - test("ResetTintAndPartSelections, should reset data elements ", async () => { - //Arrange - - featureListData.pageData = { - partsOrQuestions: [ - { - glassName: "Stationary", - glassLocation: "Rear", - parts: [{ partNumber: "DB12209GTYN", color: "Green Tint" }, - { partNumber: "DB12209GTYN2", color: "Green Tint" } - ], - }, - ], - }; - const { wrapper } = setupMocks(featureListData); - - //Act - await wrapper.vm.$nextTick(); - await wrapper.setData({ selectedTint: "Green Tint", selectedPartNumber: "DB12209GTYN" }); - - expect(wrapper.vm.selectedTint).toEqual("Green Tint"); - expect(wrapper.vm.selectedPartNumber).toEqual("DB12209GTYN"); - - await wrapper.vm.ResetTintAndPartSelections(); - - expect(wrapper.vm.selectedTint).toEqual("Green Tint"); - expect(wrapper.vm.selectedPartNumber).toEqual(null); - }); - + test("default is selected if only one option", async () => { // Arrange featureListData.pageData = { @@ -156,7 +128,7 @@ describe("glass-part-question.vue", () => { expect(wrapper.vm.selectedPartNumber).toBe("DB12209GTYN"); }); - test("default is not selected if more than one option", async () => { + test("first is selected if more than one option", async () => { // Arrange featureListData.pageData = { partsOrQuestions: [ @@ -178,8 +150,7 @@ describe("glass-part-question.vue", () => { await wrapper.vm.$nextTick(); // Assert - expect(wrapper.emitted()["update:modelValue"]).toBeFalsy(); - expect(wrapper.vm.selectedPartNumber).toBeFalsy(); + expect(wrapper.emitted()["update:modelValue"]).toBeTruthy(); }); const partsForSelectedTintTestCases = [ @@ -266,7 +237,6 @@ describe("glass-part-question.vue", () => { function setupMocks({ glassNameProp, glassLocationProp, colorAnswersProp, modelValueProp, pageData }) { - const mountOptions = getMountOptions({ route: { query: { @@ -288,7 +258,7 @@ function setupMocks({ glassNameProp, glassLocationProp, colorAnswersProp, modelV //Mock store const partsOrQuestions = pageData ?? { partsOrQuestions: [{ glassName: "Stationary", glassLocation: "Rear", parts: [] }] }; useMainStore().pageData = jest.fn(); - useMainStore().pageData.mockReturnValueOnce(partsOrQuestions); - + useMainStore().pageData.mockReturnValue(partsOrQuestions); + document.querySelector = jest.fn().mockReturnValue({checked: false}); return { wrapper }; } diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index 9b5fe8ed..a9477134 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -180,22 +180,25 @@ export default { }, AutoSelect() { - // Check if only a single part is present for the tint and set the v-model if it is. - if (this.partsForSelectedTint?.length == 1) { - this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; - } - else{ - // If selected part isn't in the current list or it's null, select the first part - if(!this.selectedPartNumber || this.partsForSelectedTint.filter(x => x.partNumber == this.selectedPartNumber).length === 0) - { + if(this.partsForSelectedTint?.length > 0) + { + // Check if only a single part is present for the tint and set the v-model if it is. + if (this.partsForSelectedTint?.length == 1) { this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; } - } + else{ + // If selected part isn't in the current list or it's null, select the first part + if(!this.selectedPartNumber || this.partsForSelectedTint.filter(x => x.partNumber == this.selectedPartNumber).length === 0) + { + this.selectedPartNumber = { value: this.partsForSelectedTint[0].partNumber }; + } + } - //select element with matching partNumber - this.$nextTick(() => { - document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; - }); + //select element with matching partNumber + this.$nextTick(() => { + document.querySelector('input[value=' + this.selectedPartNumber + ']').checked = true; + }); + } }, // Loads the preselected values from the store.