merge 12.08 to develop

This commit is contained in:
CarlNation 2022-11-23 13:57:45 -05:00
parent 9bf2733a81
commit 7e5a0fed3e
9 changed files with 157 additions and 128 deletions

View file

@ -36,14 +36,33 @@
</button> </button>
</div> </div>
<div class="modal-body d-flex flex-column"> <div class="modal-body d-flex flex-column">
<textLink linkType="navigation" text="Terms of use" href="//www.safelite.com/terms-of-use" target="_blank" /> <textLink
<textLink linkType="navigation" text="Your privacy choices" href="//www.safelite.com/privacy-center" target="_blank"> linkType="navigation"
<template v-slot:after-text> text="Terms of use"
<img class="ccpa-icon" src="~@/assets/img/icons/ccpa-icon.svg" alt="Your privacy choices"/> href="//www.safelite.com/terms-of-use"
</template> target="_blank" />
</textLink> <textLink
<textLink linkType="navigation" text="Warranty" href="//www.safelite.com/national-lifetime-warranty" target="_blank" /> linkType="navigation"
<textLink linkType="navigation" text="Notice at collection" href="https://privacyportal-cdn.onetrust.com/dsarwebform/d3b95a93-e22e-4d4d-a806-482052406557/9e371601-eae3-4338-9430-b90b9036022b.html" target="_blank" /> text="Your privacy choices"
href="//www.safelite.com/privacy-center"
target="_blank">
<template v-slot:after-text>
<img
class="ccpa-icon"
src="~@/assets/img/icons/ccpa-icon.svg"
alt="Your privacy choices" />
</template>
</textLink>
<textLink
linkType="navigation"
text="Warranty"
href="//www.safelite.com/national-lifetime-warranty"
target="_blank" />
<textLink
linkType="navigation"
text="Notice at collection"
href="https://privacyportal-cdn.onetrust.com/dsarwebform/d3b95a93-e22e-4d4d-a806-482052406557/9e371601-eae3-4338-9430-b90b9036022b.html"
target="_blank" />
</div> </div>
</div> </div>
</template> </template>

View file

@ -4,15 +4,15 @@ const storeActions = {
GET_HOMEPAGE_NAME: "getHomepageName", GET_HOMEPAGE_NAME: "getHomepageName",
GET_PAGE_DATA: "getPageData", GET_PAGE_DATA: "getPageData",
// Vehicle Actions // Vehicle Actions
GET_VEHICLE_YEARS: "getVehicleYears", GET_VEHICLE_YEARS: "getVehicleYears",
GET_VEHICLE_MAKES: "getVehicleMakes", GET_VEHICLE_MAKES: "getVehicleMakes",
GET_VEHICLE_MODELS: "getVehicleModels", GET_VEHICLE_MODELS: "getVehicleModels",
GET_VEHICLE_STYLES: "getVehicleStyles", GET_VEHICLE_STYLES: "getVehicleStyles",
SET_VEHICLE: "setVehicle", SET_VEHICLE: "setVehicle",
GET_DAMAGE_OPTIONS: "getDamageOptions", GET_DAMAGE_OPTIONS: "getDamageOptions",
GET_EVOX_IMAGE: "getEvoxImage", GET_EVOX_IMAGE: "getEvoxImage",
IS_VIN_OPTIONAL_VEHICLE: "isVinOptionalVehicle", IS_VIN_OPTIONAL_VEHICLE: "isVinOptionalVehicle",
// Lookup Actions // Lookup Actions
LOOKUP_VEHICLE_BY_YMMS: "lookupVehicleByYmms", LOOKUP_VEHICLE_BY_YMMS: "lookupVehicleByYmms",

View file

@ -76,10 +76,10 @@ async function getLatestPageForRedirection() {
const vinOptionalVehiclePromise = store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE); const vinOptionalVehiclePromise = store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE);
const promiseResultMap = [ const promiseResultMap = [
{ {
resultKey: "vinOptionalOptions", resultKey: "vinOptionalOptions",
promise: vinOptionalVehiclePromise, promise: vinOptionalVehiclePromise,
}, },
]; ];
const resultMap = await settleAllPromises(promiseResultMap); const resultMap = await settleAllPromises(promiseResultMap);
@ -104,8 +104,11 @@ async function getLatestPageForRedirection() {
return fmgPageValues.VEHICLE_PARTS; return fmgPageValues.VEHICLE_PARTS;
} else if (partQuestionsComponent.methods.arePagePrerequisitesValid()) { } else if (partQuestionsComponent.methods.arePagePrerequisitesValid()) {
return fmgPageValues.PART_QUESTIONS; return fmgPageValues.PART_QUESTIONS;
} } else if (
else if (vinLookupComponent.methods.arePagePrerequisitesValid() && !store.getters.damage.isRepair && !isVinOptionalVehicle) { vinLookupComponent.methods.arePagePrerequisitesValid() &&
!store.getters.damage.isRepair &&
!isVinOptionalVehicle
) {
return fmgPageValues.VIN_LOOKUP; return fmgPageValues.VIN_LOOKUP;
} else { } else {
return fmgPageValues.ESTIMATE; return fmgPageValues.ESTIMATE;

View file

@ -26,8 +26,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -47,8 +47,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -69,8 +69,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -92,8 +92,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -116,8 +116,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -141,8 +141,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -171,8 +171,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -201,8 +201,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -231,8 +231,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -261,8 +261,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -291,8 +291,8 @@ describe("getPageToRouteExistingOrderTo", () => {
query: {}, query: {},
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Mock out the lazy load calls for all components. // Mock out the lazy load calls for all components.
mockLazyLoadComponentReturnValues({ mockLazyLoadComponentReturnValues({
@ -323,8 +323,8 @@ describe("getPageToRouteExistingOrderTo", () => {
}, },
}; };
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
// Act // Act
const result = await getPageToRouteExistingOrderTo(toRoute, true); const result = await getPageToRouteExistingOrderTo(toRoute, true);

View file

@ -61,8 +61,8 @@ describe("estimate.vue", () => {
selectedVinLookupMethod: vinLookupMethodSelections.MANUALVIN, selectedVinLookupMethod: vinLookupMethodSelections.MANUALVIN,
}); });
store.commit( storeMutations.UPDATE_IS_REPAIR, false ); store.commit(storeMutations.UPDATE_IS_REPAIR, false);
store.commit( storeMutations.UPDATE_MAKE, "acura" ); store.commit(storeMutations.UPDATE_MAKE, "acura");
//Act //Act
await wrapper.vm.forwardButtonAction(); await wrapper.vm.forwardButtonAction();
@ -220,16 +220,21 @@ describe("estimate.vue", () => {
}); });
describe("skipVinLookup", () => { describe("skipVinLookup", () => {
const skipOptions = [[true, true, true], const skipOptions = [
[true, false, true], [true, true, true],
[false, true, true], [true, false, true],
[false, false, false]]; [false, true, true],
test.each(skipOptions)("isRepair %s and isVinOptional %s should return %s", async (isRepair, isVinOptionalVehicle, expectedVinSkip) => { [false, false, false],
const { wrapper } = setupMocks({ isVinOptionalVehicle: isVinOptionalVehicle}); ];
store.commit( storeMutations.UPDATE_IS_REPAIR, isRepair); test.each(skipOptions)(
"isRepair %s and isVinOptional %s should return %s",
async (isRepair, isVinOptionalVehicle, expectedVinSkip) => {
const { wrapper } = setupMocks({ isVinOptionalVehicle: isVinOptionalVehicle });
store.commit(storeMutations.UPDATE_IS_REPAIR, isRepair);
expect(wrapper.vm.skipVinLookup).toEqual(expectedVinSkip); expect(wrapper.vm.skipVinLookup).toEqual(expectedVinSkip);
}); }
);
}); });
function setupMocks({ function setupMocks({

View file

@ -171,7 +171,7 @@ export default {
this.$router.navigateWithoutSaving(this.navigationScenarios.CLICKED_BACK, this.$route); this.$router.navigateWithoutSaving(this.navigationScenarios.CLICKED_BACK, this.$route);
}, },
async forwardButtonAction() { async forwardButtonAction() {
if (this.skipVinLookup){ if (this.skipVinLookup) {
const zipCodeData = await this.getZipCodeData(this.serviceZipCode); const zipCodeData = await this.getZipCodeData(this.serviceZipCode);
//todo: validation //todo: validation
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailAddress, false); await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailAddress, false);

View file

@ -1316,26 +1316,6 @@ export const actions = {
!sortedPreviousResultsArray?.every( !sortedPreviousResultsArray?.every(
(x, i) => x.partNum === sortedMoldingQuestionAnswersArray[i].partNum (x, i) => x.partNum === sortedMoldingQuestionAnswersArray[i].partNum
); );
isVinOptionalVehicle(context){
switch((context.state.order.vehicle.make).toLowerCase()) {
case "mercedes benz":
case "volkswagen":
case "audi":
case "porsche":
return true;
default:
}
if ((context.state.order.vehicle.make).toLowerCase() === "ford" && context.state.order.vehicle.year >= 2018)
return true;
if ((context.state.order.vehicle.make).toLowerCase() === "bmw" && context.state.order.vehicle.year <= 2017)
return true;
return false;
}
}
if (haveMoldingQuestionAnswersChanged) { if (haveMoldingQuestionAnswersChanged) {
context.commit(storeMutations.UPDATE_GLASS_PARTS, null); context.commit(storeMutations.UPDATE_GLASS_PARTS, null);
@ -1407,6 +1387,31 @@ export const actions = {
clearVin(context) { clearVin(context) {
context.commit(storeMutations.UPDATE_VEHICLE_VIN, null); context.commit(storeMutations.UPDATE_VEHICLE_VIN, null);
}, },
isVinOptionalVehicle(context) {
switch (context.state.order.vehicle.make.toLowerCase()) {
case "mercedes benz":
case "volkswagen":
case "audi":
case "porsche":
return true;
default:
}
if (
context.state.order.vehicle.make.toLowerCase() === "ford" &&
context.state.order.vehicle.year >= 2018
)
return true;
if (
context.state.order.vehicle.make.toLowerCase() === "bmw" &&
context.state.order.vehicle.year <= 2017
)
return true;
return false;
},
}; };
export default createStore({ export default createStore({

View file

@ -2713,26 +2713,31 @@ describe("Getters", () => {
}); });
describe("isVinOptionalVehicle", () => { describe("isVinOptionalVehicle", () => {
const testVehicles = [["2017", "acura", false], const testVehicles = [
["2017", "ford", false], ["2017", "acura", false],
["2018", "ford", true], ["2017", "ford", false],
["2018", "bmw", false], ["2018", "ford", true],
["2017", "bmw", true], ["2018", "bmw", false],
["2016", "bmw", true], ["2017", "bmw", true],
["2016", "mercedes benz", true], ["2016", "bmw", true],
["2016", "volkswagen", true], ["2016", "mercedes benz", true],
["2016", "audi", true], ["2016", "volkswagen", true],
["2016", "porsche", true]]; ["2016", "audi", true],
test.each(testVehicles)("%s %s should skip vin lookup is %s", async (year, make, expectedVinSkip) => { ["2016", "porsche", true],
const context = state; ];
test.each(testVehicles)(
"%s %s should skip vin lookup is %s",
async (year, make, expectedVinSkip) => {
const context = state;
context.state = { context.state = {
order: { order: {
vehicle: { year: year, make: make} vehicle: { year: year, make: make },
} },
}; };
var vinOptionalResult = actions.isVinOptionalVehicle(context); var vinOptionalResult = actions.isVinOptionalVehicle(context);
expect(vinOptionalResult).toEqual(expectedVinSkip); expect(vinOptionalResult).toEqual(expectedVinSkip);
}); }
}); );
});

View file

@ -1,8 +1,21 @@
<template> <template>
<a v-if="linkType === 'navigation'" @click="handleClick" class="navigation-link" :href="href">{{text}}<slot name="after-text"></slot></a> <a v-if="linkType === 'navigation'" @click="handleClick" class="navigation-link" :href="href"
<a v-else-if="linkType === 'footer'" @click="handleClick" class="footer-link" :href="href" target="_blank">{{text}}<slot name="after-text"></slot></a> >{{ text }}<slot name="after-text"></slot
<a v-else-if="linkType === 'textSmall'" @click="handleClick" class="small" :href="href">{{text}}<slot name="after-text"></slot></a> ></a>
<a v-else-if="linkType === 'text'" @click="handleClick" :href="href">{{text}}<slot name="after-text"></slot></a> <a
v-else-if="linkType === 'footer'"
@click="handleClick"
class="footer-link"
:href="href"
target="_blank"
>{{ text }}<slot name="after-text"></slot
></a>
<a v-else-if="linkType === 'textSmall'" @click="handleClick" class="small" :href="href"
>{{ text }}<slot name="after-text"></slot
></a>
<a v-else-if="linkType === 'text'" @click="handleClick" :href="href"
>{{ text }}<slot name="after-text"></slot
></a>
</template> </template>
<script> <script>
@ -61,30 +74,9 @@ a {
font-weight: 400; font-weight: 400;
font-size: 0.75rem; font-size: 0.75rem;
&:hover { &:hover {
color: $blue-700; padding: 0 0 2px 0;
} text-decoration: underline;
&.small {
line-height: 24px;
&:hover {
color: $blue-700;
}
}
&.navigation-link {
color: $black;
line-height: 26px;
white-space: nowrap;
}
&.footer-link {
color: $gray-600;
text-decoration: none;
line-height: 20px;
padding: 0 0 2px 0;
font-weight: 400;
font-size: 0.75rem;
&:hover {
padding: 0 0 2px 0;
text-decoration: underline;
}
} }
}
} }
</style> </style>