Merge pull request #844 from Safelite/feature/CSR-774

CSR-774 | Default package selection (QUOTE) + bug fix
This commit is contained in:
scottkiener 2022-11-30 10:57:32 -05:00 committed by GitHub
commit 7a2faf84ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 15 deletions

View file

@ -6,6 +6,7 @@ import {
mockProcessedCmsContent, mockProcessedCmsContent,
inputQuestionWidgetAnswers, inputQuestionWidgetAnswers,
} from "./service-package-question-test-helper"; } from "./service-package-question-test-helper";
import { nextTick } from "vue";
jest.mock("@/store", () => ({ jest.mock("@/store", () => ({
commit: jest.fn(), commit: jest.fn(),
@ -49,11 +50,12 @@ describe("service-package-question.vue", () => {
const packageNameKey = "05_01_CSR_Quote_Standard_Repair"; const packageNameKey = "05_01_CSR_Quote_Standard_Repair";
Object.assign(processedCmsContent, mockProcessedCmsContent[packageNameKey]); Object.assign(processedCmsContent, mockProcessedCmsContent[packageNameKey]);
}); });
it("should emit relevant VAPS items in an array", () => { it("should emit relevant VAPS items in an array", async () => {
// Arrange // Arrange
const wrapper = setupMocks({}); const wrapper = setupMocks({});
// Act // Act
wrapper.componentVM.selectedValues = "TierThree"; wrapper.componentVM.selectedPackageName = "TierThree";
await nextTick();
// Assert // Assert
expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual([ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual([

View file

@ -4,7 +4,7 @@
:groupName="groupName" :groupName="groupName"
buttonTypeString="servicePackageRadio" buttonTypeString="servicePackageRadio"
:buttonTypeObject="servicePackageRadio" :buttonTypeObject="servicePackageRadio"
v-model="selectedValues" v-model="selectedPackageName"
isRequired /> isRequired />
</template> </template>
@ -35,19 +35,21 @@ export default {
data() { data() {
return { return {
servicePackageRadio: servicePackageRadio, servicePackageRadio: servicePackageRadio,
selectedPackageName: null,
}; };
}, },
computed: { watch: {
selectedValues: { availableLineItems() {
get: function () { if (this.$store.getters.lineItems.supportingItems) {
return this.modelValue; this.selectDefaultPackage();
}, }
set: function (newValue) {
const VapsProductsInSelectedPackage =
this.getVapsLineItemsForSelectedPackage(newValue);
this.$emit("update:modelValue", VapsProductsInSelectedPackage);
},
}, },
selectedPackageName(newValue) {
const VapsProductsInSelectedPackage = this.getVapsLineItemsForSelectedPackage(newValue);
this.$emit("update:modelValue", VapsProductsInSelectedPackage);
},
},
computed: {
nullSafeAvailableLineItems() { nullSafeAvailableLineItems() {
return this.availableLineItems ?? []; return this.availableLineItems ?? [];
}, },
@ -208,6 +210,50 @@ export default {
}); });
return vapsPrice; return vapsPrice;
}, },
selectDefaultPackage() {
const vapsFromStore = this.$store.getters.lineItems.vaps;
let lowestTierForPackage = packageNames.TIER_ONE;
vapsFromStore.every((vapsItem) => {
let lowestTierForThisItem = this.getLowestTierForThisItem(vapsItem);
if (lowestTierForThisItem === packageNames.TIER_THREE) {
lowestTierForPackage = packageNames.TIER_THREE;
return false;
} else if (lowestTierForThisItem === packageNames.TIER_TWO) {
lowestTierForPackage = packageNames.TIER_TWO;
return true;
} else {
return true;
}
});
this.selectedPackageName = lowestTierForPackage;
},
getLowestTierForThisItem(vapsItem) {
let lowestTierForThisItem = null;
switch (vapsItem.partType) {
case partTypeStrings.FRONT_WIPER:
if (this.frontWipersApplicableForTierThree) {
lowestTierForThisItem = packageNames.TIER_THREE;
}
if (this.frontWipersApplicableForTierTwo) {
lowestTierForThisItem = packageNames.TIER_TWO;
}
break;
case partTypeStrings.REAR_WIPER:
if (this.rearWiperApplicableForTierThree) {
lowestTierForThisItem = packageNames.TIER_THREE;
}
if (this.rearWiperApplicableForTierTwo) {
lowestTierForThisItem = packageNames.TIER_TWO;
}
break;
case partTypeStrings.RAIN_DEFENSE:
if (this.rainDefenseApplicableForTierThree) {
lowestTierForThisItem = packageNames.TIER_THREE;
}
break;
}
return lowestTierForThisItem;
},
getVapsLineItemsForSelectedPackage(packageName) { getVapsLineItemsForSelectedPackage(packageName) {
const vapsLineItemsForSelectedPackage = []; const vapsLineItemsForSelectedPackage = [];
if (packageName === packageNames.TIER_TWO) { if (packageName === packageNames.TIER_TWO) {

View file

@ -356,7 +356,7 @@ export const mutations = {
state.order.lineItems.glassParts = sessionInformation.order.lineItems.glassParts; state.order.lineItems.glassParts = sessionInformation.order.lineItems.glassParts;
state.order.lineItems.supportingItems = sessionInformation.order.lineItems.supportingItems; state.order.lineItems.supportingItems = sessionInformation.order.lineItems.supportingItems;
state.order.lineItems.vapsItems = sessionInformation.order.lineItems.vapsItems; state.order.lineItems.vaps = sessionInformation.order.lineItems.vaps;
state.order.lineItems.serverData = sessionInformation.order.lineItems.serverData; state.order.lineItems.serverData = sessionInformation.order.lineItems.serverData;
state.order.accountNumber = sessionInformation.order.accountNumber; state.order.accountNumber = sessionInformation.order.accountNumber;
state.order.providerNumber = sessionInformation.order.providerNumber; state.order.providerNumber = sessionInformation.order.providerNumber;
@ -1011,7 +1011,7 @@ export const actions = {
lineItems: { lineItems: {
glassParts: lineItems.glassParts, glassParts: lineItems.glassParts,
supportingItems: lineItems.supportingItems, supportingItems: lineItems.supportingItems,
vapsItems: lineItems.vapsItems, vaps: lineItems.vaps,
serverData: lineItems.serverData, serverData: lineItems.serverData,
}, },
payment: { payment: {