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()
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
},
};