From c9b09ae23a629bf85819e69dd694dec3012c0931 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Mon, 14 Feb 2022 10:59:31 -0500 Subject: [PATCH 01/15] CSR-269 wip --- src/layouts/vehicle-damage/vehicle-damage.vue | 27 +++- .../windshield-chip-count-question.vue | 49 ++++++++ .../windshield-damage-type-question.vue | 54 ++++++++ .../windshield-options/windshield-options.vue | 118 ++++++++++++++++++ 4 files changed, 246 insertions(+), 2 deletions(-) create mode 100644 src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue create mode 100644 src/layouts/vehicle-damage/windshield-options/windshield-damage-type-question/windshield-damage-type-question.vue create mode 100644 src/layouts/vehicle-damage/windshield-options/windshield-options.vue diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index c5b8df783..e809e97fc 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -5,6 +5,7 @@ + @@ -15,6 +16,8 @@ import vehicleBanner from "@/common-components/vehicle-banner/vehicle-banner"; import funnelSubHeader from "@/common-components/funnel-sub-header/funnel-sub-header"; import replaceOptionsQuestion from"@/layouts/vehicle-damage/replace-options-question/replace-options-question"; import damageLocationQuestion from"@/layouts/vehicle-damage/damage-location-question/damage-location-question"; +import windshieldOptions from"@/layouts/vehicle-damage/windshield-options/windshield-options"; + // Supporting files import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; @@ -26,6 +29,7 @@ import baseMixin from "@/mixins/base-mixin"; export default { name: "vehicle-damage", async beforeRouteEnter(to, from, next) { + console.log("vd: beforeRoute"); // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); const damageOptionsPromise = @@ -46,10 +50,12 @@ export default { }, ]; + console.log("vd: before settle"); const resultMap = await settleAllPromises(promiseResultMap); - + console.log("vd: after settle"); // Call the "next" function to complete the transition to this page. next((vm) => { + console.log("vd: next"); vm.$refs.funnelHeader.initializeComponent( resultMap.cmsContent.FunnelHeaderWidget ); @@ -65,12 +71,19 @@ export default { vm.$refs.damageLocation.initializeComponent( resultMap.cmsContent.DamageLocationQuestion, resultMap.damageOptions ); + console.log("vd: initialize wo"); + vm.$refs.windshieldOptions.initializeComponent( + resultMap.cmsContent.WindshieldDamageTypeQuestion, resultMap.cmsContent.WindshieldChipCountQuestion, + resultMap.cmsContent.WindshieldReplaceOptionsQuestion + ); }); }, data(){ return { selectedDamageLocations: [], driverSideOptionsData: [], + selectedWindshieldOptions: [], + selectedChipCount: [] } }, methods: { @@ -80,14 +93,24 @@ export default { resetDependentState() { // Invokes store.dispatch(storeActions.RESET_PARTS_AND_DEPS); - }, + } }, + //computed: { + // selectedWindshieldDamageType(){ + // return this.modelValue.some(selectedDamages => + // { + // const categoryAndGlass = selectedDamages.split('-'); //ie: model looks like "Suv-Windshield" so this Splits the answers into [0]"Suv" [1]"Windshield" + // return Boolean(categoryAndGlass[1].toUpperCase() === "WINDSHIELD"); + // }); + // }, + //}, components: { funnelHeader, vehicleBanner, funnelSubHeader, replaceOptionsQuestion, damageLocationQuestion, + windshieldOptions, }, }; diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue new file mode 100644 index 000000000..fc3452dcb --- /dev/null +++ b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-damage-type-question/windshield-damage-type-question.vue b/src/layouts/vehicle-damage/windshield-options/windshield-damage-type-question/windshield-damage-type-question.vue new file mode 100644 index 000000000..911d3e8ad --- /dev/null +++ b/src/layouts/vehicle-damage/windshield-options/windshield-damage-type-question/windshield-damage-type-question.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-options.vue b/src/layouts/vehicle-damage/windshield-options/windshield-options.vue new file mode 100644 index 000000000..1baf8dd82 --- /dev/null +++ b/src/layouts/vehicle-damage/windshield-options/windshield-options.vue @@ -0,0 +1,118 @@ + + + From e2bfed2b364309bd49fad845cb8903b8db04d946 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Tue, 15 Feb 2022 16:16:06 -0500 Subject: [PATCH 02/15] csr-269 wip --- .../replace-options-question.vue | 8 +- src/layouts/vehicle-damage/vehicle-damage.vue | 40 +++---- .../windshield-options/windshield-options.vue | 106 ++++++++++++------ 3 files changed, 94 insertions(+), 60 deletions(-) diff --git a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue index 31c739b49..1a21573d1 100644 --- a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue +++ b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue @@ -30,6 +30,9 @@ defineRule("replace-options-required", (value) => { export default ({ name: "replaceOptionsQuestion", + updated() { + console.log("ro:modelValue=>" + this.modelValue); + }, data(){ return { questionText: String, @@ -48,6 +51,7 @@ export default ({ this.questionText = cmsContent.QuestionText; this.answersFromCms = cmsContent.Answers; this.replaceOptions = replaceOptions; + console.log("ro:" + this.questionText); }, }, computed: { @@ -56,6 +60,7 @@ export default ({ return this.modelValue; }, set: function(newValue) { + console.log("ro:newVal=>" + newValue); this.$emit("update:modelValue", newValue); } }, @@ -64,7 +69,8 @@ export default ({ ? this.answersFromCms.filter(ans => { const name = ans.Name.split('-'); - return this.filterByVehicleCategory ? name[0].toUpperCase() === store.getters.vehicle.category : name[0].toUpperCase() === store.getters.vehicle.category && this.replaceOptions.includes(name[1]) + return this.filterByVehicleCategory ? name[0].toUpperCase() === store.getters.vehicle.category && this.replaceOptions.includes(name[1]) : + this.replaceOptions.includes(ans.Name) }) : []; }, diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 3bc47570c..1b2ce8ce2 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -4,9 +4,12 @@ - + + - @@ -18,7 +21,7 @@ import vehicleBanner from "@/common-components/vehicle-banner/vehicle-banner"; import funnelSubHeader from "@/common-components/funnel-sub-header/funnel-sub-header"; import replaceOptionsQuestion from"@/layouts/vehicle-damage/replace-options-question/replace-options-question"; import damageLocationQuestion from"@/layouts/vehicle-damage/damage-location-question/damage-location-question"; -import windshieldOptions from"@/layouts/vehicle-damage/windshield-options/windshield-options"; +import windshieldOptions from "@/layouts/vehicle-damage/windshield-options/windshield-options"; // Supporting files import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; @@ -30,8 +33,12 @@ import baseMixin from "@/mixins/base-mixin"; export default { name: "vehicle-damage", + updated() { + console.log("vd:selectedWindshieldChipCount=>" + this.selectedWindshieldOptions.selectedWindshieldChipCount); + console.log("vd:selectedWindshieldDamageType=>" + this.selectedWindshieldOptions.selectedWindshieldDamageType); + console.log("vd:selectedWindshieldReplaceOptions=>" + this.selectedWindshieldOptions.selectedWindshieldReplaceOptions); + }, async beforeRouteEnter(to, from, next) { - console.log("vd: beforeRoute"); // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); const damageOptionsPromise = @@ -52,12 +59,10 @@ export default { }, ]; - console.log("vd: before settle"); const resultMap = await settleAllPromises(promiseResultMap); - console.log("vd: after settle"); + // Call the "next" function to complete the transition to this page. next((vm) => { - console.log("vd: next"); vm.$refs.funnelHeader.initializeComponent( resultMap.cmsContent.FunnelHeaderWidget ); @@ -73,13 +78,12 @@ export default { vm.$refs.damageLocation.initializeComponent( resultMap.cmsContent.DamageLocationQuestion, resultMap.damageOptions ); - vm.$refs.funnelFooter.initializeComponent( - resultMap.cmsContent.FunnelFooterWidget - ); - console.log("vd: initialize wo"); vm.$refs.windshieldOptions.initializeComponent( resultMap.cmsContent.WindshieldDamageTypeQuestion, resultMap.cmsContent.WindshieldChipCountQuestion, - resultMap.cmsContent.WindshieldReplaceOptionsQuestion + resultMap.cmsContent.WindshieldReplaceOptionsQuestion, resultMap.damageOptions.windshieldOptions.availableReplacementOptions + ); + vm.$refs.funnelFooter.initializeComponent( + resultMap.cmsContent.FunnelFooterWidget ); }); }, @@ -87,8 +91,7 @@ export default { return { selectedDamageLocations: [], driverSideOptionsData: [], - selectedWindshieldOptions: [], - selectedChipCount: [] + selectedWindshieldOptions: [] } }, methods: { @@ -107,15 +110,6 @@ export default { ); }, }, - //computed: { - // selectedWindshieldDamageType(){ - // return this.modelValue.some(selectedDamages => - // { - // const categoryAndGlass = selectedDamages.split('-'); //ie: model looks like "Suv-Windshield" so this Splits the answers into [0]"Suv" [1]"Windshield" - // return Boolean(categoryAndGlass[1].toUpperCase() === "WINDSHIELD"); - // }); - // }, - //}, components: { funnelHeader, funnelFooter, diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-options.vue b/src/layouts/vehicle-damage/windshield-options/windshield-options.vue index f5356b4d5..2f480f7bc 100644 --- a/src/layouts/vehicle-damage/windshield-options/windshield-options.vue +++ b/src/layouts/vehicle-damage/windshield-options/windshield-options.vue @@ -1,38 +1,42 @@ - - suppressError: Boolean, \ No newline at end of file + \ No newline at end of file From 5d866d0d0471857136eef68aeda9d88a461ce2be Mon Sep 17 00:00:00 2001 From: CarlNation Date: Thu, 17 Feb 2022 08:05:05 -0500 Subject: [PATCH 03/15] CSR-269 --- .../button-question/button-question.vue | 2 +- .../replace-options-question.spec.js | 2 +- .../replace-options-question.vue | 7 +- src/layouts/vehicle-damage/vehicle-damage.vue | 5 - .../windshield-damage-type-question.vue | 99 ------------------- .../windshield-chip-count-question.spec.js | 71 +++++++++++++ .../windshield-chip-count-question.vue | 33 ++++--- .../windshield-damage-type-question.vue | 52 ++++++---- .../windshield-options/windshield-options.vue | 51 +++------- 9 files changed, 137 insertions(+), 185 deletions(-) delete mode 100644 src/layouts/vehicle-damage/windshield-damage-type-question/windshield-damage-type-question.vue create mode 100644 src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.spec.js diff --git a/src/common-components/button-question/button-question.vue b/src/common-components/button-question/button-question.vue index 417230464..b7188d11a 100644 --- a/src/common-components/button-question/button-question.vue +++ b/src/common-components/button-question/button-question.vue @@ -121,7 +121,7 @@ export default { }, }, mounted(){ - if(Array.isArray(this.answers) && this.answers.length === 1) { + if(Array.isArray(this.answers) && this.answers.length === 1 && this.selectedValues != undefined) { const newSelectedValues = this.selectedValues; newSelectedValues.push(typeof(this.answers[0]) === 'object' ? this.answers[0].Name : this.answers[0]); this.selectedValues = newSelectedValues; diff --git a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.spec.js b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.spec.js index 103aecd4c..6098fc972 100644 --- a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.spec.js +++ b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.spec.js @@ -24,7 +24,7 @@ describe("replace-options-question.vue", () => { test("Answers to display filtered by data from api.", async () => { //Arrange - const { wrapper, cmsContent, replaceOptions } = setupMocks({ dataFromStoreApi: ["Windshield", "FrontDoor"]}); + const { wrapper, cmsContent, replaceOptions } = setupMocks({ dataFromStoreApi: ["Windshield", "FrontDoor"], filterByVehicleCategory}); //Act replaceOptionsQuestion.methods.initializeComponent.call(wrapper.vm, cmsContent, replaceOptions, "car-group"); diff --git a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue index 1a21573d1..558ced3f1 100644 --- a/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue +++ b/src/layouts/vehicle-damage/replace-options-question/replace-options-question.vue @@ -2,7 +2,7 @@
{ export default ({ name: "replaceOptionsQuestion", - updated() { - console.log("ro:modelValue=>" + this.modelValue); - }, data(){ return { questionText: String, @@ -51,7 +48,6 @@ export default ({ this.questionText = cmsContent.QuestionText; this.answersFromCms = cmsContent.Answers; this.replaceOptions = replaceOptions; - console.log("ro:" + this.questionText); }, }, computed: { @@ -60,7 +56,6 @@ export default ({ return this.modelValue; }, set: function(newValue) { - console.log("ro:newVal=>" + newValue); this.$emit("update:modelValue", newValue); } }, diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 1b2ce8ce2..0c46b93a9 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -33,11 +33,6 @@ import baseMixin from "@/mixins/base-mixin"; export default { name: "vehicle-damage", - updated() { - console.log("vd:selectedWindshieldChipCount=>" + this.selectedWindshieldOptions.selectedWindshieldChipCount); - console.log("vd:selectedWindshieldDamageType=>" + this.selectedWindshieldOptions.selectedWindshieldDamageType); - console.log("vd:selectedWindshieldReplaceOptions=>" + this.selectedWindshieldOptions.selectedWindshieldReplaceOptions); - }, async beforeRouteEnter(to, from, next) { // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); diff --git a/src/layouts/vehicle-damage/windshield-damage-type-question/windshield-damage-type-question.vue b/src/layouts/vehicle-damage/windshield-damage-type-question/windshield-damage-type-question.vue deleted file mode 100644 index 686f10de9..000000000 --- a/src/layouts/vehicle-damage/windshield-damage-type-question/windshield-damage-type-question.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - \ No newline at end of file diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.spec.js b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.spec.js new file mode 100644 index 000000000..5811bb1fa --- /dev/null +++ b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.spec.js @@ -0,0 +1,71 @@ +import { shallowMount } from "@vue/test-utils"; +import windshieldChipCountQuestion from "@/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import store from "@/store"; + +jest.mock("@/store", () => { return {}; }, {virtual: true}); + +describe("windshield-chip-count-question.vue", () => { + test("Selected chip count is emitted upon selection.", async () => { + //Arrange + const { wrapper } = setupMocks({ modelValueProp: "Two" }); + const chipCountToSelect = "Two"; + + //Act + wrapper.setValue({ modelValue: chipCountToSelect }); + await wrapper.vm.$nextTick(); + + //Assert + expect(wrapper.emitted()["update:modelValue"][0]).toEqual([{ modelValue: "Two" }]); + }); + }); + + describe("Windshield-chip-count-question.vue", () => { + test("Should display question and answers from api.", async () => { + + //Arrange + const { wrapper, cmsContent } = setupMocks({modelValueProp: "One"}); + + //Act + windshieldChipCountQuestion.methods.initializeComponent.call(wrapper.vm, cmsContent); + + //Assert + expect(wrapper.vm.questionText).toStrictEqual("How many chips are we repairing?"); + expect(wrapper.vm.answersFromCms).toStrictEqual([ { Name: 'One' }, { Name: 'Two' }, { Name: 'Three'} ]); + }); + }); + + function setupMocks({ + modelValueProp = ["Two"], + groupName = "WindshieldChipCountQuestion", + cmsQuestionText = "How many chips are we repairing?", + cmsAnswers = [{Name: "One"}, {Name: "Two"}, {Name: "Three"}], + dataFromStoreApi = [], + }) { + + //Mock store + store.dispatch = jest.fn(() => dataFromStoreApi); + store.getters = { vehicle: {year: 2019, make: 'honda', model: 'civc', style: '2 Door', category: 'CAR'} }; + const mountOptions = getMountOptions({ + store: { + dispatch: store.dispatch, + getters: store.getters, + }, + }); + + //Mock props + mountOptions.propsData = { + modelValue: modelValueProp + }; + + const wrapper = shallowMount(windshieldChipCountQuestion, mountOptions); + + //Mock CMS content + const cmsContent = { + groupName: groupName, + QuestionText: cmsQuestionText, + Answers: cmsAnswers, + }; + const damageOptions = dataFromStoreApi; + return { wrapper, cmsContent, damageOptions }; + } \ No newline at end of file diff --git a/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue index fc3452dcb..41a3b872b 100644 --- a/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue +++ b/src/layouts/vehicle-damage/windshield-options/windshield-chip-count-question/windshield-chip-count-question.vue @@ -1,10 +1,11 @@