+
{{ text }}
@@ -10,14 +12,16 @@
:backButtonAccessibleText="backButtonAccessibleText"
@click-event="clickEvent"
/>
-
+
-
@@ -29,9 +33,9 @@ export default {
name: "FunnelSubHeader",
data() {
return {
- text: '',
- subText: ''
- }
+ text: "",
+ subText: "",
+ };
},
props: {
hasBackButton: Boolean,
@@ -42,27 +46,23 @@ export default {
},
methods: {
clickEvent() {
- this.$emit('click-event');
+ this.$emit("click-event");
},
initializeComponent(cmsContent) {
this.text = cmsContent.HeaderText;
this.subText = cmsContent.HeaderSubText;
- }
+ },
},
};
diff --git a/src/common-components/text-input/text-input.spec.js b/src/common-components/text-input/text-input.spec.js
index fcb08d57a..ba20a5c78 100644
--- a/src/common-components/text-input/text-input.spec.js
+++ b/src/common-components/text-input/text-input.spec.js
@@ -2,7 +2,6 @@ import { shallowMount } from "@vue/test-utils";
import textInput from "./text-input";
describe("text-input.vue", () => {
-
it("Should render a text input", async () => {
// Act
const wrapper = shallowMount(textInput, {
@@ -24,7 +23,7 @@ describe("text-input.vue", () => {
propsData: {
name: "test",
label: "unit test label",
- isRequired: true
+ isRequired: true,
},
});
@@ -32,7 +31,5 @@ describe("text-input.vue", () => {
const input = wrapper.find("input");
expect(input.attributes()["aria-required"]).toEqual("true");
-
});
-
-});
\ No newline at end of file
+});
diff --git a/src/common-components/text-input/text-input.vue b/src/common-components/text-input/text-input.vue
index e8d63f9e4..c5285a3b7 100644
--- a/src/common-components/text-input/text-input.vue
+++ b/src/common-components/text-input/text-input.vue
@@ -16,7 +16,7 @@
:aria-labelledby="name"
class="d-flex justify-content-center py-3 px-4"
>
-
{{label}}
+
{{ label }}
@@ -25,7 +25,7 @@
diff --git a/src/constants/events.js b/src/constants/events.js
index 91461d535..066ef6dcd 100644
--- a/src/constants/events.js
+++ b/src/constants/events.js
@@ -1,17 +1,17 @@
const globalEvents = {
- Categories: {
- GLOBAL_ALERT: "GLOBAL_ALERT",
- },
- SubCategories: {
- PAGE_NOT_FOUND: "PAGE_NOT_FOUND",
- }
-}
+ Categories: {
+ GLOBAL_ALERT: "GLOBAL_ALERT",
+ },
+ SubCategories: {
+ PAGE_NOT_FOUND: "PAGE_NOT_FOUND",
+ },
+};
const globalEventTypes = {
- Success: "alert-success",
- Warning: "alert-warning",
- Info: "alert-info",
- Danger: "alert-danger",
-}
+ Success: "alert-success",
+ Warning: "alert-warning",
+ Info: "alert-info",
+ Danger: "alert-danger",
+};
-export {globalEvents, globalEventTypes}
\ No newline at end of file
+export { globalEvents, globalEventTypes };
diff --git a/src/helpers/cms-content-helper.js b/src/helpers/cms-content-helper.js
index 1c795aab2..a20446ef8 100644
--- a/src/helpers/cms-content-helper.js
+++ b/src/helpers/cms-content-helper.js
@@ -9,20 +9,26 @@ export function fetchCmsContentForPage(fmgPage) {
const pageDataFromCms = {};
response.data.Result.forEach((widget) => {
-
- let widgetWithReplacements = findAndReplaceGlobalStateValues(widget.Model, widget.Name);
+ let widgetWithReplacements = findAndReplaceGlobalStateValues(
+ widget.Model,
+ widget.Name
+ );
// If we already have this widget, push it on the collection
if (widgetWithReplacements.Name in pageDataFromCms) {
- pageDataFromCms[widgetWithReplacements.Name].push(widgetWithReplacements.Model);
+ pageDataFromCms[widgetWithReplacements.Name].push(
+ widgetWithReplacements.Model
+ );
return;
}
- pageDataFromCms[widgetWithReplacements.Name] = [widgetWithReplacements.Model];
+ pageDataFromCms[widgetWithReplacements.Name] = [
+ widgetWithReplacements.Model,
+ ];
});
Object.keys(pageDataFromCms).forEach((key) => {
- if (pageDataFromCms[key].length === 1){
+ if (pageDataFromCms[key].length === 1) {
pageDataFromCms[key] = pageDataFromCms[key][0];
}
});
@@ -33,31 +39,29 @@ export function fetchCmsContentForPage(fmgPage) {
// Function to convert a string, into a matching global state item.
function mapStringToState(str) {
-
// Pull all matches out of the string.
- const regexExp = new RegExp('{(.*?):(.*?)}', 'g');
+ const regexExp = new RegExp("{(.*?):(.*?)}", "g");
const matches = [...str.matchAll(regexExp)];
// Our final string value that will be built from the matches.
- let stringBuilder = '';
+ let stringBuilder = "";
for (const match of matches) {
-
// Reset store state for each match.
let storeState = store.state;
- for (const s of match[2].split('.')) {
+ for (const s of match[2].split(".")) {
if (storeState[s] != undefined) {
storeState = storeState[s];
} else {
- return ''; // if we can't map our string to state data, return an empty string.
+ return ""; // if we can't map our string to state data, return an empty string.
}
}
const stringWithReplacement = str.replace(match[0], storeState);
// If we still have values we need to substitute, call this function again.
- if(stringWithReplacement.includes('{globalState:')) {
+ if (stringWithReplacement.includes("{globalState:")) {
return mapStringToState(stringWithReplacement);
}
@@ -71,15 +75,16 @@ function mapStringToState(str) {
// Parent function for processWidgetItemForReplacement. This will loop through the parent
// object and pass any objects that need additional processing to the processWidgetItemForReplacement function.
function findAndReplaceGlobalStateValues(widgetModel, widgetName) {
-
const objWithReplacements = {
Name: widgetName,
- Model: {}
+ Model: {},
};
- Object.keys(widgetModel).forEach(key => {
-
- let modelWithReplacements = processWidgetItemForReplacement(widgetModel, key);
+ Object.keys(widgetModel).forEach((key) => {
+ let modelWithReplacements = processWidgetItemForReplacement(
+ widgetModel,
+ key
+ );
objWithReplacements.Model[key] = modelWithReplacements;
});
@@ -91,16 +96,19 @@ function findAndReplaceGlobalStateValues(widgetModel, widgetName) {
// This is a recursive function, it will call itself until it runs out of items to iterate on given the object.
function processWidgetItemForReplacement(widgetModel, key) {
// If we have a string, and it needs to be replaced.
- if (typeof widgetModel[key] === 'string') {
- if (widgetModel[key].includes('{globalState:')) {
+ if (typeof widgetModel[key] === "string") {
+ if (widgetModel[key].includes("{globalState:")) {
widgetModel[key] = mapStringToState(widgetModel[key]);
}
return widgetModel[key];
}
// If we have an object. array, etc
- if (typeof widgetModel[key] === 'object' && Object.keys(widgetModel[key]).length) {
- Object.keys(widgetModel[key]).forEach(item => {
+ if (
+ typeof widgetModel[key] === "object" &&
+ Object.keys(widgetModel[key]).length
+ ) {
+ Object.keys(widgetModel[key]).forEach((item) => {
processWidgetItemForReplacement(widgetModel[key], item);
});
@@ -109,5 +117,4 @@ function processWidgetItemForReplacement(widgetModel, key) {
// If we have something else like a number, boolean, etc. just return it
return widgetModel[key];
-
-}
\ No newline at end of file
+}
diff --git a/src/helpers/cms-helper.spec.js b/src/helpers/cms-helper.spec.js
index efc0ee56c..d7aeb8bf4 100644
--- a/src/helpers/cms-helper.spec.js
+++ b/src/helpers/cms-helper.spec.js
@@ -4,12 +4,11 @@ import { dispatch } from "@/store";
jest.mock("@/store", () => ({
dispatch: jest.fn(),
state: {
- order: { vehicle: { year: "2019", make: "Acura" } }
- }
+ order: { vehicle: { year: "2019", make: "Acura" } },
+ },
}));
-
-describe("cms-content-helper.js", () => {
+describe("cms-content-helper.js", () => {
it("Should return data from CMS", () => {
// Arrange
const cmsMockData = {
@@ -34,9 +33,9 @@ describe("cms-content-helper.js", () => {
},
],
};
-
+
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
-
+
// Act
fetchCmsContentForPage("testPage").then((response) => {
// Assert
@@ -45,10 +44,9 @@ describe("cms-content-helper.js", () => {
);
});
});
-
});
-describe("cms-content-helper.js", () => {
+describe("cms-content-helper.js", () => {
it("Should replace strings for global state", () => {
const cmsMockData = {
Result: [
@@ -60,21 +58,18 @@ describe("cms-content-helper.js", () => {
},
],
};
-
+
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
-
+
fetchCmsContentForPage("testPage").then((response) => {
// Assert
- expect(response.FunnelSubHeaderWidget.HeaderText).toEqual(
- "2019"
- );
+ expect(response.FunnelSubHeaderWidget.HeaderText).toEqual("2019");
});
});
});
-describe("cms-content-helper.js", () => {
+describe("cms-content-helper.js", () => {
it("Should replace strings for global state, and leave others the same", () => {
-
const cmsMockData = {
Result: [
{
@@ -91,21 +86,21 @@ describe("cms-content-helper.js", () => {
},
],
};
-
+
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
-
+
fetchCmsContentForPage("testPage").then((response) => {
// Assert
expect(response.FunnelSubHeaderWidget.HeaderText).toEqual("2019");
- expect(response.VehicleYearQuestion.ExampleText).toEqual("My widget value!");
-
+ expect(response.VehicleYearQuestion.ExampleText).toEqual(
+ "My widget value!"
+ );
});
});
});
-describe("cms-content-helper.js", () => {
+describe("cms-content-helper.js", () => {
it("Should replace strings for global state in nested objects", () => {
-
const cmsMockData = {
Result: [
{
@@ -119,22 +114,23 @@ describe("cms-content-helper.js", () => {
Model: {
OtherObjectInside: {
ExampleText: "{globalState:order.vehicle.make}",
- }
+ },
},
},
],
};
-
+
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
-
+
fetchCmsContentForPage("testPage").then((response) => {
// Assert
-
+
expect(response.FunnelSubHeaderWidget.HeaderText).toEqual("2019");
- expect(response.VehicleMakeQuestion.OtherObjectInside.ExampleText).toEqual("Acura");
-
+ expect(
+ response.VehicleMakeQuestion.OtherObjectInside.ExampleText
+ ).toEqual("Acura");
});
});
});
-test.todo("String cannot be mapped to global state");
\ No newline at end of file
+test.todo("String cannot be mapped to global state");
diff --git a/src/helpers/event-bus/event-bus.js b/src/helpers/event-bus/event-bus.js
index 8ac156776..47f229210 100644
--- a/src/helpers/event-bus/event-bus.js
+++ b/src/helpers/event-bus/event-bus.js
@@ -2,24 +2,31 @@ import store from "@/store";
import { storeActions } from "@/constants/store-actions.js";
export default {
- // Adds event to the bus given its category, subcategory, and eventValue;
- addEventToBus(category, subCategory, eventValue) {
- store.commit(storeActions.ADD_EVENT_TO_BUS, { category: category, subCategory: subCategory, eventValue: eventValue });
- },
+ // Adds event to the bus given its category, subcategory, and eventValue;
+ addEventToBus(category, subCategory, eventValue) {
+ store.commit(storeActions.ADD_EVENT_TO_BUS, {
+ category: category,
+ subCategory: subCategory,
+ eventValue: eventValue,
+ });
+ },
- // Finds event on the bus, removes the item, and returns its value to the caller.
- readAndPopEventFromBus(category, subCategory) {
- const event = store.getters.eventBusItem(category, subCategory);
+ // Finds event on the bus, removes the item, and returns its value to the caller.
+ readAndPopEventFromBus(category, subCategory) {
+ const event = store.getters.eventBusItem(category, subCategory);
- store.commit(storeActions.REMOVE_EVENT_FROM_BUS, { category: category, subCategory: subCategory });
+ store.commit(storeActions.REMOVE_EVENT_FROM_BUS, {
+ category: category,
+ subCategory: subCategory,
+ });
- return event;
- },
+ return event;
+ },
- // Finds the event on the bus and returns its value to the caller, does not remove it.
- readEventFromBus(category, subCategory) {
- const event = store.getters.eventBusItem(category, subCategory);
+ // Finds the event on the bus and returns its value to the caller, does not remove it.
+ readEventFromBus(category, subCategory) {
+ const event = store.getters.eventBusItem(category, subCategory);
- return event;
- },
-}
\ No newline at end of file
+ return event;
+ },
+};
diff --git a/src/helpers/event-bus/event-bus.spec.js b/src/helpers/event-bus/event-bus.spec.js
index d20c11044..fece3fee2 100644
--- a/src/helpers/event-bus/event-bus.spec.js
+++ b/src/helpers/event-bus/event-bus.spec.js
@@ -3,48 +3,57 @@ import eventBus from "@/helpers/event-bus/event-bus";
import store from "@/store";
describe("event-bus.js", () => {
+ let event = {
+ isDismissible: true,
+ messageCopy: "You can get a quote by starting on this page.",
+ messageHeadline: "We're sorry, something went wrong.",
+ type: globalEventTypes.Danger,
+ };
- let event = {
- isDismissible: true,
- messageCopy: 'You can get a quote by starting on this page.',
- messageHeadline: 'We\'re sorry, something went wrong.',
- type: globalEventTypes.Danger
- };
+ it("Puts item on bus and then take it off", () => {
+ // Arrange / Act
+ eventBus.addEventToBus(
+ globalEvents.Categories.GLOBAL_ALERT,
+ globalEvents.SubCategories.PAGE_NOT_FOUND,
+ event
+ );
- it("Puts item on bus and then take it off", () => {
+ // Assert
+ expect(
+ store.getters.eventBusItem(
+ globalEvents.Categories.GLOBAL_ALERT,
+ globalEvents.SubCategories.PAGE_NOT_FOUND
+ )
+ ).toEqual(event);
- // Arrange / Act
- eventBus.addEventToBus(
- globalEvents.Categories.GLOBAL_ALERT,
- globalEvents.SubCategories.PAGE_NOT_FOUND,
- event
- );
+ expect(store.state.applicationUser.eventBus.length).toEqual(1);
+ // Arrange / Act
+ const eventValue = eventBus.readAndPopEventFromBus(
+ globalEvents.Categories.GLOBAL_ALERT,
+ globalEvents.SubCategories.PAGE_NOT_FOUND
+ );
- // Assert
- expect(store.getters.eventBusItem(globalEvents.Categories.GLOBAL_ALERT, globalEvents.SubCategories.PAGE_NOT_FOUND)).toEqual(event);
+ // Assert
+ expect(eventValue).toEqual(event);
- expect(store.state.applicationUser.eventBus.length).toEqual(1);
+ expect(store.state.applicationUser.eventBus.length).toEqual(0);
+ });
- // Arrange / Act
- const eventValue = eventBus.readAndPopEventFromBus(globalEvents.Categories.GLOBAL_ALERT, globalEvents.SubCategories.PAGE_NOT_FOUND);
+ it("Reads event from bus, should have event value.", () => {
+ // Arrange / Act
+ eventBus.addEventToBus(
+ globalEvents.Categories.GLOBAL_ALERT,
+ globalEvents.SubCategories.PAGE_NOT_FOUND,
+ event
+ );
- // Assert
- expect(eventValue).toEqual(event);
-
- expect(store.state.applicationUser.eventBus.length).toEqual(0);
- });
-
- it("Reads event from bus, should have event value.", () => {
- // Arrange / Act
- eventBus.addEventToBus(
- globalEvents.Categories.GLOBAL_ALERT,
- globalEvents.SubCategories.PAGE_NOT_FOUND,
- event
- );
-
- // Assert
- expect(eventBus.readEventFromBus(globalEvents.Categories.GLOBAL_ALERT, globalEvents.SubCategories.PAGE_NOT_FOUND)).toEqual(event);
-
- });
-});
\ No newline at end of file
+ // Assert
+ expect(
+ eventBus.readEventFromBus(
+ globalEvents.Categories.GLOBAL_ALERT,
+ globalEvents.SubCategories.PAGE_NOT_FOUND
+ )
+ ).toEqual(event);
+ });
+});
diff --git a/src/layouts/address-poc/address-poc.vue b/src/layouts/address-poc/address-poc.vue
index 31a5e66ee..65ca768b4 100644
--- a/src/layouts/address-poc/address-poc.vue
+++ b/src/layouts/address-poc/address-poc.vue
@@ -8,45 +8,51 @@
-