diff --git a/src/constants/coverage-statement-page-variations.js b/src/constants/coverage-statement-page-variations.js new file mode 100644 index 00000000..1f2039e2 --- /dev/null +++ b/src/constants/coverage-statement-page-variations.js @@ -0,0 +1,8 @@ +const coverageStatementPageVariations = Object.freeze({ + DEDUCTIBLE: 0, + ITAC: 1, + NO_COMP: 2, + UNVERIFIED: 3 +}); + +export default coverageStatementPageVariations; diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 2466392d..8d010784 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -76,10 +76,6 @@ const endpoints = Object.freeze({ url: `${PRICE_BASE_URL}/order-items-with-insurance-pricing`, method: 'GET' }, - GetPriceOrderItems: { - url: `${PRICE_BASE_URL}/order-items`, - method: 'GET' - }, GetProviders: { url: `${LOCATION_BASE_URL}/providers`, method: 'GET' diff --git a/src/helpers/service-location-helper.js b/src/helpers/service-location-helper.js index 63f4c711..2f80d85e 100644 --- a/src/helpers/service-location-helper.js +++ b/src/helpers/service-location-helper.js @@ -16,14 +16,18 @@ export async function getPricedMobileFeePart(serviceZipCode) { if (!serviceZipCode) { return Promise.resolve(null); } - const zipCodeData = await getZipCodeData(serviceZipCode); // Get the Mobile Fee Part const mobileFeePart = await useMainStore().getMobileFeePart(); + + if (mobileFeePart.data == null || mobileFeePart.data === '') { + return Promise.resolve(null); + } + // Get the Mobile Fee Part Price const pricingResults = await useMainStore() - .priceOrderItemsAndSaveServerData([mobileFeePart.data], serviceZipCode, zipCodeData.zipCodeCtu); + .getPriceOrderItems([mobileFeePart.data]); return Promise.resolve(pricingResults[0]); } diff --git a/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap b/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap index 9ade738d..37a7a4ee 100644 --- a/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap +++ b/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap @@ -2,6 +2,7 @@ exports[`cart-dropdown component initial data rendered as expected 1`] = ` Object { + "availableVaps": Array [], "cartItemType": Object { "MOBILE_FEE": "MOBILE FEE", "RECYCLE_FEE": "RECYCLE FEE", @@ -10,6 +11,7 @@ Object { "isExpanded": false, "widget": Object { "amountDue": "AmountDueTextWidget", + "amountPaid": "AmountPaidTextWidget", "basePrice": "BasePriceWidget", "deductible": "DeductibleWidget", "mobileFee": "MobileServiceWidget", diff --git a/src/iss-components/cart-dropdown/cart-dropdown.spec.js b/src/iss-components/cart-dropdown/cart-dropdown.spec.js index 69be39a8..ed02ba8a 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.spec.js +++ b/src/iss-components/cart-dropdown/cart-dropdown.spec.js @@ -57,7 +57,11 @@ beforeEach(() => { describe('cart-dropdown component', () => { test('initial data rendered as expected', () => { // Arrange - const { wrapper } = getMountedComponent({}); + const { wrapper } = getMountedComponent({ + order: { + availableVaps: [] + } + }); // Assert expect(wrapper.vm.$data).toMatchSnapshot(); @@ -74,6 +78,30 @@ describe('cart-dropdown component', () => { // Assert expect(head.exists()).toBeTruthy(); }); + test('cart dropdown head is visible', () => { + // Arrange + const reference = '#cart-dropdown-head'; + const { wrapper } = getMountedComponent(cartDropdown, {}, { showDropdownHeader: true }); + + // Act + const head = wrapper.find(reference); + + // Assert + expect(head.exists()).toBeTruthy(); + expect(head.classes()).toContain('cart-toggle'); + }); + test('cart dropdown head is not visible', () => { + // Arrange + const reference = '#cart-dropdown-head'; + const { wrapper } = getMountedComponent(cartDropdown, {}, { showDropdownHeader: false }); + + // Act + const head = wrapper.find(reference); + + // Assert + expect(head.exists()).toBeTruthy(); + expect(head.classes()).not.toContain('cart-toggle'); + }); test('cart table', () => { // Arrange const reference = '#cart-table'; @@ -225,6 +253,27 @@ describe('cart-dropdown component', () => { // Assert expect(salesTax.exists()).toBeTruthy(); }); + test('amount paid when Pay in Advance', () => { + // Arrange + const reference = '#cart-amount-paid'; + const isExpanded = true; + const showAsPaid = true; + const initialPropsData = { isExpanded, showAsPaid }; + const storeData = { + order: { + payment: { + isPayInAdvance: true + } + } + }; + const { wrapper } = getMountedComponent(storeData, {}, initialPropsData); + + // Act + const amountPaid = wrapper.find(reference); + + // Assert + expect(amountPaid.exists()).toBeTruthy(); + }); test('bottom amount due', () => { // Arrange const reference = '#bottom-amount-due'; @@ -313,115 +362,6 @@ describe('cart-dropdown component', () => { }); }); describe('computed', () => { - describe('isUnverified', () => { - test('returns false when no comp', () => { - // Arrange - const storeData = { - order: { - policy: { - isITAC: false, - noCoverage: true - }, - currentDeductible: null - } - }; - const { wrapper } = getMountedComponent(storeData); - - // Act - const result = wrapper.vm.isUnverified; - - // Assert - expect(result).toBeFalsy(); - }); - test('returns false when itac', () => { - // Arrange - const storeData = { - order: { - payment: { - insuranceCoverage: { - coverageStatus: coverageStatuses.PENDING - } - }, - policy: { - isITAC: true - }, - currentDeductible: null - } - }; - const { wrapper } = getMountedComponent(storeData); - - // Act - const result = wrapper.vm.isUnverified; - - // Assert - expect(result).toBeFalsy(); - }); - test('returns false when deductible not null and verified coverage status', () => { - // Arrange - const storeData = { - order: { - payment: { - insuranceCoverage: { - coverageStatus: coverageStatuses.VERIFIED - } - }, - policy: { - isITAC: false - }, - currentDeductible: 23 - } - }; - const { wrapper } = getMountedComponent(storeData); - - // Act - const result = wrapper.vm.isUnverified; - - // Assert - expect(result).toBeFalsy(); - }); - test('returns true when not no comp, not itac, and deductible is null', () => { - // Arrange - const storeData = { - order: { - policy: { - isITAC: false, - noCoverage: false - }, - currentDeductible: null - } - }; - const { wrapper } = getMountedComponent(storeData); - - // Act - const result = wrapper.vm.isUnverified; - - // Assert - expect(result).toBeTruthy(); - }); - test('returns true when not no comp, not itac, and coverage status is not verified', () => { - // Arrange - const storeData = { - order: { - payment: { - insuranceCoverage: { - coverageStatus: coverageStatuses.PENDING - } - }, - policy: { - isITAC: false - }, - currentDeductible: 12 - } - }; - const { wrapper } = getMountedComponent(storeData); - - // Act - const result = wrapper.vm.isUnverified; - - // Assert - expect(result).toBeTruthy(); - }); - }); describe('amountDue', () => { test('returns 0 when showAsPaid is true', () => { // Arrange @@ -556,15 +496,24 @@ describe('cart-dropdown component', () => { // Arrange const storeData = { order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, lineItems: { glassParts: null, otherParts: null, supportingItems: null, vaps: null + }, + payment: { + insuranceCoverage: { isVerified: true } } + }, + issConfig: { + isClaimRegistrationRequired: true } }; - const { wrapper } = getMountedComponent(storeData); // Act @@ -578,6 +527,10 @@ describe('cart-dropdown component', () => { // Arrange const storeData = { order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, lineItems: { glassParts: [ { partType: 'mock', salesTax: null }, @@ -591,7 +544,13 @@ describe('cart-dropdown component', () => { { partType: 'mock', salesTax: null }, { partType: 'mock', salesTax: undefined } ] + }, + payment: { + insuranceCoverage: { isVerified: true } } + }, + issConfig: { + isClaimRegistrationRequired: true } }; const { wrapper } = getMountedComponent(storeData); @@ -606,6 +565,10 @@ describe('cart-dropdown component', () => { // Arrange const storeData = { order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, lineItems: { glassParts: [{ partType: 'mock', salesTax: 10 }], supportingItems: [ @@ -619,10 +582,11 @@ describe('cart-dropdown component', () => { vaps: [] }, payment: { - insuranceCoverage: { - isVerified: false - } + insuranceCoverage: { isVerified: false } } + }, + issConfig: { + isClaimRegistrationRequired: true } }; const { wrapper } = getMountedComponent(storeData); @@ -636,15 +600,27 @@ describe('cart-dropdown component', () => { test('Returns sum of vaps sales tax when coverage is unverified and order has vaps.', () => { // Arrange - const storeData = useMainStore().$state; - storeData.order.lineItems.glassParts = [ - { partType: 'mock', salesTax: 10 } - ]; - storeData.order.lineItems.vaps = [ - { partType: 'mock', salesTax: 1 }, - { partType: 'mock', salesTax: 2 } - ]; - storeData.order.payment.insuranceCoverage.isVerified = false; + const storeData = { + order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, + lineItems: { + glassParts: [{ partType: 'mock', salesTax: 10 }], + vaps: [ + { partType: 'mock', salesTax: 1 }, + { partType: 'mock', salesTax: 2 } + ] + }, + payment: { + insuranceCoverage: { isVerified: false } + } + }, + issConfig: { + isClaimRegistrationRequired: true + } + }; const { wrapper } = getMountedComponent(storeData); @@ -657,16 +633,38 @@ describe('cart-dropdown component', () => { test('Returns Recycle Fee tax when coverage is Verified-Deductible, replace service, and no vaps.', () => { // Arrange - const storeData = useMainStore().$state; - storeData.order.currentDeductible = 250; - storeData.order.lineItems.glassParts = [ - { partType: 'mock', salesTax: 10, sellingPrice: 150 } - ]; - storeData.order.lineItems.supportingItems = [ - { partNumber: partNumberStrings.RECYCLE_FEE, partType: 'mock', salesTax: 10, sellingPrice: 39.99 } - ]; - storeData.order.lineItems.vaps = null; - storeData.order.payment.insuranceCoverage.isVerified = true; + const storeData = { + order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, + lineItems: { + glassParts: [{ partType: 'mock', salesTax: 10, sellingPrice: 150 }], + supportingItems: [ + { + partNumber: partNumberStrings.RECYCLE_FEE, + partType: 'mock', + salesTax: 10, + sellingPrice: 39.99 + } + ], + vaps: null + }, + payment: { + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED + } + }, + policy: { + noCoverage: false, + isITAC: false + } + }, + issConfig: { + isClaimRegistrationRequired: true + } + }; const { wrapper } = getMountedComponent(storeData); @@ -679,24 +677,34 @@ describe('cart-dropdown component', () => { test('Returns sum of vaps + recycle fee sales tax when Verified-Deductible, replace service, and has vaps.', () => { // Arrange - const storeData = useMainStore().$state; - storeData.order.currentDeductible = 250; - storeData.order.lineItems.glassParts = [ - { partType: 'mock', salesTax: 10, sellingPrice: 100 } - ]; - storeData.order.lineItems.otherParts = [ - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.supportingItems = [ - { partNumber: partNumberStrings.RECYCLE_FEE, partType: 'mock', salesTax: 10, sellingPrice: 39.99 }, - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.vaps = [ - { partType: 'mock', salesTax: 2 }, - { partType: 'mock', salesTax: 3 } - ]; - storeData.order.payment.insuranceCoverage.isVerified = true; - + const storeData = { + order: { + policy: { + policyLookupSuccessful: true + }, + currentDeductible: 250, + lineItems: { + glassParts: [{ partType: 'mock', salesTax: 10, sellingPrice: 100 }], + otherParts: [{ partType: 'mock', salesTax: 10, kitPrice: 100 }], + supportingItems: [ + { partNumber: partNumberStrings.RECYCLE_FEE, partType: 'mock', salesTax: 10, sellingPrice: 39.99 }, + { partType: 'mock', salesTax: 10, kitPrice: 100 } + ], + vaps: [ + { partType: 'mock', salesTax: 2 }, + { partType: 'mock', salesTax: 3 } + ] + }, + payment: { + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED + } + } + }, + issConfig: { + isClaimRegistrationRequired: true + } + }; const { wrapper } = getMountedComponent(storeData); // Act @@ -708,23 +716,27 @@ describe('cart-dropdown component', () => { test('Returns sum of sales tax when Verified-ITAC.', () => { // Arrange - const storeData = useMainStore().$state; - storeData.order.currentDeductible = 0; - storeData.order.lineItems.glassParts = [ - { partType: 'mock', salesTax: 10, sellingPrice: 100 } - ]; - storeData.order.lineItems.otherParts = [ - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.supportingItems = [ - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.vaps = [ - { partType: 'mock', salesTax: 5 } - ]; - storeData.order.payment.insuranceCoverage.isVerified = true; - storeData.order.policy.isITAC = true; - + const storeData = { + order: { + currentDeductible: 0, + lineItems: { + glassParts: [{ partType: 'mock', salesTax: 10, sellingPrice: 100 }], + otherParts: [{ partType: 'mock', salesTax: 10, kitPrice: 100 }], + supportingItems: [{ partType: 'mock', salesTax: 10, kitPrice: 100 }], + vaps: [{ partType: 'mock', salesTax: 5 }] + }, + payment: { + insuranceCoverage: { isVerified: true } + }, + policy: { + isITAC: true, + policyLookupSuccessful: true + } + }, + issConfig: { + isClaimRegistrationRequired: true + } + }; const { wrapper } = getMountedComponent(storeData); // Act @@ -736,23 +748,28 @@ describe('cart-dropdown component', () => { test('Returns sum of sales tax when Verified-NoComp.', () => { // Arrange - const storeData = useMainStore().$state; - storeData.order.currentDeductible = 0; - storeData.order.lineItems.glassParts = [ - { partType: 'mock', salesTax: 10, sellingPrice: 100 } - ]; - storeData.order.lineItems.otherParts = [ - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.supportingItems = [ - { partType: 'mock', salesTax: 10, kitPrice: 100 } - ]; - storeData.order.lineItems.vaps = [ - { partType: 'mock', salesTax: 5 } - ]; - storeData.order.payment.insuranceCoverage.isVerified = true; - storeData.order.policy.noCoverage = true; - + const storeData = { + order: { + currentDeductible: 0, + lineItems: { + glassParts: [{ partType: 'mock', salesTax: 10, sellingPrice: 100 }], + otherParts: [{ partType: 'mock', salesTax: 10, kitPrice: 100 }], + supportingItems: [{ partType: 'mock', salesTax: 10, kitPrice: 100 }], + vaps: [{ partType: 'mock', salesTax: 5 }] + }, + payment: { + insuranceCoverage: { isVerified: true } + }, + policy: { + noCoverage: true, + policyLookupSuccessful: true + } + }, + issConfig: { + isClaimRegistrationRequired: true, + enableNoCompQuote: true + } + }; const { wrapper } = getMountedComponent(storeData); // Act @@ -849,8 +866,8 @@ describe('cart-dropdown component', () => { test('returns expected when availableVaps null', async () => { // Arrange const availableVaps = [{ partNumber: 'vaps1' }]; - const propsData = { availableVaps }; - const { wrapper } = getMountedComponent({}, {}, propsData); + const initialData = { availableVaps }; + const { wrapper } = getMountedComponent({}, initialData, {}); const expected = availableVaps; // Act @@ -877,10 +894,10 @@ describe('cart-dropdown component', () => { } } }; - const propsData = { + const initialData = { availableVaps: [part4, part5] }; - const { wrapper } = getMountedComponent(storeData, {}, propsData); + const { wrapper } = getMountedComponent(storeData, initialData, {}); const sortByPartType = (a, b) => { const typeA = a.partType.toUpperCase(); const typeB = b.partType.toUpperCase(); @@ -1791,21 +1808,25 @@ describe('cart-dropdown component', () => { // Arrange const storeData = { order: { + policy: { + isITAC: false, + isNoComp: false, + policyLookupSuccessful: true + }, + currentDeductible: 321, + policyLookupSuccessful: true, payment: { insuranceCoverage: { coverageStatus: coverageStatuses.VERIFIED } - }, - policy: { - isITAC: false - }, - currentDeductible: 321 + } } }; const { wrapper } = getMountedComponent(storeData); const amount = 123; const dollarAmount = '$84.00'; - formatAmountInDollars.mockImplementationOnce(() => dollarAmount); + formatAmountInDollars + .mockImplementationOnce((value) => (value === amount ? dollarAmount : 1)); // Act const result = wrapper.vm.getDisplayed(amount); diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index c1d148bd..662108f8 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -1,8 +1,9 @@