From 9b529572f60a380aa98ff26576d289e52fe0d664 Mon Sep 17 00:00:00 2001 From: Leah Schumann Date: Thu, 19 Oct 2023 07:09:00 -0400 Subject: [PATCH 1/3] Fix for defect where the shop list wasn't updating correctly on zip change --- .../service-location/service-location.vue | 25 +++++++++++++------ .../shop-question/shop-question.vue | 2 ++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index d1e818130..3e544eda6 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -441,7 +441,7 @@ export default { // If it already exists, update the price with latest data if (mobileFeeIndex >= 0) { supportingItems[mobileFeeIndex].laborAmount = this.mobileFeePart.laborAmount; - supportingItems[mobileFeeIndex].sellingPrice = this.mobileFeePart.sellingPrice; + supportingItems[mobileFeeIndex].selingPrice = this.mobileFeePart.selingPrice; supportingItems[mobileFeeIndex].kitPrice = this.mobileFeePart.kitPrice; } else { supportingItems.push(this.mobileFeePart); @@ -502,15 +502,26 @@ export default { }, }, watch: { - selectedAppointmentType: { - async handler(newValue) { - if (newValue === "Mobile") { - getShopProviderData(this.zipCode).then(async (result) => { - this.shopProviderData = result.data; + zipCode: { + handler(newValue) { + getShopProviderData(this.zipCode).then(async (result) => { + this.shopProviderData = result.data; + if (this.selectedAppointmentType === "Mobile") { this.selectedProvider = new Provider( this.shopProviderData.mobileProviderNumber ); - }); + } else { + this.selectedProvider = new Provider(); + } + }); + } + }, + selectedAppointmentType: { + handler(newValue) { + if (newValue === "Mobile") { + this.selectedProvider = new Provider( + this.shopProviderData.mobileProviderNumber + ); } else { this.selectedProvider = new Provider(); } diff --git a/src/layouts/service-location/shop-question/shop-question.vue b/src/layouts/service-location/shop-question/shop-question.vue index fa00ab1dc..57702f841 100644 --- a/src/layouts/service-location/shop-question/shop-question.vue +++ b/src/layouts/service-location/shop-question/shop-question.vue @@ -214,6 +214,8 @@ export default { }, shopProviders: { async handler(newValue) { + this.resetAnswers(); + await nextTick(); const selectedShopIndex = this.getSelectedProviderIndex( newValue, From ebad5c6faefac5a5d9afb8b17e86fab5f6162597 Mon Sep 17 00:00:00 2001 From: Leah Schumann Date: Thu, 19 Oct 2023 07:11:02 -0400 Subject: [PATCH 2/3] Fixed the "seling" price thing again --- src/layouts/service-location/service-location.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 3e544eda6..a351bc371 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -441,7 +441,7 @@ export default { // If it already exists, update the price with latest data if (mobileFeeIndex >= 0) { supportingItems[mobileFeeIndex].laborAmount = this.mobileFeePart.laborAmount; - supportingItems[mobileFeeIndex].selingPrice = this.mobileFeePart.selingPrice; + supportingItems[mobileFeeIndex].sellingPrice = this.mobileFeePart.sellingPrice; supportingItems[mobileFeeIndex].kitPrice = this.mobileFeePart.kitPrice; } else { supportingItems.push(this.mobileFeePart); From 6c7b8b98fe49d7c480f7402c2546a06f44e428ce Mon Sep 17 00:00:00 2001 From: Leah Schumann Date: Thu, 19 Oct 2023 07:32:40 -0400 Subject: [PATCH 3/3] Prettifed, Fixed and Updated some unit tests for consistency --- .../service-location/service-location.spec.js | 80 +++++++++---------- .../service-location/service-location.vue | 4 +- 2 files changed, 39 insertions(+), 45 deletions(-) diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index f8e9062b3..55ca775c4 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -7,7 +7,6 @@ import { getMountOptions } from "@/helpers/unit-test-helper"; import store from "@/store"; import baseMixin from "@/mixins/base-mixin"; -import { getServiceabilityDetails } from "@/layouts/service-location/helpers/service-location-helper/service-location-helper"; // Define Mocks jest.mock("@/helpers/cms-content-helper", () => ({ @@ -412,6 +411,9 @@ describe("service-location.vue", () => { const { wrapper } = setupMocks({}); await wrapper.setData({ + shopProviderData: { + mobileProviderNumber: "001820", + }, selectedAppointmentType: "Mobile", providerData: { mobileProviderNumber: "01820" }, }); @@ -464,6 +466,9 @@ describe("service-location.vue", () => { const { wrapper } = setupMocks({}); await wrapper.setData({ + shopProviderData: { + mobileProviderNumber: "001820", + }, selectedAppointmentType: "Mobile", providerData: { mobileProviderNumber: "01820" }, }); @@ -528,6 +533,9 @@ describe("service-location.vue", () => { const { wrapper } = setupMocks({}); await wrapper.setData({ + shopProviderData: { + mobileProviderNumber: "001820", + }, selectedAppointmentType: "Mobile", providerData: { mobileProviderNumber: "01820" }, }); @@ -984,14 +992,13 @@ describe("service-location.vue", () => { describe("should be based only on glass serviceability if recalibration is not defined.", () => { test("Should return true", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1012,14 +1019,13 @@ describe("service-location.vue", () => { test("Should return false", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: false, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1040,14 +1046,13 @@ describe("service-location.vue", () => { test("displayServiceableMobileOnly should be true if mobile is true and inshop is false.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1069,14 +1074,13 @@ describe("service-location.vue", () => { test("displayServiceableMobileOnly should be false if mobile is false", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: false, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1098,14 +1102,13 @@ describe("service-location.vue", () => { test("displayServiceableMobileOnly should be false if inShop is true", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1127,14 +1130,13 @@ describe("service-location.vue", () => { test("requiresInshopRecalibration should not be true if recalibration info is null.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: null, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: null, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1158,14 +1160,13 @@ describe("service-location.vue", () => { describe("should properly display alerts.", () => { test("Should show mobile-only error if only mobile is available.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: false, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: true, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1187,14 +1188,13 @@ describe("service-location.vue", () => { test("Should not show mobile-only error if not mobile-only.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: true, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: true, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1216,14 +1216,13 @@ describe("service-location.vue", () => { test("Should show no-shop error if no shops are available.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: false, isGlassServiceableMobile: false, isRecalibrationServiceableMobile: false, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1245,14 +1244,13 @@ describe("service-location.vue", () => { test("Should not show no-shop error if shops are available.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: true, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: true, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1274,14 +1272,13 @@ describe("service-location.vue", () => { test("Should show inshop-only error if only inshop is available", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: true, isGlassServiceableMobile: false, isRecalibrationServiceableMobile: false, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1303,14 +1300,13 @@ describe("service-location.vue", () => { test("Should not show inshop-only error if not inshop-only", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: false, isRecalibrationServiceableInshop: false, isGlassServiceableMobile: false, isRecalibrationServiceableMobile: false, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1332,14 +1328,13 @@ describe("service-location.vue", () => { test("Should not show inshop-only error if dual or static recalibration, but should show that error instead.", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: true, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: false, - }) - ); + }); const { wrapper } = setupMocks({}); @@ -1363,14 +1358,13 @@ describe("service-location.vue", () => { test("Should not show dual/static recalibration error if not those recalibration types", async () => { // Arrange - getServiceabilityDetails.mockImplementation(() => + mockGetServiceabilityDetails = () => Promise.resolve({ isGlassServiceableInshop: true, isRecalibrationServiceableInshop: true, isGlassServiceableMobile: true, isRecalibrationServiceableMobile: true, - }) - ); + }); const { wrapper } = setupMocks({}); diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index a351bc371..2a17766f9 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -513,8 +513,8 @@ export default { } else { this.selectedProvider = new Provider(); } - }); - } + }); + }, }, selectedAppointmentType: { handler(newValue) {