diff --git a/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js b/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js index 63242df22..8ff7c9b1c 100644 --- a/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js +++ b/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js @@ -59,7 +59,7 @@ afterEach(() => { }); describe("appointment-type-question.vue", () => { - it("Should display all options if both in-shop and mobile are available", async () => { + it("Should display all options if in-shop, mobile, and dropoff are available", async () => { // Arrange/Act const { wrapper } = setupMocks({ mixins: [mockMixin], @@ -67,6 +67,7 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: true, isServiceableMobile: true, + isServiceableDropoff: true, }, mountOptions: { attachTo: document.body, @@ -99,7 +100,7 @@ describe("appointment-type-question.vue", () => { ]); }); - it("Should display only the In-Shop and Drop-Off answers when only in-shop service is available", async () => { + it("Should display only the In-Shop answer when only in-shop service is available", async () => { // Arrange/Act const { wrapper } = setupMocks({ mixins: [mockMixin], @@ -107,6 +108,34 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: true, isServiceableMobile: false, + isServiceableDropoff: false, + }, + mountOptions: { + attachTo: document.body, + }, + }); + + // Assert + expect(wrapper.vm.answersToDisplay).toEqual([ + { + AnswerImageUrl: "", + Name: "Inshop", + SubText: "", + SubWidgetName: "", + Text: "In-shop", + }, + ]); + }); + + it("Should display only the In-Shop and Drop-Off answers when mobile service is not available", async () => { + // Arrange/Act + const { wrapper } = setupMocks({ + mixins: [mockMixin], + props: { + cmsWidgetName: cmsWidgetName, + isServiceableInshop: true, + isServiceableMobile: false, + isServiceableDropoff: true, }, mountOptions: { attachTo: document.body, @@ -140,6 +169,7 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: false, isServiceableMobile: true, + isServiceableDropoff: false, }, mountOptions: { attachTo: document.body, @@ -172,6 +202,7 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: true, isServiceableMobile: true, + isServiceableDropoff: true, }, mountOptions: { attachTo: document.body, @@ -205,6 +236,7 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: false, isServiceableMobile: false, + isServiceableDropoff: false, }, mountOptions: { attachTo: document.body, diff --git a/src/layouts/service-location/appointment-type-question/appointment-type-question.vue b/src/layouts/service-location/appointment-type-question/appointment-type-question.vue index 64bf159ff..4c1c0d031 100644 --- a/src/layouts/service-location/appointment-type-question/appointment-type-question.vue +++ b/src/layouts/service-location/appointment-type-question/appointment-type-question.vue @@ -32,6 +32,7 @@ export default { cmsWidgetName: String, isServiceableMobile: Boolean, isServiceableInshop: Boolean, + isServiceableDropoff: Boolean, mobileFeeApplies: Boolean, }, computed: { @@ -45,7 +46,7 @@ export default { const shouldShowMobile = this.isServiceableMobile; const shouldShowInshop = this.isServiceableInshop; const shouldShowDropoff = - this.isServiceableInshop && !this.$store.getters.damage.isRepair; + this.isServiceableDropoff && !this.$store.getters.damage.isRepair; var answers = this.answersFromCms ? this.answersFromCms.filter((answer) => { @@ -77,6 +78,11 @@ export default { isMobileOnly() { return this.isServiceableMobile && !this.isServiceableInshop; }, + isInshopOnly() { + return ( + this.isServiceableInshop && !this.isServiceableMobile && !this.isServiceableDropoff + ); + }, }, watch: { answersToDisplay: { @@ -86,7 +92,7 @@ export default { newValue.length == 1 && newValue.findIndex((answer) => answer.Name == "Mobile") != -1 ) { - this.selectedValues = "Mobile"; + this.selectedValue = "Mobile"; } }, immediate: true, @@ -94,7 +100,14 @@ export default { isMobileOnly: { handler(newValue) { if (newValue) { - this.selectedValues = "Mobile"; + this.selectedValue = "Mobile"; + } + }, + }, + isInshopOnly: { + handler(newValue) { + if (newValue) { + this.selectedValue = "Inshop"; } }, }, diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index a85a5bd17..7b3163c87 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -76,6 +76,7 @@ v-show="isAppointmentTypeDisplayed" :isServiceableMobile="isServiceableMobile" :isServiceableInshop="isServiceableInshop" + :isServiceableDropoff="isServiceableDropoff" :isDisplayed="isAppointmentTypeDisplayed" :mobileFeeApplies="mobileFeeApplies" ref="appointmentTypeQuestion" @@ -196,6 +197,8 @@ export default { isVehicleProtected: this.getIsVehicleProtectedFromStore(), isGlassServiceableInshop: null, isRecalibrationServiceableInshop: null, + isGlassServiceableDropoff: null, + isRecalibrationServiceableDropoff: null, isGlassServiceableMobile: null, isRecalibrationServiceableMobile: null, selectedAppointmentType: this.getSelectedAppointmentType(), @@ -354,6 +357,13 @@ export default { return this.isGlassServiceableInshop; } }, + isServiceableDropoff() { + if (this.isRecalibrationServiceableDropoff !== null) { + return this.isGlassServiceableDropoff && this.isRecalibrationServiceableDropoff; + } else { + return this.isGlassServiceableDropoff; + } + }, isShopQuestionDisplayed() { return ( this.selectedAppointmentType === "Inshop" || @@ -559,6 +569,9 @@ export default { this.isGlassServiceableInshop = serviceabilityDetails.isGlassServiceableInshop; this.isRecalibrationServiceableInshop = serviceabilityDetails.isRecalibrationServiceableInshop; + this.isGlassServiceableDropoff = serviceabilityDetails.isGlassServiceableDropoff; + this.isRecalibrationServiceableDropoff = + serviceabilityDetails.isRecalibrationServiceableDropoff; this.isGlassServiceableMobile = serviceabilityDetails.isGlassServiceableMobile; this.isRecalibrationServiceableMobile = serviceabilityDetails.isRecalibrationServiceableMobile;