-
@@ -59,6 +58,7 @@ import store from "@/store";
import { flushSaveSessionQueue } from "@/helpers/heritage-integration/order-helper";
import { errorMessages } from "@/constants/error-messages";
import { required, regex } from "@/helpers/validation-rules";
+import { debugLog } from "@/helpers/debug-log-helper";
defineRule("insurance-company-required", required(errorMessages.INSURANCE_COMPANY_REQUIRED));
@@ -117,13 +117,18 @@ export default {
data() {
return {
- parentAccountNumber: this.parentAccountNumberFromStore(),
+ selectedAccount: {
+ parentAccountNumber: this.parentAccountNumberFromStore(),
+ accountName: this.accountNameFromStore(),
+ isClaimAndCoverage: this.isClaimAndCoverageFromStore(),
+ canScheduleOnline: this.canScheduleOnlineFromStore(),
+ },
originalList: [],
};
},
computed: {
isParentAccountNumber() {
- return !!this.parentAccountNumber;
+ return !!this.selectedAccount.parentAccountNumber;
},
payWithCashButtonCopy() {
return this.getCmsContent("PayWithCashWidget", "Text");
@@ -142,6 +147,15 @@ export default {
: "";
return accountNumber;
},
+ accountNameFromStore() {
+ return store.getters.order?.payment?.accountName;
+ },
+ isClaimAndCoverageFromStore() {
+ return store.getters.order?.payment?.isClaimAndCoverage;
+ },
+ canScheduleOnlineFromStore() {
+ return store.getters.order?.payment?.canScheduleOnline;
+ },
arePagePrerequisitesValid() {
return store.getters.order.payment.isInsurance === true;
},
@@ -168,7 +182,25 @@ export default {
await this.dispatchStoreAction(
this.storeActions.SAVE_PARENT_ACCOUNT_NUMBER,
- this.parentAccountNumber.toString(),
+ this.selectedAccount.parentAccountNumber.toString(),
+ false
+ );
+
+ await this.dispatchStoreAction(
+ this.storeActions.SAVE_ACCOUNT_NAME,
+ this.selectedAccount.accountName,
+ false
+ );
+
+ await this.dispatchStoreAction(
+ this.storeActions.SAVE_IS_CLAIM_AND_COVERAGE,
+ this.selectedAccount.isClaimAndCoverage,
+ false
+ );
+
+ await this.dispatchStoreAction(
+ this.storeActions.SAVE_CAN_SCHEDULE_ONLINE,
+ this.selectedAccount.canScheduleOnline,
false
);
@@ -187,6 +219,75 @@ export default {
//Reload page when navigate with browser back button
window.addEventListener("pageshow", this.handlePageShow);
+ //TODO: Where to send if can schedule online is false?
+ if (!this.selectedAccount.canScheduleOnline) {
+ debugLog(
+ `--- ${this.selectedAccount.parentAccountNumber} Can schedule online is false, sending to vue app Insurance Details page ---`
+ );
+ }
+
+ // hasClaimAndCoverage in experiment-mixin.js checks if the parent account number is in the experiment settings.
+ const isClaimAndCoverageExperimentActive = this.hasClaimAndCoverage(
+ this.selectedAccount.parentAccountNumber
+ );
+
+ // C&C experiment active for this parent account number, send to vue app Policy Info page
+ if (isClaimAndCoverageExperimentActive) {
+ debugLog(
+ `--- ${this.selectedAccount.parentAccountNumber} C&C experiment active for this parent account number, sending to vue app Policy Info page ---`
+ );
+ this.$router.navigateWithSaving(
+ this.navigationScenarios.CLICKED_FORWARD_POLICY_INFO,
+ this.pageName
+ );
+ return;
+ }
+
+ // C&C experiment setting is false, but is a C&C client, send to heritage
+ if (this.selectedAccount.isClaimAndCoverage) {
+ debugLog(
+ `--- ${this.selectedAccount.parentAccountNumber} C&C experiment setting is false, but is a C&C client, sending to heritage ---`
+ );
+ navigateToHeritageFunnel({
+ shouldSaveSession: true,
+ pageNameToLog: this.pageName,
+ });
+ return;
+ }
+
+ // Non integrated experiment setting is true, send to new insurance details page
+ if (
+ this.hasSettingEqualTo(
+ experimentSettings.ENABLE_NON_CLAIM_AND_COVERAGE_FLOW,
+ "true"
+ )
+ ) {
+ debugLog(
+ `--- ${this.selectedAccount.parentAccountNumber} Non integrated experiment setting is true, sending to vue app Insurance Details page ---`
+ );
+ this.$router.navigateWithSaving(
+ this.navigationScenarios.CLICKED_FORWARD_NON_CLAIM_AND_COVERAGE,
+ this.pageName
+ );
+ return;
+ }
+
+ // Non integrated experiment setting is false, but a parent account is NON_CLAIM_AND_COVERAGE_TEST_PARENT_ACCOUNT experiment
+ // contains a specific parent account number you wish to send to the veu app insurance details page
+ var nonIntegratedTestParentAccount = this.getSettingValue(
+ experimentSettings.NON_CLAIM_AND_COVERAGE_TEST_PARENT_ACCOUNT
+ );
+ if (nonIntegratedTestParentAccount === this.selectedAccount.parentAccountNumber) {
+ debugLog(
+ `--- ${this.selectedAccount.parentAccountNumber} Non integrated experiment setting is false, but a parent account is NON_CLAIM_AND_COVERAGE_TEST_PARENT_ACCOUNT experiment contains a specific parent account number, sending to vue app Insurance Details page ---`
+ );
+ this.$router.navigateWithSaving(
+ this.navigationScenarios.CLICKED_FORWARD_NON_CLAIM_AND_COVERAGE,
+ this.pageName
+ );
+ return;
+ }
+
navigateToHeritageFunnel({
shouldSaveSession: true,
pageNameToLog: "insurance-company",
diff --git a/src/layouts/insurance-details/insurance-details.vue b/src/layouts/insurance-details/insurance-details.vue
new file mode 100644
index 000000000..67670b9cc
--- /dev/null
+++ b/src/layouts/insurance-details/insurance-details.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
diff --git a/src/layouts/payment-adyen/payment-adyen.spec.js b/src/layouts/payment-adyen/payment-adyen.spec.js
index 1a506b860..26d3a6aec 100644
--- a/src/layouts/payment-adyen/payment-adyen.spec.js
+++ b/src/layouts/payment-adyen/payment-adyen.spec.js
@@ -187,118 +187,6 @@ describe("payment-adyen.vue", () => {
expect(result).toBe(true);
});
});
-
- describe("splitStreetAddress", () => {
- const setInShopStreet = (streetAddress) => {
- store.getters.order.serviceLocation.appointmentType = AppointmentTypeStrings.IN_SHOP;
- store.getters.order.serviceLocation.provider.address.streetAddress = streetAddress;
- };
-
- test("splits typical address into first token as number and remainder as street", () => {
- setInShopStreet("123 West Elm St");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "123",
- street: "West Elm St",
- });
- });
-
- test("two tokens: number and single-word street", () => {
- setInShopStreet("456 Oak");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "456",
- street: "Oak",
- });
- });
-
- test("single token with no spaces: full string in number, empty street", () => {
- setInShopStreet("123OakStreet");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "123OakStreet",
- street: "",
- });
- });
-
- test("collapses multiple spaces between words", () => {
- setInShopStreet("123 West Elm St");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "123",
- street: "West Elm St",
- });
- });
-
- test("trims leading and trailing whitespace on full address", () => {
- setInShopStreet(" 99 Maple Ave ");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "99",
- street: "Maple Ave",
- });
- });
-
- test("empty string yields empty number and street", () => {
- setInShopStreet("");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "",
- street: "",
- });
- });
-
- test("whitespace-only address yields empty number and street", () => {
- setInShopStreet(" \t ");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "",
- street: "",
- });
- });
-
- test("null address yields empty number and street", () => {
- setInShopStreet(null);
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "",
- street: "",
- });
- });
-
- test("uses mobile service address when appointment is mobile", () => {
- store.getters.order.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
- store.getters.order.serviceLocation.address = "700 Broadway Blvd";
- store.getters.order.serviceLocation.city = "Columbus";
- store.getters.order.serviceLocation.state = "OH";
- store.getters.order.serviceLocation.zipCode = "43235";
-
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "700",
- street: "Broadway Blvd",
- });
- });
-
- test("splits on tabs and other whitespace runs", () => {
- setInShopStreet("10\tPine\tLane");
- const wrapper = setupMocks({});
-
- expect(wrapper.vm.splitStreetAddress).toEqual({
- number: "10",
- street: "Pine Lane",
- });
- });
- });
});
function setupMocks({ customMountOptions } = {}) {
diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue
index aa75487da..5b3a663ea 100644
--- a/src/layouts/payment-adyen/payment-adyen.vue
+++ b/src/layouts/payment-adyen/payment-adyen.vue
@@ -455,8 +455,8 @@ export default {
zipCodeCtu: this.locationInfo.zipCodeCtu,
amount: this.adyenPriceTotal,
city: this.locationInfo.city,
- houseNumberOrName: this.splitStreetAddress.number,
- street: this.splitStreetAddress.street,
+ street: this.locationInfo.address ?? "",
+ houseNumberOrName: this.locationInfo.address2 ?? "",
zipCode: this.locationInfo.zipCode,
stateOrProvince: this.locationInfo.state,
returnUrl: applicationConfig.PIA_ADYEN_RETURN_URL,
@@ -515,18 +515,6 @@ export default {
}
},
- splitStreetAddress() {
- const address = (this.locationInfo?.address ?? "").trim();
- const tokens = address.length ? address.split(/\s+/) : [""];
- const number = tokens[0] ?? "";
- const street = tokens.length > 1 ? tokens.slice(1).join(" ") : "";
-
- return {
- number,
- street,
- };
- },
-
sourceSystem() {
return "FMG-2.0";
},
diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue
index e5b08bdbc..da49aa039 100644
--- a/src/layouts/payment-method/payment-method.vue
+++ b/src/layouts/payment-method/payment-method.vue
@@ -226,8 +226,8 @@ export default {
const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_WIPERS,
{
- serviceZipCode: store.getters.order.serviceLocation.zipCode,
carId: store.getters.vehicle.carId,
+ accountNumber: store.getters.order.payment?.parentAccountNumber,
},
"payment-method"
);
diff --git a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
index 4cf6dae0b..51827a30d 100644
--- a/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
+++ b/src/layouts/payment-method/review-dropdown/review-sections/service-package-review/service-package-review.vue
@@ -35,8 +35,8 @@ export default {
const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_WIPERS,
{
- serviceZipCode: store.getters.order.serviceLocation.zipCode,
carId: store.getters.vehicle.carId,
+ accountNumber: store.getters.order.payment?.parentAccountNumber,
},
"review"
);
diff --git a/src/layouts/policy-driver/policy-driver.spec.js b/src/layouts/policy-driver/policy-driver.spec.js
new file mode 100644
index 000000000..5680f6f2f
--- /dev/null
+++ b/src/layouts/policy-driver/policy-driver.spec.js
@@ -0,0 +1,70 @@
+import policyDriver from "@/layouts/policy-driver/policy-driver.vue";
+import { shallowMount } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { settleAllPromises } from "@/helpers/layout-helper";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+describe("policy-driver.vue", () => {
+ describe("component rendering", () => {
+ test("renders funnelHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true);
+ });
+
+ test("renders funnelSubHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true);
+ });
+
+ test("renders navbar component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true);
+ });
+
+ test("renders Form component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true);
+ });
+ });
+
+ describe("methods", () => {
+ test("arePagePrerequisitesValid returns true", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true);
+ });
+ });
+});
+
+function setupMocks() {
+ const mockCmsContent = {
+ FunnelHeaderWidget: { Text: "Header" },
+ FunnelSubHeaderWidget: { Text: "Subheader" },
+ FunnelFooterWidget: { Text: "Footer" },
+ };
+
+ fetchCmsContentForPage.mockResolvedValue(mockCmsContent);
+ settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent });
+
+ const mountOptions = getMountOptions({
+ route: { name: "policy-driver", query: {}, params: {} },
+ router: {
+ navigate: jest.fn(),
+ navigateWithSaving: jest.fn(),
+ navigateWithoutSaving: jest.fn(),
+ },
+ });
+
+ const wrapper = shallowMount(policyDriver, mountOptions);
+
+ return { wrapper };
+}
diff --git a/src/layouts/policy-driver/policy-driver.vue b/src/layouts/policy-driver/policy-driver.vue
new file mode 100644
index 000000000..4b3b5f171
--- /dev/null
+++ b/src/layouts/policy-driver/policy-driver.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/src/layouts/policy-info-submitted/policy-info-submitted.spec.js b/src/layouts/policy-info-submitted/policy-info-submitted.spec.js
new file mode 100644
index 000000000..a647c2681
--- /dev/null
+++ b/src/layouts/policy-info-submitted/policy-info-submitted.spec.js
@@ -0,0 +1,70 @@
+import policyInfoSubmitted from "@/layouts/policy-info-submitted/policy-info-submitted.vue";
+import { shallowMount } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { settleAllPromises } from "@/helpers/layout-helper";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+describe("policy-info-submitted.vue", () => {
+ describe("component rendering", () => {
+ test("renders funnelHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true);
+ });
+
+ test("renders funnelSubHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true);
+ });
+
+ test("renders navbar component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true);
+ });
+
+ test("renders Form component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true);
+ });
+ });
+
+ describe("methods", () => {
+ test("arePagePrerequisitesValid returns true", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true);
+ });
+ });
+});
+
+function setupMocks() {
+ const mockCmsContent = {
+ FunnelHeaderWidget: { Text: "Header" },
+ FunnelSubHeaderWidget: { Text: "Subheader" },
+ FunnelFooterWidget: { Text: "Footer" },
+ };
+
+ fetchCmsContentForPage.mockResolvedValue(mockCmsContent);
+ settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent });
+
+ const mountOptions = getMountOptions({
+ route: { name: "policy-vehicle", query: {}, params: {} },
+ router: {
+ navigate: jest.fn(),
+ navigateWithSaving: jest.fn(),
+ navigateWithoutSaving: jest.fn(),
+ },
+ });
+
+ const wrapper = shallowMount(policyInfoSubmitted, mountOptions);
+
+ return { wrapper };
+}
diff --git a/src/layouts/policy-info-submitted/policy-info-submitted.vue b/src/layouts/policy-info-submitted/policy-info-submitted.vue
new file mode 100644
index 000000000..fa7a623c0
--- /dev/null
+++ b/src/layouts/policy-info-submitted/policy-info-submitted.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/src/layouts/policy-info/policy-info.vue b/src/layouts/policy-info/policy-info.vue
index d1a9b80d2..ceef462a0 100644
--- a/src/layouts/policy-info/policy-info.vue
+++ b/src/layouts/policy-info/policy-info.vue
@@ -58,11 +58,17 @@ export default {
},
methods: {
- async backButtonAction() {
- // Stub, for navigating back via nav-bar.
+ backButtonAction() {
+ this.$router.navigateWithoutSaving(
+ this.navigationScenarios.CLICKED_BACK,
+ this.pageName
+ );
},
async forwardButtonAction() {
- // Stub, for navigating forward via nav-bar
+ this.$router.navigateWithSaving(
+ this.navigationScenarios.CLICKED_FORWARD,
+ this.pageName
+ );
},
arePagePrerequisitesValid() {
return true;
diff --git a/src/layouts/policy-vehicle/policy-vehicle.spec.js b/src/layouts/policy-vehicle/policy-vehicle.spec.js
new file mode 100644
index 000000000..1fe1a5559
--- /dev/null
+++ b/src/layouts/policy-vehicle/policy-vehicle.spec.js
@@ -0,0 +1,70 @@
+import policyVehicle from "@/layouts/policy-vehicle/policy-vehicle.vue";
+import { shallowMount } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { settleAllPromises } from "@/helpers/layout-helper";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+describe("policy-vehicle.vue", () => {
+ describe("component rendering", () => {
+ test("renders funnelHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true);
+ });
+
+ test("renders funnelSubHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true);
+ });
+
+ test("renders navbar component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true);
+ });
+
+ test("renders Form component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true);
+ });
+ });
+
+ describe("methods", () => {
+ test("arePagePrerequisitesValid returns true", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true);
+ });
+ });
+});
+
+function setupMocks() {
+ const mockCmsContent = {
+ FunnelHeaderWidget: { Text: "Header" },
+ FunnelSubHeaderWidget: { Text: "Subheader" },
+ FunnelFooterWidget: { Text: "Footer" },
+ };
+
+ fetchCmsContentForPage.mockResolvedValue(mockCmsContent);
+ settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent });
+
+ const mountOptions = getMountOptions({
+ route: { name: "policy-vehicle", query: {}, params: {} },
+ router: {
+ navigate: jest.fn(),
+ navigateWithSaving: jest.fn(),
+ navigateWithoutSaving: jest.fn(),
+ },
+ });
+
+ const wrapper = shallowMount(policyVehicle, mountOptions);
+
+ return { wrapper };
+}
diff --git a/src/layouts/policy-vehicle/policy-vehicle.vue b/src/layouts/policy-vehicle/policy-vehicle.vue
new file mode 100644
index 000000000..954b04bc3
--- /dev/null
+++ b/src/layouts/policy-vehicle/policy-vehicle.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue
index 106c04bfa..d9f238733 100644
--- a/src/layouts/quote/quote.vue
+++ b/src/layouts/quote/quote.vue
@@ -217,8 +217,10 @@ export default {
const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_WIPERS,
{
- serviceZipCode: store.getters.order.serviceLocation.zipCode,
carId: store.getters.vehicle.carId,
+ accountNumber:
+ store.getters.order.payment?.parentAccountNumber ??
+ applicationConfig.CASH_PARENT_ACCOUNT_NUMBER,
},
"quote"
);
@@ -792,6 +794,13 @@ export default {
applicationConfig.CASH_DEFAULT_BILL_TO_ACCOUNT_NUMBER,
false
);
+ this.dispatchStoreAction(
+ this.storeActions.SAVE_IS_CLAIM_AND_COVERAGE,
+ false,
+ false
+ );
+ this.dispatchStoreAction(this.storeActions.SAVE_CAN_SCHEDULE_ONLINE, false, false);
+ this.dispatchStoreAction(this.storeActions.SAVE_ACCOUNT_NAME, null, false);
} else {
baseMixin.methods.dispatchStoreAction(
storeActions.SAVE_PARENT_ACCOUNT_NUMBER,
diff --git a/src/layouts/recalibration-info/recalibration-info.spec.js b/src/layouts/recalibration-info/recalibration-info.spec.js
new file mode 100644
index 000000000..50667e1fa
--- /dev/null
+++ b/src/layouts/recalibration-info/recalibration-info.spec.js
@@ -0,0 +1,70 @@
+import recalibrationInfo from "@/layouts/recalibration-info/recalibration-info.vue";
+import { shallowMount } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { settleAllPromises } from "@/helpers/layout-helper";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+describe("recalibration-info.vue", () => {
+ describe("component rendering", () => {
+ test("renders funnelHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true);
+ });
+
+ test("renders funnelSubHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true);
+ });
+
+ test("renders navbar component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true);
+ });
+
+ test("renders Form component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true);
+ });
+ });
+
+ describe("methods", () => {
+ test("arePagePrerequisitesValid returns true", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true);
+ });
+ });
+});
+
+function setupMocks() {
+ const mockCmsContent = {
+ FunnelHeaderWidget: { Text: "Header" },
+ FunnelSubHeaderWidget: { Text: "Subheader" },
+ FunnelFooterWidget: { Text: "Footer" },
+ };
+
+ fetchCmsContentForPage.mockResolvedValue(mockCmsContent);
+ settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent });
+
+ const mountOptions = getMountOptions({
+ route: { name: "policy-vehicle", query: {}, params: {} },
+ router: {
+ navigate: jest.fn(),
+ navigateWithSaving: jest.fn(),
+ navigateWithoutSaving: jest.fn(),
+ },
+ });
+
+ const wrapper = shallowMount(recalibrationInfo, mountOptions);
+
+ return { wrapper };
+}
diff --git a/src/layouts/recalibration-info/recalibration-info.vue b/src/layouts/recalibration-info/recalibration-info.vue
new file mode 100644
index 000000000..828ba080a
--- /dev/null
+++ b/src/layouts/recalibration-info/recalibration-info.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/src/layouts/verify-details/verify-details.spec.js b/src/layouts/verify-details/verify-details.spec.js
new file mode 100644
index 000000000..ec541ecf9
--- /dev/null
+++ b/src/layouts/verify-details/verify-details.spec.js
@@ -0,0 +1,70 @@
+import verifyDetails from "@/layouts/verify-details/verify-details.vue";
+import { shallowMount } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { settleAllPromises } from "@/helpers/layout-helper";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+describe("verify-details.vue", () => {
+ describe("component rendering", () => {
+ test("renders funnelHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true);
+ });
+
+ test("renders funnelSubHeader component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true);
+ });
+
+ test("renders navbar component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true);
+ });
+
+ test("renders Form component", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true);
+ });
+ });
+
+ describe("methods", () => {
+ test("arePagePrerequisitesValid returns true", () => {
+ const { wrapper } = setupMocks();
+ expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true);
+ });
+ });
+});
+
+function setupMocks() {
+ const mockCmsContent = {
+ FunnelHeaderWidget: { Text: "Header" },
+ FunnelSubHeaderWidget: { Text: "Subheader" },
+ FunnelFooterWidget: { Text: "Footer" },
+ };
+
+ fetchCmsContentForPage.mockResolvedValue(mockCmsContent);
+ settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent });
+
+ const mountOptions = getMountOptions({
+ route: { name: "policy-vehicle", query: {}, params: {} },
+ router: {
+ navigate: jest.fn(),
+ navigateWithSaving: jest.fn(),
+ navigateWithoutSaving: jest.fn(),
+ },
+ });
+
+ const wrapper = shallowMount(verifyDetails, mountOptions);
+
+ return { wrapper };
+}
diff --git a/src/layouts/verify-details/verify-details.vue b/src/layouts/verify-details/verify-details.vue
new file mode 100644
index 000000000..e0b889cb2
--- /dev/null
+++ b/src/layouts/verify-details/verify-details.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js
index 474945a54..9439f0506 100644
--- a/src/mixins/experiment-mixin.js
+++ b/src/mixins/experiment-mixin.js
@@ -1,5 +1,6 @@
import store from "@/store";
import * as experimentHelper from "../helpers/experiment-helper";
+import { experimentSettings } from "@/constants/experiments";
/*
This is a wrapper around experiment-helper.js methods that allows an override
@@ -32,5 +33,24 @@ export default {
experimentHelper.getExperimentSettingsFromExperimentList(experimentList);
return experimentHelper.getSettingValue(settingName, experimentSettings);
},
+
+ // Looks for an experiment setting that has a value that matches the passed in parent account number.
+ // Settings named NON_CLAIM_AND_COVERAGE_TEST_PARENT_ACCOUNT are excluded from the match.
+ hasClaimAndCoverage(
+ parentAccountNumber,
+ experimentList = store.getters.applicationUser.experiments
+ ) {
+ const parentNum = String(parentAccountNumber);
+ return experimentList.some(
+ (experiment) =>
+ experiment.settings &&
+ Object.entries(experiment.settings).some(
+ ([name, value]) =>
+ name !==
+ experimentSettings.NON_CLAIM_AND_COVERAGE_TEST_PARENT_ACCOUNT &&
+ value === parentNum
+ )
+ );
+ },
},
};
diff --git a/src/router/constants/auto-route-table.js b/src/router/constants/auto-route-table.js
index 0bf3503b9..ea1dd69e0 100644
--- a/src/router/constants/auto-route-table.js
+++ b/src/router/constants/auto-route-table.js
@@ -6,7 +6,6 @@ export const autoRouteTable = [
routeData.MOLDING_QUESTIONS,
routeData.VEHICLE_PARTS,
routeData.PART_QUESTIONS,
- routeData.VIN_LOOKUP,
routeData.ESTIMATE,
routeData.VEHICLE_DAMAGE,
routeData.VEHICLE,
diff --git a/src/router/constants/navigation-scenarios.js b/src/router/constants/navigation-scenarios.js
index 21bcc46f3..fef66ddbb 100644
--- a/src/router/constants/navigation-scenarios.js
+++ b/src/router/constants/navigation-scenarios.js
@@ -39,6 +39,8 @@ const navigationScenarios = {
CLICKED_FORWARD_WITH_MOLDING_QUESTIONS: "CLICKED_FORWARD_WITH_MOLDING_QUESTIONS",
CLICKED_FORWARD_WITH_CAPABILITY_QUESTIONS: "CLICKED_FORWARD_WITH_CAPABILITY_QUESTIONS",
CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS: "CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS",
+ CLICKED_BACK_NON_CLAIM_AND_COVERAGE: "CLICKED_BACK_NON_CLAIM_AND_COVERAGE",
+ CLICKED_BACK_RECALIBRATION_INFO: "CLICKED_BACK_RECALIBRATION_INFO",
CLICKED_BACK_WITH_PART_QUESTIONS: "CLICKED_BACK_WITH_PART_QUESTIONS",
CLICKED_BACK_WITH_MULTIPLE_PARTS_TO_CHOOSE: "CLICKED_BACK_WITH_MULTIPLE_PARTS_TO_CHOOSE",
CLICKED_BACK_WITH_MOLDING_QUESTIONS: "CLICKED_BACK_WITH_MOLDING_QUESTIONS",
@@ -48,6 +50,8 @@ const navigationScenarios = {
// Insurance-Company
CLICKED_PAY_ON_MY_OWN: "CLICKED_PAY_ON_MY_OWN",
+ CLICKED_FORWARD_POLICY_INFO: "CLICKED_FORWARD_POLICY_INFO",
+ CLICKED_FORWARD_NON_CLAIM_AND_COVERAGE: "CLICKED_FORWARD_NON_CLAIM_AND_COVERAGE",
//Service-Location
CLICKED_FORWARD_WITH_MOBILE_SERVICE: "CLICKED_FORWARD_WITH_MOBILE_SERVICE",
diff --git a/src/router/constants/routes.js b/src/router/constants/routes.js
index 47c37bb55..fc54025ef 100644
--- a/src/router/constants/routes.js
+++ b/src/router/constants/routes.js
@@ -55,6 +55,42 @@ export const routeData = {
name: "policy-info",
path: "/policy-info",
},
+ INSURANCE_DETAILS: {
+ name: "insurance-details",
+ path: "/insurance-details",
+ },
+ DUPLICATE_CHECK: {
+ name: "duplicate-check",
+ path: "/duplicate-check",
+ },
+ POLICY_VEHICLE: {
+ name: "policy-vehicle",
+ path: "/policy-vehicle",
+ },
+ POLICY_DRIVER: {
+ name: "policy-driver",
+ path: "/policy-driver",
+ },
+ ENDORSEMENTS: {
+ name: "endorsements",
+ path: "/endorsements",
+ },
+ POLICY_INFO_SUBMITTED: {
+ name: "policy-info-submitted",
+ path: "/policy-info-submitted",
+ },
+ RECALIBRATION_INFO: {
+ name: "recalibration-info",
+ path: "/recalibration-info",
+ },
+ COVERAGE_STATEMENT: {
+ name: "coverage-statement",
+ path: "/coverage-statement",
+ },
+ VERIFY_DETAILS: {
+ name: "verify-details",
+ path: "/verify-details",
+ },
INSURANCE_COMPANY: {
name: "insurance-company",
path: "/insurance-company",
diff --git a/src/router/constants/routing-table.js b/src/router/constants/routing-table.js
index a7be5f387..77876a096 100644
--- a/src/router/constants/routing-table.js
+++ b/src/router/constants/routing-table.js
@@ -431,7 +431,141 @@ const routingTable = function () {
},
{
pageName: routeData.POLICY_INFO.name,
- maps: [],
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.INSURANCE_COMPANY,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.DUPLICATE_CHECK,
+ },
+ ],
+ },
+ {
+ pageName: routeData.INSURANCE_DETAILS.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.INSURANCE_COMPANY,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.COVERAGE_STATEMENT,
+ },
+ ],
+ },
+ {
+ pageName: routeData.DUPLICATE_CHECK.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.POLICY_INFO,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.POLICY_VEHICLE,
+ },
+ ],
+ },
+ {
+ pageName: routeData.POLICY_VEHICLE.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.DUPLICATE_CHECK,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.POLICY_DRIVER,
+ },
+ ],
+ },
+ {
+ pageName: routeData.POLICY_DRIVER.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.POLICY_VEHICLE,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.ENDORSEMENTS,
+ },
+ ],
+ },
+ {
+ pageName: routeData.ENDORSEMENTS.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.POLICY_DRIVER,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.POLICY_INFO_SUBMITTED,
+ },
+ ],
+ },
+ {
+ pageName: routeData.POLICY_INFO_SUBMITTED.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.ENDORSEMENTS,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.RECALIBRATION_INFO,
+ },
+ ],
+ },
+ {
+ pageName: routeData.RECALIBRATION_INFO.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.POLICY_INFO_SUBMITTED,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.COVERAGE_STATEMENT,
+ },
+ ],
+ },
+ {
+ pageName: routeData.COVERAGE_STATEMENT.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.POLICY_INFO_SUBMITTED,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_BACK_RECALIBRATION_INFO,
+ destinationPageData: routeData.RECALIBRATION_INFO,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_BACK_NON_CLAIM_AND_COVERAGE,
+ destinationPageData: routeData.INSURANCE_DETAILS,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.SCHEDULE,
+ },
+ ],
+ },
+ {
+ pageName: routeData.VERIFY_DETAILS.name,
+ maps: [
+ {
+ scenario: navigationScenarios.CLICKED_BACK,
+ destinationPageData: routeData.DUPLICATE_CHECK,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD,
+ destinationPageData: routeData.POLICY_INFO_SUBMITTED,
+ },
+ ],
},
{
pageName: routeData.INSURANCE_COMPANY.name,
@@ -451,6 +585,14 @@ const routingTable = function () {
scenario: navigationScenarios.CLICKED_FORWARD,
destinationPageData: routeData.INSURANCE_DETAILS,
},
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD_POLICY_INFO,
+ destinationPageData: routeData.POLICY_INFO,
+ },
+ {
+ scenario: navigationScenarios.CLICKED_FORWARD_NON_CLAIM_AND_COVERAGE,
+ destinationPageData: routeData.INSURANCE_DETAILS,
+ },
],
},
// TODO: REMOVE THIS COMMENT AND BELOW, ONCE CASH-803 (SERVICE-LOCATION AND SCHEDULE PAGE COMBINATION) HAS BEEN VETTED
diff --git a/src/router/methods/routes.js b/src/router/methods/routes.js
index 521ba43a1..88cc17f94 100644
--- a/src/router/methods/routes.js
+++ b/src/router/methods/routes.js
@@ -42,7 +42,15 @@ export const routes = [
createRoute(routeData.RETURN_USER),
createRoute(routeData.MOBILE_DETAILS),
createRoute(routeData.POLICY_INFO),
-
+ createRoute(routeData.INSURANCE_DETAILS),
+ createRoute(routeData.DUPLICATE_CHECK),
+ createRoute(routeData.POLICY_VEHICLE),
+ createRoute(routeData.POLICY_DRIVER),
+ createRoute(routeData.ENDORSEMENTS),
+ createRoute(routeData.POLICY_INFO_SUBMITTED),
+ createRoute(routeData.RECALIBRATION_INFO),
+ createRoute(routeData.COVERAGE_STATEMENT),
+ createRoute(routeData.VERIFY_DETAILS),
// Virtual pages (resolve to a non-virtual page.)
createVirtualRoute(routeData.LANDING, landingBeforeEnter),
createVirtualRoute(routeData.HERITAGE, heritageBeforeEnter),
diff --git a/src/store/index.js b/src/store/index.js
index da45f3a61..a58200a96 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -142,6 +142,9 @@ const getDefaultState = () => {
coverageVerificationType: null,
},
parentAccountNumber: 0,
+ accountName: null,
+ isClaimAndCoverage: false,
+ canScheduleOnline: false,
billToAccountNumber: null,
isPia: null,
piaType: null,
@@ -171,6 +174,11 @@ const getDefaultState = () => {
additionalAuthFlag: null,
isNoComp: false,
insuranceCompanyName: null,
+ streetAddress: null,
+ apartment: null,
+ city: null,
+ state: null,
+ zipCode: null,
},
schedule: {
date: null,
@@ -328,6 +336,31 @@ export const mutations = {
updateParentAcctNumber(state, parentAcctNumber) {
state.order.payment.parentAccountNumber = parentAcctNumber;
},
+ updateAccountName(state, accountName) {
+ state.order.payment.accountName = accountName;
+ state.order.policy.insuranceCompanyName = accountName;
+ },
+ updateStreetAddress(state, streetAddress) {
+ state.order.policy.streetAddress = streetAddress;
+ },
+ updateApartment(state, apartment) {
+ state.order.policy.apartment = apartment;
+ },
+ updateCity(state, city) {
+ state.order.policy.city = city;
+ },
+ updateState(state, stateValue) {
+ state.order.policy.state = stateValue;
+ },
+ updateZipCode(state, zipCode) {
+ state.order.policy.zipCode = zipCode;
+ },
+ updateIsClaimAndCoverage(state, isClaimAndCoverage) {
+ state.order.payment.isClaimAndCoverage = isClaimAndCoverage;
+ },
+ updateCanScheduleOnline(state, canScheduleOnline) {
+ state.order.payment.canScheduleOnline = canScheduleOnline;
+ },
updateBillToAcctNumber(state, billToAcctNumber) {
state.order.payment.billToAccountNumber = billToAcctNumber;
},
@@ -482,6 +515,22 @@ export const mutations = {
state.order.customer.isSmsOptIn = customerDetails.isSmsOptIn;
}
},
+ updateInsuranceDetails(state, insuranceDetails) {
+ if (insuranceDetails) {
+ state.order.policy.policyNumber = insuranceDetails.policyNumber;
+ state.order.policy.streetAddress = insuranceDetails.streetAddress;
+ state.order.policy.apartment = insuranceDetails.apartment;
+ state.order.policy.city = insuranceDetails.city;
+ state.order.policy.state = insuranceDetails.state;
+ state.order.policy.zipCode = insuranceDetails.zipCode;
+ }
+ },
+ updateDamageDetails(state, damageDetails) {
+ if (damageDetails) {
+ state.order.damage.dateOfLoss = damageDetails.dateOfLoss;
+ state.order.damage.damageCause = damageDetails.damageCause;
+ }
+ },
// applicationUser MUTATIONS
updateSaveSessionPromise(state, saveSessionPromise) {
@@ -766,7 +815,10 @@ export const mutations = {
state.order.payment.billToAccountNumber =
sessionInformation.order.payment.billToAccountNumber;
state.order.payment.inactivePromos = sessionInformation.order.payment.inactivePromos;
-
+ state.order.payment.isClaimAndCoverage =
+ sessionInformation.order.payment.isClaimAndCoverage;
+ state.order.payment.canScheduleOnline = sessionInformation.order.payment.canScheduleOnline;
+ state.order.payment.accountName = sessionInformation.order.policy.insuranceCompanyName;
//Do not assign default service type once user make service type selection
if (state.order.serviceLocation.appointmentType == null) {
state.order.serviceLocation.address =
@@ -863,6 +915,11 @@ export const mutations = {
state.order.policy.policyNumber = sessionInformation.order.policy?.policyNumber;
state.order.policy.insuranceCompanyName =
sessionInformation.order.policy?.insuranceCompanyName;
+ //state.order.policy.streetAddress = sessionInformation.order.policy?.streetAddress;
+ //state.order.policy.apartment = sessionInformation.order.policy?.apartment;
+ //state.order.policy.city = sessionInformation.order.policy?.city;
+ //state.order.policy.state = sessionInformation.order.policy?.state;
+ //state.order.policy.zipCode = sessionInformation.order.policy?.zipCode;
state.order.policy.isNoComp =
coverageTypeValue(sessionInformation?.order.insuranceCoverage.coverageType) ===
coverageType.NOCOMP
@@ -1961,12 +2018,12 @@ export const actions = {
async getWipers(context, { payload, pageNameToLog }) {
const carId = payload.carId;
- const serviceZipCode = payload.serviceZipCode;
+ const accountNumber = payload.accountNumber;
const response = await globalMethods
.callHttpClient({
method: endpoints.GetWipers.method,
- endpoint: `${endpoints.GetWipers.url}/${carId}/${serviceZipCode}`,
+ endpoint: `${endpoints.GetWipers.url}/${carId}/${accountNumber}`,
logApiCall: true,
pageNameToLog: pageNameToLog,
})
@@ -2524,6 +2581,8 @@ export const actions = {
isInsurance: order.payment.isInsurance,
parentAccountNumber: order.payment.parentAccountNumber,
billToAccountNumber: order.payment.billToAccountNumber,
+ isClaimAndCoverage: order.payment.isClaimAndCoverage,
+ canScheduleOnline: order.payment.canScheduleOnline,
inactivePromos: order.payment.inactivePromos,
isCreditCard:
order.payment.piaType == paymentMethods.CREDIT_CARD ? true : false,
@@ -3040,6 +3099,15 @@ export const actions = {
saveParentAccountNumber(context, parentAccountNumber) {
context.commit(storeMutations.UPDATE_PARENT_ACCT_NUMBER, parentAccountNumber);
},
+ saveAccountName(context, accountName) {
+ context.commit(storeMutations.UPDATE_ACCOUNT_NAME, accountName);
+ },
+ saveIsClaimAndCoverage(context, isClaimAndCoverage) {
+ context.commit(storeMutations.UPDATE_IS_CLAIM_AND_COVERAGE, isClaimAndCoverage);
+ },
+ saveCanScheduleOnline(context, canScheduleOnline) {
+ context.commit(storeMutations.UPDATE_CAN_SCHEDULE_ONLINE, canScheduleOnline);
+ },
saveBillToAccountNumber(context, billToAccountNumber) {
context.commit(storeMutations.UPDATE_BILL_TO_ACCT_NUMBER, billToAccountNumber);
},
@@ -3439,6 +3507,14 @@ export const actions = {
context.commit(storeMutations.UPDATE_CUSTOMER_DETAILS, customerDetails);
},
+ saveInsuranceDetails(context, insuranceDetails) {
+ context.commit(storeMutations.UPDATE_INSURANCE_DETAILS, insuranceDetails);
+ },
+
+ saveDamageDetails(context, damageDetails) {
+ context.commit(storeMutations.UPDATE_DAMAGE_DETAILS, damageDetails);
+ },
+
saveServiceZipCodeInfo(context, serviceZipCodeInfo) {
if (
context.state.order.serviceLocation &&
diff --git a/src/store/store.spec.js b/src/store/store.spec.js
index ea896116d..f8c41cbe4 100644
--- a/src/store/store.spec.js
+++ b/src/store/store.spec.js
@@ -225,6 +225,9 @@ describe("Mutations", () => {
category: "CAR",
registration: {},
},
+ policy: {
+ insuranceCompanyName: "LibertyBibity",
+ },
damage: {
glassToReplace: ["Windshield"],
isRepair: false,