SSR-1167 Coverage Rework unverified / coverage statement improvements

This commit is contained in:
Josh Dassinger 2024-05-22 09:01:09 -05:00
parent 0753374b59
commit f63c4e0c7a
13 changed files with 174 additions and 591 deletions

View file

@ -1,8 +0,0 @@
const coverageStatementPageVariations = Object.freeze({
DEDUCTIBLE: 0,
ITAC: 1,
NO_COMP: 2,
UNVERIFIED: 3
});
export default coverageStatementPageVariations;

View file

@ -1,6 +1,17 @@
const coverageStatuses = Object.freeze({ const coverageStatuses = Object.freeze({
/**
* We have not yet attempted claim registration
*/
PENDING: 0, PENDING: 0,
/**
* We have attempted claim registration, and we got a failure response
*/
NO_COVERAGE: 1, NO_COVERAGE: 1,
/**
* We have attempted claim registration, and we got a success response
*/
VERIFIED: 2 VERIFIED: 2
}); });

View file

@ -1,7 +1,26 @@
const coverageType = Object.freeze({ const coverageType = Object.freeze({
/**
* We attempted policy lookup and it failed or we are no comp and no comp quotes are disabled for this client
*/
NONE: 0, NONE: 0,
/**
* We attempted policy lookup and got success response
* We have selected a vehicle that has comprehensive coverage
* We are not considered ITAC
*/
Deductible: 1, Deductible: 1,
/**
* We attempted policy lookup and got a success response
* We determined that we are in an ITAC case
*/
ITAC: 2, ITAC: 2,
/**
* We attempted policy lookup and got a success response
* The vehicle policy does not have comprehensive coverage
*/
NO_COMP: 3 NO_COMP: 3
}); });

View file

@ -1310,27 +1310,6 @@ describe('cart-dropdown component', () => {
}); });
describe('method', () => { describe('method', () => {
describe('getDisplayed', () => { describe('getDisplayed', () => {
test('returns "Verifying coverage" when not no comp, not itac, and deductible null', () => {
// Arrange
const storeData = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible
},
currentDeductible: null
}
};
const { wrapper } = getMountedComponent(storeData);
const amount = 123;
// Act
const result = wrapper.vm.getDisplayed(amount);
// Assert
expect(result).toBe(VERIFYING_COVERAGE);
});
test('returns "Verifying coverage" when not no comp, not itac, and coverage status PENDING', () => { test('returns "Verifying coverage" when not no comp, not itac, and coverage status PENDING', () => {
// Arrange // Arrange
const storeData = { const storeData = {
@ -1374,7 +1353,7 @@ describe('cart-dropdown component', () => {
// Assert // Assert
expect(result).toBe(dollarAmount); expect(result).toBe(dollarAmount);
}); });
test('returns dollar amount when no comp and enableNoCompQuotes true', () => { test('returns dollar amount when no comp', () => {
// Arrange // Arrange
const storeData = { const storeData = {
order: { order: {
@ -1384,9 +1363,6 @@ describe('cart-dropdown component', () => {
}, },
currentDeductible: 321 currentDeductible: 321
}, },
issConfig: {
enableNoCompQuote: true
}
}; };
const { wrapper } = getMountedComponent(storeData); const { wrapper } = getMountedComponent(storeData);
const amount = 123; const amount = 123;
@ -1399,29 +1375,6 @@ describe('cart-dropdown component', () => {
// Assert // Assert
expect(result).toBe(dollarAmount); expect(result).toBe(dollarAmount);
}); });
test('returns "Verifying Coverage" when no comp and enableNoCompQuotes false', () => {
// Arrange
const storeData = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.NO_COMP
},
currentDeductible: 321
},
issConfig: {
enableNoCompQuote: false
}
};
const { wrapper } = getMountedComponent(storeData);
const amount = 123;
// Act
const result = wrapper.vm.getDisplayed(amount);
// Assert
expect(result).toBe(VERIFYING_COVERAGE);
});
test('returns dollar amount when deductible set, not itac, not no comp, and verified', () => { test('returns dollar amount when deductible set, not itac, not no comp, and verified', () => {
// Arrange // Arrange
const storeData = { const storeData = {

View file

@ -14,7 +14,6 @@ import { useMainStore } from '@/store';
import { getPriceOfLineItems } from '@/helpers/price-calculator.js'; import { getPriceOfLineItems } from '@/helpers/price-calculator.js';
import coverageStatuses from '@/constants/coverage-statuses'; import coverageStatuses from '@/constants/coverage-statuses';
import coverageType from '@/constants/coverage-type'; import coverageType from '@/constants/coverage-type';
import coverageStatementPageVariations from '@/constants/coverage-statement-page-variations';
jest.mock('@/helpers/layout-helper.js', () => jest.fn()); jest.mock('@/helpers/layout-helper.js', () => jest.fn());
jest.mock('@/helpers/price-calculator.js', () => ({ jest.mock('@/helpers/price-calculator.js', () => ({
@ -169,13 +168,10 @@ describe('coverageStatement.vue', () => {
}); });
describe('Computed', () => { describe('Computed', () => {
describe('verified No Comp', () => { describe('verified No Comp', () => {
describe.each([[false, false, coverageType.NONE], describe.each([[false, coverageType.NONE],
[false, true, coverageType.NONE], [false, coverageType.Deductible],
[false, false, coverageType.Deductible], [true, coverageType.NO_COMP]])('isNoCompQuoteVisible', (expected, type) => {
[false, true, coverageType.Deductible], test(`returns ${expected} coverageStatus is Verified and coverageType is ${getEnumName(coverageType, type)}`, () => {
[false, false, coverageType.NO_COMP],
[true, true, coverageType.NO_COMP]])('isNoCompQuoteVisible', (expected, enableNoCompQuote, type) => {
test(`returns ${expected} when enableNoCompQuote is ${enableNoCompQuote} coverageStatus is Verified and coverageType is ${getEnumName(coverageType, type)}`, () => {
// Arrange // Arrange
const mainInitialState = { const mainInitialState = {
order: { order: {
@ -183,8 +179,7 @@ describe('coverageStatement.vue', () => {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: type coverageType: type
} }
}, }
issConfig: { enableNoCompQuote }
}; };
const { wrapper } = getMountedComponent(mainInitialState); const { wrapper } = getMountedComponent(mainInitialState);
@ -198,28 +193,21 @@ describe('coverageStatement.vue', () => {
}); });
describe('verified ITAC', () => { describe('verified ITAC', () => {
describe.each([[false, coverageType.NONE, 50, 100], describe.each([[false, coverageType.NONE],
[false, coverageType.NONE, 100, 100], [false, coverageType.Deductible],
[false, coverageType.NONE, 200, 100], [true, coverageType.ITAC],
[false, coverageType.Deductible, 50, 100], [false, coverageType.NO_COMP]])('isITACQuoteVisible', (expected, type) => {
[false, coverageType.Deductible, 100, 100], test(`returns ${expected} when coverageType is ${getEnumName(coverageType, type)}`, () => {
[true, coverageType.Deductible, 200, 100],
[false, coverageType.NO_COMP, 50, 100],
[false, coverageType.NO_COMP, 100, 100],
[false, coverageType.NO_COMP, 200, 100]])('isITACQuoteVisible', (expected, type, deductible, priceOfLineItems) => {
test(`returns ${expected} when coverageType is ${getEnumName(coverageType, type)} and deductible is ${deductible} and price of line items is ${priceOfLineItems}`, () => {
// Arrange // Arrange
const mainInitialState = { const mainInitialState = {
order: { order: {
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: type coverageType: type
}, }
currentDeductible: deductible
} }
}; };
getPriceOfLineItems.mockReturnValue(priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState); const { wrapper } = getMountedComponent(mainInitialState);
// Act // Act
@ -232,66 +220,21 @@ describe('coverageStatement.vue', () => {
}); });
describe('verified Deductible', () => { describe('verified Deductible', () => {
describe.each([[false, coverageType.NONE, 100, 100], describe.each([[false, coverageType.NONE],
[false, coverageType.NONE, 50, 100], [true, coverageType.Deductible],
[false, coverageType.NONE, 100, 50], [false, coverageType.ITAC],
[true, coverageType.Deductible, 100, 100], [false, coverageType.NO_COMP]])('isDeductibleVisible', (expected, type) => {
[true, coverageType.Deductible, 50, 100], test(`returns ${expected} when coverageType is ${getEnumName(coverageType, type)}`, () => {
[false, coverageType.Deductible, 100, 50],
[false, coverageType.NO_COMP, 100, 100],
[false, coverageType.NO_COMP, 100, 50],
[false, coverageType.NO_COMP, 50, 100]])('isDeductibleVisible when isClaimRegistrationRequired is true', (expected, type, deductible, priceOfLineItems) => {
test(`returns ${expected} when coverageType is ${getEnumName(coverageType, type)} and deductible is ${deductible} and price of line items is ${priceOfLineItems}`, () => {
// Arrange // Arrange
const mainInitialState = { const mainInitialState = {
order: { order: {
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: type coverageType: type
}, }
currentDeductible: deductible
},
issConfig: {
isClaimRegistrationRequired: true
} }
}; };
getPriceOfLineItems.mockReturnValue(priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isDeductibleVisible;
// Assert
expect(result).toBe(expected);
});
});
describe.each([[false, coverageType.NONE, 100, 100],
[false, coverageType.NONE, 50, 100],
[false, coverageType.NONE, 100, 50],
[true, coverageType.Deductible, 100, 100],
[true, coverageType.Deductible, 50, 100],
[false, coverageType.Deductible, 100, 50],
[false, coverageType.NO_COMP, 100, 100],
[false, coverageType.NO_COMP, 100, 50],
[false, coverageType.NO_COMP, 50, 100]])('isDeductibleVisible when isClaimRegistrationRequired is false', (expected, type, deductible, priceOfLineItems) => {
test(`returns ${expected} when coverageType is ${getEnumName(coverageType, type)} and deductible is ${deductible} and price of line items is ${priceOfLineItems}`, () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: type
},
currentDeductible: deductible
},
issConfig: {
isClaimRegistrationRequired: false
}
};
getPriceOfLineItems.mockReturnValue(priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState); const { wrapper } = getMountedComponent(mainInitialState);
// Act // Act
@ -307,7 +250,7 @@ describe('coverageStatement.vue', () => {
const servicePrice = 123; const servicePrice = 123;
describe('claim registration required', () => { describe('claim registration required', () => {
const verifiedDeductibleStoreState = { const verifiedDeductibleStoreState = {
issConfig : { issConfig: {
isClaimRegistrationRequired: true isClaimRegistrationRequired: true
}, },
order: { order: {
@ -319,23 +262,11 @@ describe('coverageStatement.vue', () => {
} }
}; };
getPriceOfLineItems.mockReturnValue(servicePrice); getPriceOfLineItems.mockReturnValue(servicePrice);
test('returns false when deductible is null', () => {
// Arrange
const { wrapper } = getMountedComponent(verifiedDeductibleStoreState);
useMainStore().order.currentDeductible = null;
// Act
const result = wrapper.vm.isDeductibleVisible;
// Assert
expect(result).toBeFalsy();
});
test('returns false when register claim not successful', async () => { test('returns false when register claim not successful', async () => {
// Arrange // Arrange
const { wrapper } = getMountedComponent(verifiedDeductibleStoreState); const { wrapper } = getMountedComponent(verifiedDeductibleStoreState);
useMainStore().order.insuranceCoverage.coverageStatus = coverageStatuses.NO_COVERAGE; useMainStore().order.insuranceCoverage.coverageStatus = coverageStatuses.NO_COVERAGE;
// Act // Act
const result = wrapper.vm.isDeductibleVisible; const result = wrapper.vm.isDeductibleVisible;
@ -433,266 +364,84 @@ describe('coverageStatement.vue', () => {
}); });
}); });
describe('isQuoteDisplayed', () => { describe('isQuoteDisplayed', () => {
test('returns false when policy lookup not successful', () => { describe.each([
[false, coverageStatuses.PENDING, coverageType.NONE],
[false, coverageStatuses.PENDING, coverageType.ITAC],
[false, coverageStatuses.PENDING, coverageType.NO_COMP],
[false, coverageStatuses.PENDING, coverageType.Deductible],
[true, coverageStatuses.VERIFIED, coverageType.NO_COMP],
[true, coverageStatuses.VERIFIED, coverageType.ITAC],
[false, coverageStatuses.VERIFIED, coverageType.Deductible],
[false, coverageStatuses.NO_COVERAGE, coverageType.NO_COMP],
[false, coverageStatuses.NO_COVERAGE, coverageType.ITAC],
[false, coverageStatuses.NO_COVERAGE, coverageType.Deductible]
])('isQuoteDisplayed', (expected, status, type) => {
// eslint-disable-next-line max-len
test(`$returns ${expected} when coverageStatus is ${getEnumName(coverageStatuses, status)} and coverageType is ${getEnumName(coverageType, type)}`, () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: status,
coverageType: type
}
}
};
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBe(expected);
});
});
});
describe.each([
[false, false, false, true, true, 0],
[false, true, true, true, true, 0],
[false, true, false, false, true, 0],
[false, true, false, true, false, 0],
[false, true, false, true, true, -1],
[false, true, false, true, true, null],
[true, true, false, true, true, 0]
])('shouldRegisterClaim', (
expected,
isClaimRegistrationRequired,
isClaimAlreadyRegistered,
isPolicyLookupSuccessful,
isPendingClaimRegistration,
policyVehicleId
) => {
test(`returns ${expected} when isClaimRegistrationRequired is ${isClaimRegistrationRequired} `
+ `and isClaimAlreadyRegistered is ${isClaimAlreadyRegistered} `
+ `and isPolicyLookupSuccessful is ${isPolicyLookupSuccessful} `
+ `and isPendingClaimRegistration is ${isPendingClaimRegistration} `
+ `and policyVehicleId is ${(policyVehicleId == null ? 'NULL' : policyVehicleId)}`, () => {
// Arrange // Arrange
const mainInitialState = { const mainInitialState = {
order: { order: {
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.PENDING, coverageStatus: isPendingClaimRegistration ? coverageStatuses.PENDING : coverageStatuses.VERIFIED,
coverageType: coverageType.NONE coverageType: isPolicyLookupSuccessful ? coverageType.Deductible : coverageType.NONE,
} claimNumber: isClaimAlreadyRegistered ? getRandomString(6, 6) : null
}
};
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeFalsy();
});
describe('not no comp', () => {
const priceOfLineItems = 341;
test('returns false when deductible equal to service price', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible
},
currentDeductible: priceOfLineItems
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeFalsy();
});
test('returns false when deductible less than service price', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible
},
currentDeductible: priceOfLineItems - 1
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeFalsy();
});
test('returns true when policy lookup successful and deductible over service price', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible
},
currentDeductible: priceOfLineItems + 1
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeTruthy();
});
});
describe('not itac', () => {
const priceOfLineItems = 23;
test('returns false when isNoComp false', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible
},
currentDeductible: priceOfLineItems
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeFalsy();
});
test('returns false when isNoComp true and enableNoCompQuote false', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.NO_COMP
},
currentDeductible: priceOfLineItems
},
issConfig: {
enableNoCompQuote: false
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeFalsy();
});
test('returns true when isNoComp true and enableNoCompQuote true', () => {
// Arrange
const mainInitialState = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.NO_COMP
},
currentDeductible: priceOfLineItems
},
issConfig: {
enableNoCompQuote: true
}
};
getPriceOfLineItems.mockImplementationOnce(() => priceOfLineItems);
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.isQuoteDisplayed;
// Assert
expect(result).toBeTruthy();
});
});
});
describe.each([[0], [12]])('shouldRegisterClaim', (policyVehicleId) => {
const servicePrice = 90;
let shouldRegisterClaimStoreStateItac;
beforeEach(() => {
shouldRegisterClaimStoreStateItac = {
order: {
insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.Deductible,
claimNumber: null
}, },
vehicle: { vehicle: {
policyVehicleId policyVehicleId
}, }
currentDeductible: servicePrice - 1
}, },
issConfig: { issConfig: {
isClaimRegistrationRequired: true, isClaimRegistrationRequired
enableNoCompQuote: true
} }
}; };
getPriceOfLineItems.mockImplementation(() => servicePrice);
});
test('returns false when policy lookup not successful', () => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.order.insuranceCoverage.coverageType = coverageType.NONE;
const { wrapper } = getMountedComponent(mainInitialState); const { wrapper } = getMountedComponent(mainInitialState);
// Act // Act
const result = wrapper.vm.shouldRegisterClaim; const result = wrapper.vm.shouldRegisterClaim;
// Assert // Assert
expect(result).toBeFalsy(); expect(result).toBe(expected);
});
test('returns false when policy vehicle id is less than 0', () => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.order.vehicle.policyVehicleId = -3;
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeFalsy();
});
test('returns false when policy vehicle id is null', () => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.order.vehicle.policyVehicleId = null;
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeFalsy();
});
test('returns false when claim registration is not required', () => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.issConfig.isClaimRegistrationRequired = false;
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeFalsy();
});
test('returns false when claim already registered', () => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.order.insuranceCoverage.claimNumber = '13';
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeFalsy();
});
describe('returns true when policy lookup success, vehicleId set to %p, claim reg req, claim not yet reg', () => {
test('and itac', () => {
// Arrange
const { wrapper } = getMountedComponent(shouldRegisterClaimStoreStateItac);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeTruthy();
});
test.each([
[servicePrice],
[servicePrice + 1]
])('and deductible case', (deductibleValue) => {
// Arrange
const mainInitialState = shouldRegisterClaimStoreStateItac;
mainInitialState.currentDeductible = deductibleValue;
const { wrapper } = getMountedComponent(mainInitialState);
// Act
const result = wrapper.vm.shouldRegisterClaim;
// Assert
expect(result).toBeTruthy();
});
}); });
}); });
}); });
@ -816,7 +565,7 @@ describe('coverageStatement.vue', () => {
}, },
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.ITAC, coverageType: coverageType.ITAC
}, },
currentDeductible: deductible currentDeductible: deductible
} }
@ -846,7 +595,7 @@ describe('coverageStatement.vue', () => {
}, },
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.ITAC, coverageType: coverageType.ITAC
}, },
currentDeductible: deductible currentDeductible: deductible
} }
@ -875,8 +624,8 @@ describe('coverageStatement.vue', () => {
}, },
insuranceCoverage: { insuranceCoverage: {
coverageStatus: coverageStatuses.VERIFIED, coverageStatus: coverageStatuses.VERIFIED,
coverageType: coverageType.NO_COMP, coverageType: coverageType.NO_COMP
}, }
}, },
issConfig: { issConfig: {
enableNoCompQuote: true enableNoCompQuote: true

View file

@ -104,7 +104,6 @@ import alert from '@/ux-components/alert/alert.vue';
import contentGroupModal from '@/iss-components/content-group-modal/content-group-modal.vue'; import contentGroupModal from '@/iss-components/content-group-modal/content-group-modal.vue';
import buttonQuestion from '@/digital-components/button-question/button-question.vue'; import buttonQuestion from '@/digital-components/button-question/button-question.vue';
import textBlock from '@/digital-components/text-block/text-block.vue'; import textBlock from '@/digital-components/text-block/text-block.vue';
import pageVariations from '@/constants/coverage-statement-page-variations';
// Import Supporting Files // Import Supporting Files
import { import {
@ -232,43 +231,6 @@ export default {
}; };
}, },
computed: { computed: {
pageVariation() {
const {
isNoComp,
issConfig,
isClaimRegistrationRequired,
isPolicyLookupSuccessful,
isVerified,
isUnverified
} = useMainStore();
if (!isPolicyLookupSuccessful) {
return pageVariations.UNVERIFIED;
}
if (isNoComp) {
if (issConfig.enableNoCompQuote) {
return pageVariations.NO_COMP;
}
return pageVariations.UNVERIFIED;
}
if (isUnverified) {
return pageVariations.UNVERIFIED;
}
// TODO this should be determined based on the result of the ITAC price call
// TODO it seems that ITAC now requires claim registration calls. If this call fails
// should the page become unverified?
if (this.deductibleValue > this.totalServicePrice) {
return pageVariations.ITAC;
}
if (!isClaimRegistrationRequired || isVerified) {
return pageVariations.DEDUCTIBLE;
}
return pageVariations.UNVERIFIED;
},
coverageStatementSubHeader() { coverageStatementSubHeader() {
return this.getTextFromCmsWithCustomIfStatements( return this.getTextFromCmsWithCustomIfStatements(
this.widget.subheader, this.widget.subheader,
@ -325,17 +287,16 @@ export default {
return useMainStore().order.currentDeductible; return useMainStore().order.currentDeductible;
}, },
isNoCompQuoteVisible() { isNoCompQuoteVisible() {
return this.pageVariation === pageVariations.NO_COMP; return this.mainStore.isVerified && this.mainStore.isNoComp;
}, },
isITACQuoteVisible() { isITACQuoteVisible() {
return this.pageVariation === pageVariations.ITAC; return this.mainStore.isVerified && this.mainStore.isITAC;
}, },
isDeductibleVisible() { isDeductibleVisible() {
return this.pageVariation === pageVariations.DEDUCTIBLE; return this.mainStore.isVerified && this.mainStore.isDeductible;
}, },
isUnverifiedVisible() { isUnverifiedVisible() {
return this.pageVariation === pageVariations.UNVERIFIED; return this.mainStore.isUnverified;
}, },
isADAS() { isADAS() {
const { glassParts } = useMainStore().order.lineItems; const { glassParts } = useMainStore().order.lineItems;
@ -367,7 +328,8 @@ export default {
vehicle, vehicle,
isClaimRegistrationRequired, isClaimRegistrationRequired,
isClaimAlreadyRegistered, isClaimAlreadyRegistered,
isPolicyLookupSuccessful isPolicyLookupSuccessful,
isPendingClaimRegistration
} = useMainStore(); } = useMainStore();
const { policyVehicleId } = vehicle; const { policyVehicleId } = vehicle;
return ( return (
@ -376,6 +338,7 @@ export default {
&& policyVehicleId >= 0 && policyVehicleId >= 0
&& isClaimRegistrationRequired && isClaimRegistrationRequired
&& !isClaimAlreadyRegistered && !isClaimAlreadyRegistered
&& isPendingClaimRegistration
); );
} }
}, },
@ -402,13 +365,16 @@ export default {
return !!useMainStore().vehicle.carId; return !!useMainStore().vehicle.carId;
}, },
async initializeComponent() { async initializeComponent() {
if (this.isNoCompQuoteVisible) {
this.mainStore.updateCoverageStatus(coverageStatuses.VERIFIED);
}
if (this.shouldRegisterClaim) { if (this.shouldRegisterClaim) {
await this.mainStore.registerClaim(); await this.mainStore.registerClaim();
} else if (!this.mainStore.isClaimRegistrationRequired) {
this.mainStore.updateCoverageStatus(coverageStatuses.VERIFIED);
} }
if (this.isITACQuoteVisible) { // TODO this should be determined based on the result of the ITAC price call
// TODO it seems that ITAC now requires claim registration calls. If this call fails
console.log(`${this.mainStore.isDeductible} - ${this.deductibleValue} > ${this.totalServicePrice}`);
if (this.mainStore.isDeductible && this.deductibleValue > this.totalServicePrice) {
console.log('Do update0');
this.mainStore.updateCoverageType(coverageType.ITAC); this.mainStore.updateCoverageType(coverageType.ITAC);
} }
showIssLoadingModal(false); showIssLoadingModal(false);

View file

@ -466,7 +466,7 @@ describe('duplicateCheck.vue', () => {
expect(wrapper.vm.$router.navigate) expect(wrapper.vm.$router.navigate)
.toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED_NO_VEHICLES, undefined); .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED_NO_VEHICLES, undefined);
}); });
test('coverageType none false => CLICKED_FORWARD_POLICY_UNVERIFIED', async () => { test('coverageType none => CLICKED_FORWARD_POLICY_UNVERIFIED', async () => {
// Arrange // Arrange
const { wrapper } = getMountedComponent({ const { wrapper } = getMountedComponent({
order: { order: {

View file

@ -162,44 +162,9 @@ describe('payment-method.vue', () => {
} }
}; };
}); });
test('returns true when coverageType none', () => { test('returns true when coverageStatus is pending', () => {
// Arrange
store.order.insuranceCoverage.coverageType = coverageType.NONE;
const wrapper = setupMocks({}, store, mixin);
// Act
const result = wrapper.vm.isPayInAdvanceDisabled;
// Assert
expect(result).toBeTruthy();
});
test('returns true when no comp and enableNoCompQuote false', () => {
// Arrange
store.order.insuranceCoverage.coverageType = coverageType.NO_COMP;
store.issConfig.enableNoCompQuote = false;
const wrapper = setupMocks({}, store, mixin);
// Act
const result = wrapper.vm.isPayInAdvanceDisabled;
// Assert
expect(result).toBeTruthy();
});
test('returns true when not no comp and currentDeductible null', () => {
// Arrange
store.order.currentDeductible = null;
const wrapper = setupMocks({}, store, mixin);
// Act
const result = wrapper.vm.isPayInAdvanceDisabled;
// Assert
expect(result).toBeTruthy();
});
test('returns true when isClaimRegistrationRequired true and insurance coverage not verified', () => {
// Arrange // Arrange
store.order.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; store.order.insuranceCoverage.coverageStatus = coverageStatuses.PENDING;
store.issConfig.isClaimRegistrationRequired = true;
const wrapper = setupMocks({}, store, mixin); const wrapper = setupMocks({}, store, mixin);
// Act // Act
@ -208,11 +173,20 @@ describe('payment-method.vue', () => {
// Assert // Assert
expect(result).toBeTruthy(); expect(result).toBeTruthy();
}); });
test('returns false when no comp, enableNoCompQuote true, and currentDeductible null and pia enabled', () => { test('returns true when coverageStatus is no coverage', () => {
// Arrange // Arrange
store.order.insuranceCoverage.coverageType = coverageType.NO_COMP; store.order.insuranceCoverage.coverageStatus = coverageStatuses.NO_COVERAGE;
store.issConfig.enableNoCompQuote = true; const wrapper = setupMocks({}, store, mixin);
store.order.currentDeductible = null;
// Act
const result = wrapper.vm.isPayInAdvanceDisabled;
// Assert
expect(result).toBeTruthy();
});
test('returns false when coverageStatus is verified', () => {
// Arrange
store.order.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED;
const wrapper = setupMocks({}, store, mixin); const wrapper = setupMocks({}, store, mixin);
// Act // Act
@ -221,17 +195,7 @@ describe('payment-method.vue', () => {
// Assert // Assert
expect(result).toBeFalsy(); expect(result).toBeFalsy();
}); });
test('returns false when not no comp, currentDeductible not null and pia enabled', () => { test('returns true when pia not enabled', () => {
// Arrange
const wrapper = setupMocks({}, store, mixin);
// Act
const result = wrapper.vm.isPayInAdvanceDisabled;
// Assert
expect(result).toBeFalsy();
});
test.skip('returns true when pia not enabled', () => {
// Arrange // Arrange
mixin = { mixin = {
methods: { methods: {

View file

@ -684,7 +684,7 @@ describe('tpa-submit', () => {
[true, coverageStatuses.PENDING], [true, coverageStatuses.PENDING],
[false, coverageStatuses.VERIFIED], [false, coverageStatuses.VERIFIED],
[true, coverageStatuses.NO_COVERAGE] [true, coverageStatuses.NO_COVERAGE]
])('with argument zeroDeductible', (expected, status) => { ])('with argument verifyingCoverage', (expected, status) => {
test(`returns ${expected} when coverageStatus is ${getEnumName(coverageStatuses, status)}`, () => { test(`returns ${expected} when coverageStatus is ${getEnumName(coverageStatuses, status)}`, () => {
// Arrange // Arrange
const initialStore = { const initialStore = {

View file

@ -11,7 +11,7 @@ import applicationConfig from '@/constants/application-config';
import { useMainStore } from '@/store'; import { useMainStore } from '@/store';
import navigationScenarios from '@/router/router-constants/navigation-scenarios'; import navigationScenarios from '@/router/router-constants/navigation-scenarios';
import routerParams from '@/router/router-constants/router-params'; import routerParams from '@/router/router-constants/router-params';
import coverageType from "@/constants/coverage-type"; import coverageType from '@/constants/coverage-type';
// Mock our module for promises. // Mock our module for promises.
jest.mock('@/helpers/layout-helper.js', () => jest.fn()); jest.mock('@/helpers/layout-helper.js', () => jest.fn());

View file

@ -176,7 +176,7 @@ import routerParams from '@/router/router-constants/router-params';
import MaskaFormattedMasks from '@/constants/maska-masks'; import MaskaFormattedMasks from '@/constants/maska-masks';
import globalMethods from '@/global-methods'; import globalMethods from '@/global-methods';
import { endpoints } from '@/constants/endpoints'; import { endpoints } from '@/constants/endpoints';
import coverageType from "@/constants/coverage-type"; import coverageType from '@/constants/coverage-type';
// define validation rules // define validation rules
defineRule( defineRule(
@ -336,7 +336,8 @@ export default {
.finally(async () => { .finally(async () => {
if (this.isCoverageEnabled if (this.isCoverageEnabled
&& !this.maxCoverageLookupAttemptsReached) { && !this.maxCoverageLookupAttemptsReached) {
await this.mainStore.getCoveragePolicyInfo(); await this.mainStore.getCoveragePolicyInfo()
?.catch(() => this.mainStore.updateCoverageType(coverageType.NONE));
} else { } else {
this.mainStore.updateCoverageType(coverageType.NONE); this.mainStore.updateCoverageType(coverageType.NONE);
} }

View file

@ -292,25 +292,12 @@ export const useMainStore = defineStore({
bailoutCode: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE]?.bailoutCode, bailoutCode: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE]?.bailoutCode,
isPolicyLookupSuccessful: (s) => s.order.insuranceCoverage.coverageType !== coverageType.NONE, isPolicyLookupSuccessful: (s) => s.order.insuranceCoverage.coverageType !== coverageType.NONE,
isNoComp: (s) => s.order.insuranceCoverage.coverageType === coverageType.NO_COMP, isNoComp: (s) => s.order.insuranceCoverage.coverageType === coverageType.NO_COMP,
isNoCompQuoteEnabled: (s) => s.issConfig.enableNoCompQuote,
isITAC: (state) => state.order.insuranceCoverage.coverageType === coverageType.ITAC, isITAC: (state) => state.order.insuranceCoverage.coverageType === coverageType.ITAC,
isUnverified: (s) => { isDeductible: (state) => state.order.insuranceCoverage.coverageType === coverageType.Deductible,
const { currentDeductible } = s.order; isUnverified: (s) => s.order.insuranceCoverage.coverageStatus !== coverageStatuses.VERIFIED,
if (!s.isPolicyLookupSuccessful) {
return true;
}
if (s.isNoComp && !s.issConfig.enableNoCompQuote) {
return true;
}
if (!s.isNoComp && currentDeductible == null) {
return true;
}
if (s.isClaimRegistrationRequired && !s.isVerified) {
return true;
}
return false;
},
// TODO condense verification logic
isVerified: (state) => state.order.insuranceCoverage.coverageStatus === coverageStatuses.VERIFIED, isVerified: (state) => state.order.insuranceCoverage.coverageStatus === coverageStatuses.VERIFIED,
isPendingClaimRegistration: (state) => state.order.insuranceCoverage.coverageStatus === coverageStatuses.PENDING,
eventBusItem: (state) => (eventCategory, eventSubCategory) => { eventBusItem: (state) => (eventCategory, eventSubCategory) => {
const matchedEvent = state.applicationUser.eventBus.find(({ category, subCategory }) => category === eventCategory && subCategory === eventSubCategory); const matchedEvent = state.applicationUser.eventBus.find(({ category, subCategory }) => category === eventCategory && subCategory === eventSubCategory);
return matchedEvent?.eventValue; return matchedEvent?.eventValue;
@ -651,9 +638,7 @@ export const useMainStore = defineStore({
}).then((response) => { }).then((response) => {
const registerClaimFailed = response.data.isError; const registerClaimFailed = response.data.isError;
order.insuranceCoverage.claimNumber = null; order.insuranceCoverage.claimNumber = null;
if (this.isNoComp) { if (!registerClaimFailed) {
this.updateCoverageStatus(coverageStatuses.VERIFIED);
} else if (!registerClaimFailed) {
this.updateCoverageStatus(coverageStatuses.VERIFIED); this.updateCoverageStatus(coverageStatuses.VERIFIED);
this.order.insuranceCoverage.claimNumber = response.data.claimNumber; this.order.insuranceCoverage.claimNumber = response.data.claimNumber;
} else { } else {
@ -1703,7 +1688,11 @@ export const useMainStore = defineStore({
updateVehicleCoverage(coverage) { updateVehicleCoverage(coverage) {
if (coverage.noCoverage) { if (coverage.noCoverage) {
this.updateCoverageType(coverageType.NO_COMP); if (this.isNoCompQuoteEnabled) {
this.updateCoverageType(coverageType.NO_COMP);
} else {
this.updateCoverageType(coverageType.NONE);
}
} else { } else {
this.updateCoverageType(coverageType.Deductible); this.updateCoverageType(coverageType.Deductible);
} }

View file

@ -185,16 +185,11 @@ describe('Store', () => {
endorsements endorsements
}; };
const expectedInsuranceCoverage = {
coverageType: noCoverage ? coverageType.NO_COMP : coverageType.Deductible
};
// Act // Act
store.updateVehicleCoverage(vehicleCoverage); store.updateVehicleCoverage(vehicleCoverage);
// Assert // Assert
expect(store.order.policy).toMatchObject(expectedPolicy); expect(store.order.policy).toMatchObject(expectedPolicy);
expect(store.order.insuranceCoverage).toMatchObject(expectedInsuranceCoverage);
}); });
it('UpdateVehicle should set policy values appropriately with repair not waived', () => { it('UpdateVehicle should set policy values appropriately with repair not waived', () => {
@ -217,24 +212,21 @@ describe('Store', () => {
endorsements endorsements
}; };
const expectedInsuranceCoverage = {
coverageType: noCoverage ? coverageType.NO_COMP : coverageType.Deductible
};
// Act // Act
store.updateVehicleCoverage(vehicleCoverage); store.updateVehicleCoverage(vehicleCoverage);
// Assert // Assert
expect(store.order.policy).toMatchObject(expectedPolicy); expect(store.order.policy).toMatchObject(expectedPolicy);
expect(store.order.insuranceCoverage).toMatchObject(expectedInsuranceCoverage);
}); });
describe.each([ describe.each([
[coverageType.NO_COMP, true], [coverageType.NO_COMP, true, true],
[coverageType.Deductible, false] [coverageType.NONE, false, true],
])('updateVehicleCoverage noCoverage', (expected, noCoverage) => { [coverageType.Deductible, true, false]
test(`CoverageType is set to expected ${getEnumName(coverageType, expected)} when vehicle noCoverage is ${noCoverage}`, () => { ])('updateVehicleCoverage noCoverage', (expected, enableNoCompQuote, noCoverage) => {
test(`CoverageType is set to expected ${getEnumName(coverageType, expected)} when vehicle noCoverage is ${noCoverage} and enableNoCompQuote is ${enableNoCompQuote}`, () => {
// Arrange // Arrange
store.issConfig.enableNoCompQuote = enableNoCompQuote;
const vehicleCoverage = { const vehicleCoverage = {
noCoverage noCoverage
}; };
@ -439,7 +431,7 @@ describe('Store', () => {
expect(globalMethods.callHttpClient).toHaveBeenCalled(); expect(globalMethods.callHttpClient).toHaveBeenCalled();
expect(store.order.insuranceCoverage.coverageStatus).toBe(coverageStatuses.VERIFIED); expect(store.order.insuranceCoverage.coverageStatus).toBe(coverageStatuses.VERIFIED);
expect(store.order.insuranceCoverage.coverageType).toBe(coverageType.NO_COMP); expect(store.order.insuranceCoverage.coverageType).toBe(coverageType.NO_COMP);
expect(store.order.insuranceCoverage.claimNumber).toBe(null); expect(store.order.insuranceCoverage.claimNumber).toBe(response.data.claimNumber);
}); });
it('successful response with coverage => isVerified true and coverage status verified', async () => { it('successful response with coverage => isVerified true and coverage status verified', async () => {
@ -1483,73 +1475,20 @@ describe('Store', () => {
}); });
}); });
describe('isUnverified', () => { describe.each([
beforeEach(() => { [true, coverageStatuses.PENDING],
store.order.currentDeductible = 123; [true, coverageStatuses.NO_COVERAGE],
store.order.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED; [false, coverageStatuses.VERIFIED]
store.order.insuranceCoverage.coverageType = coverageType.Deductible; ])('isUnverified', (expected, status) => {
store.issConfig.isClaimRegistrationRequired = true; test(`returns ${expected} when coverageStatus is ${getEnumName(coverageStatuses, status)}`, () => {
store.issConfig.enableNoCompQuote = true;
});
it('returns true when coverageType is NONE', () => {
// Arrange // Arrange
store.order.insuranceCoverage.coverageType = coverageType.NONE; store.order.insuranceCoverage.coverageStatus = status;
// Act // Act
const result = store.isUnverified; const result = store.isUnverified;
// Assert // Assert
expect(result).toBeTruthy(); expect(result).toBe(expected);
});
it('returns true when no comp and enableNoCompQuote false', () => {
// Arrange
store.order.insuranceCoverage.coverageType = coverageType.NO_COMP;
store.issConfig.enableNoCompQuote = false;
// Act
const result = store.isUnverified;
// Assert
expect(result).toBeTruthy();
});
it('returns true when not no comp and currentDeductible null', () => {
// Arrange
store.order.currentDeductible = null;
// Act
const result = store.isUnverified;
// Assert
expect(result).toBeTruthy();
});
it('returns true when isClaimRegistrationRequired true and insurance coverage not verified', () => {
// Arrange
store.order.insuranceCoverage.coverageStatus = coverageStatuses.NO_COVERAGE;
// Act
const result = store.isUnverified;
// Assert
expect(result).toBeTruthy();
});
it('returns false when no comp, enableNoCompQuote true, and currentDeductible null', () => {
// Arrange
store.order.insuranceCoverage.coverageType = coverageType.NO_COMP;
store.order.currentDeductible = null;
store.issConfig.enableNoCompQuote = true;
// Act
const result = store.isUnverified;
// Assert
expect(result).toBeFalsy();
});
it('returns false when not no comp, currentDeductible not null', () => {
// Act
const result = store.isUnverified;
// Assert
expect(result).toBeFalsy();
}); });
}); });