CASH-291
CASH-291 The issue here is that when computing the tier one price for determining which tab to select. we are including the service package discount of $50 bringing the tier one price to $287(337-50), which is less than $300 and causing the cash tab to be selected. This is not the tier one price we show but only used in the computation for determining which tab to default.
This commit is contained in:
parent
75345b9f9d
commit
eedcf4dfdd
7 changed files with 121 additions and 91 deletions
|
|
@ -233,7 +233,7 @@ export default {
|
|||
min-height: 52px;
|
||||
max-height: 126px;
|
||||
@include media-breakpoint-up(md) {
|
||||
max-height: 500px;
|
||||
max-height: 500px;
|
||||
}
|
||||
transition: max-height 0.25s ease-in;
|
||||
|
||||
|
|
|
|||
|
|
@ -361,13 +361,16 @@ export default {
|
|||
if (!this.customerQuestions.emailOrSms) {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (vinPagesMixin.methods.isPhoneNumber(this.customerQuestions.emailOrSms)) {
|
||||
const phone = this.customerQuestions.emailOrSms.replace(/[()]/g, "");
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
|
||||
} else {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.customerQuestions.emailOrSms, false);
|
||||
await this.dispatchStoreAction(
|
||||
storeActions.SAVE_EMAIL,
|
||||
this.customerQuestions.emailOrSms,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,105 +1,102 @@
|
|||
import { shallowMount } from '@vue/test-utils';
|
||||
import InsuranceCompany from '@/layouts/insurance-company/insurance-company.vue';
|
||||
import { applicationConfig } from '@/constants/application-config.js';
|
||||
import { shallowMount } from "@vue/test-utils";
|
||||
import InsuranceCompany from "@/layouts/insurance-company/insurance-company.vue";
|
||||
import { applicationConfig } from "@/constants/application-config.js";
|
||||
import store from "@/store";
|
||||
import baseMixin from "@/mixins/base-mixin.js";
|
||||
|
||||
|
||||
jest.mock('@/store', () => ({
|
||||
jest.mock("@/store", () => ({
|
||||
getters: {
|
||||
order: {
|
||||
payment: {
|
||||
parentAccountNumber: '12345',
|
||||
order: {
|
||||
payment: {
|
||||
parentAccountNumber: "12345",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}));
|
||||
}));
|
||||
|
||||
var mockRouter = {
|
||||
navigateWithoutSaving: jest.fn(),
|
||||
};
|
||||
};
|
||||
|
||||
jest.mock('@/mixins/base-mixin.js', () => ({
|
||||
jest.mock("@/mixins/base-mixin.js", () => ({
|
||||
methods: {
|
||||
navigateWithoutSaving: jest.fn(),
|
||||
navigateWithoutSaving: jest.fn(),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
navigationScenarios: {
|
||||
CLICKED_BACK: 'clicked_back',
|
||||
},
|
||||
};
|
||||
return {
|
||||
navigationScenarios: {
|
||||
CLICKED_BACK: "clicked_back",
|
||||
},
|
||||
};
|
||||
},
|
||||
}));
|
||||
}));
|
||||
|
||||
describe("insurance-company.vue", () => {
|
||||
|
||||
beforeEach(() => {
|
||||
// Reset the store's parentAccountNumber before each test
|
||||
store.getters.order.payment.parentAccountNumber = '12345';
|
||||
});
|
||||
store.getters.order.payment.parentAccountNumber = "12345";
|
||||
});
|
||||
|
||||
test('should return true when parentAccountNumber matches CASH_PARENT_ACCOUNT_NUMBER', () => {
|
||||
test("should return true when parentAccountNumber matches CASH_PARENT_ACCOUNT_NUMBER", () => {
|
||||
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER = "12345";
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.vm.isCashParentAccountNumber()).toBe(true);
|
||||
});
|
||||
|
||||
test('should return false when parentAccountNumber does not match CASH_PARENT_ACCOUNT_NUMBER', () => {
|
||||
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER = "12345";
|
||||
store.getters.order.payment.parentAccountNumber = '67890';
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.vm.isCashParentAccountNumber()).toBe(false);
|
||||
});
|
||||
|
||||
test('should call navigateWithoutSaving with { isCashSelected: true } when forceCashSelection is true', () => {
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store,
|
||||
$router: mockRouter,
|
||||
},
|
||||
mixins: [baseMixin],
|
||||
mocks: {
|
||||
$store: store,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
expect(wrapper.vm.isCashParentAccountNumber()).toBe(true);
|
||||
});
|
||||
|
||||
test("should return false when parentAccountNumber does not match CASH_PARENT_ACCOUNT_NUMBER", () => {
|
||||
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER = "12345";
|
||||
store.getters.order.payment.parentAccountNumber = "67890";
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.vm.isCashParentAccountNumber()).toBe(false);
|
||||
});
|
||||
|
||||
test("should call navigateWithoutSaving with { isCashSelected: true } when forceCashSelection is true", () => {
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store,
|
||||
$router: mockRouter,
|
||||
},
|
||||
mixins: [baseMixin],
|
||||
},
|
||||
});
|
||||
|
||||
wrapper.vm.backButtonAction(true);
|
||||
expect(mockRouter.navigateWithoutSaving).toHaveBeenCalledWith(
|
||||
wrapper.vm.navigationScenarios.CLICKED_BACK,
|
||||
wrapper.vm.$route,
|
||||
{ isCashSelected: true }
|
||||
wrapper.vm.navigationScenarios.CLICKED_BACK,
|
||||
wrapper.vm.$route,
|
||||
{ isCashSelected: true }
|
||||
);
|
||||
});
|
||||
|
||||
test('should call navigateWithoutSaving with no extra parameter when forceCashSelection is false', () => {
|
||||
});
|
||||
|
||||
test("should call navigateWithoutSaving with no extra parameter when forceCashSelection is false", () => {
|
||||
const wrapper = shallowMount(InsuranceCompany, {
|
||||
global: {
|
||||
mocks: {
|
||||
$store: store,
|
||||
$router: mockRouter,
|
||||
mocks: {
|
||||
$store: store,
|
||||
$router: mockRouter,
|
||||
},
|
||||
mixins: [baseMixin],
|
||||
},
|
||||
mixins: [baseMixin],
|
||||
},
|
||||
});
|
||||
});
|
||||
wrapper.vm.backButtonAction(false);
|
||||
expect(mockRouter.navigateWithoutSaving).toHaveBeenCalledWith(
|
||||
wrapper.vm.navigationScenarios.CLICKED_BACK,
|
||||
wrapper.vm.$route
|
||||
wrapper.vm.navigationScenarios.CLICKED_BACK,
|
||||
wrapper.vm.$route
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -315,8 +315,7 @@ export default {
|
|||
if (!this.emailOrSms) {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
|
||||
const phone = this.emailOrSms.replace(/[()]/g, "");
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
|
||||
|
|
|
|||
|
|
@ -361,24 +361,28 @@ export default {
|
|||
)
|
||||
: baseMixin.methods.filterOutFees(availableLineItems);
|
||||
|
||||
const lineItemsNoDiscount =
|
||||
baseMixin.methods.filterOutServicePackageDiscountPart(
|
||||
lineItemsForCalculatingPrice
|
||||
);
|
||||
|
||||
if (isInsuranceFromQueryString != null) {
|
||||
if (isInsuranceFromQueryString.toLowerCase() === "true") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
const tierOnePrice = baseMixin.methods.getTierOnePackagePrice(lineItemsForCalculatingPrice);
|
||||
const tierOnePrice =
|
||||
baseMixin.methods.getTierOnePackagePrice(lineItemsNoDiscount);
|
||||
// prettier-ignore
|
||||
{
|
||||
if (store.getters.applicationUser.loggingOption) {
|
||||
console.log(new Date() + " tierOnePrice type: " + typeof tierOnePrice);
|
||||
console.log(new Date() + " insuranceThreshold type: " + typeof insuranceThreshold);
|
||||
console.log(new Date() + " tierOnePrice comparison: " + tierOnePrice + " > " + insuranceThreshold + "=" + (tierOnePrice > insuranceThreshold));
|
||||
console.log(new Date() + " quote tierOnePrice comparison: " + tierOnePrice + " > " + insuranceThreshold + "=" + (tierOnePrice > insuranceThreshold));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compare base price vs arbitrary threshold (representing insurance price)
|
||||
return (tierOnePrice > insuranceThreshold);
|
||||
return tierOnePrice > insuranceThreshold;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
@ -428,7 +432,7 @@ export default {
|
|||
console.log(new Date() + "quote.vue tab select EXTERNAL ISINSURANCE");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// did user intentionally select insurance?
|
||||
vm.isInsuranceSelected = true;
|
||||
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
|
||||
|
|
|
|||
|
|
@ -334,13 +334,20 @@ export default {
|
|||
if (!this.emailOrSms) {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
|
||||
const phone = this.emailOrSms.replace(/[()]/g, "");
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
|
||||
await this.dispatchStoreAction(
|
||||
storeActions.SAVE_PHONE_NUMBER,
|
||||
phone,
|
||||
false
|
||||
);
|
||||
} else {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false);
|
||||
await this.dispatchStoreAction(
|
||||
storeActions.SAVE_EMAIL,
|
||||
this.emailOrSms,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -391,13 +398,20 @@ export default {
|
|||
if (!this.emailOrSms) {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
|
||||
const phone = this.emailOrSms.replace(/[()]/g, "");
|
||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
|
||||
await this.dispatchStoreAction(
|
||||
storeActions.SAVE_PHONE_NUMBER,
|
||||
phone,
|
||||
false
|
||||
);
|
||||
} else {
|
||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false);
|
||||
await this.dispatchStoreAction(
|
||||
storeActions.SAVE_EMAIL,
|
||||
this.emailOrSms,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,6 +92,13 @@ export default {
|
|||
});
|
||||
|
||||
let totalPrice = this.getTotalPriceOfAllLineItemsAndChildParts(lineItemsToPrice, false);
|
||||
// prettier-ignore
|
||||
{
|
||||
if (store.getters.applicationUser.loggingOption) {
|
||||
console.log(new Date() + " base-mixin getTierOnePackagePrice lineItemsToPrice: " + JSON.stringify(lineItemsToPrice));
|
||||
console.log(new Date() + " base-mixin getTierOnePackagePrice totalPrice: " + totalPrice);
|
||||
}
|
||||
}
|
||||
return totalPrice;
|
||||
},
|
||||
filterOutFees(lineItems) {
|
||||
|
|
@ -103,6 +110,12 @@ export default {
|
|||
});
|
||||
return filteredLineItems;
|
||||
},
|
||||
filterOutServicePackageDiscountPart(lineItems) {
|
||||
const filteredLineItems = lineItems?.filter((item) => {
|
||||
return !item?.partType?.includes(partTypeStrings.SERVICE_PACKAGE_DISCOUNT);
|
||||
});
|
||||
return filteredLineItems;
|
||||
},
|
||||
filterOutRecalibration(lineItems) {
|
||||
return getItemsWithoutRecalParts(lineItems);
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue