diff --git a/.gitignore b/.gitignore index b5400d3e..8f48b7f4 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ pnpm-debug.log* coverage/* junit.xml /.vs + +.prettierrc diff --git a/src/digital-components/textbox-question/textbox-question.vue b/src/digital-components/textbox-question/textbox-question.vue index f7e0d858..df3e5001 100644 --- a/src/digital-components/textbox-question/textbox-question.vue +++ b/src/digital-components/textbox-question/textbox-question.vue @@ -1,340 +1,333 @@ diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 510cc288..c3b96416 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -1,5 +1,9 @@ diff --git a/src/layouts/policy-vehicles/policy-vehicles.spec.js b/src/layouts/policy-vehicles/policy-vehicles.spec.js index 8b585428..755f3590 100644 --- a/src/layouts/policy-vehicles/policy-vehicles.spec.js +++ b/src/layouts/policy-vehicles/policy-vehicles.spec.js @@ -66,7 +66,7 @@ describe('policy-vehicles.vue', () => { const expectedInput = { year: year, vin: vin, - noCompensation: true, + noCoverage: true, deductible: 0, repairWaived: false } @@ -89,7 +89,7 @@ describe('policy-vehicles.vue', () => { //Arrange const { wrapper } = setupMocks({}); - const vin = getRandomString(17,17); + const vin = getRandomString(17, 17); await wrapper.setData({ selectedVehicleVin: vin, bailout: false @@ -130,24 +130,24 @@ describe('policy-vehicles.vue', () => { {} ); }); - }) + }); - describe('noCompensationForSelectedVehicle computed property', () => { + describe('noCoverageForSelectedVehicle computed property', () => { it('No vehicle match => returns true', async () => { // Arrange - const selectedVin = getRandomString(17,17); - const otherVin = getRandomString(17,17); + const selectedVin = getRandomString(17, 17); + const otherVin = getRandomString(17, 17); const testValues = { selectedVehicleVin: selectedVin, policyVehicles: [ { - vin: otherVin, - }, - ], - } + vin: otherVin + } + ] + }; // Act - const result = policyVehicles.computed.noCompensationForSelectedVehicle.call(testValues); + const result = policyVehicles.computed.noCoverageForSelectedVehicle.call(testValues); // Assert expect(result).toBeTruthy(); @@ -155,19 +155,19 @@ describe('policy-vehicles.vue', () => { it('Coverages list empty => true', () => { // Arrange - const vin = getRandomString(17,17); + const vin = getRandomString(17, 17); const testValues = { selectedVehicleVin: vin, policyVehicles: [ { - vin: vin, + vin, coverages: [] - }, - ], - } + } + ] + }; // Act - const result = policyVehicles.computed.noCompensationForSelectedVehicle.call(testValues); + const result = policyVehicles.computed.noCoverageForSelectedVehicle.call(testValues); // Assert expect(result).toBeTruthy(); @@ -175,28 +175,28 @@ describe('policy-vehicles.vue', () => { it('Coverages list non-empty => false', () => { // Arrange - const vin = getRandomString(17,17); + const vin = getRandomString(17, 17); const testValues = { selectedVehicleVin: vin, policyVehicles: [ { - vin: vin, + vin, coverages: [ { deductible: 0 } ] - }, - ], - } + } + ] + }; // Act - const result = policyVehicles.computed.noCompensationForSelectedVehicle.call(testValues); + const result = policyVehicles.computed.noCoverageForSelectedVehicle.call(testValues); // Assert expect(result).toBeFalsy(); }); - }) + }); describe('deductibleForSelectedVehicle computed property', () => { diff --git a/src/layouts/policy-vehicles/policy-vehicles.vue b/src/layouts/policy-vehicles/policy-vehicles.vue index 2e59d880..16699160 100644 --- a/src/layouts/policy-vehicles/policy-vehicles.vue +++ b/src/layouts/policy-vehicles/policy-vehicles.vue @@ -104,7 +104,7 @@ export default { }) ?? []; return mappedData; }, - noCompensationForSelectedVehicle() { + noCoverageForSelectedVehicle() { const vehicle = this.policyVehicles.find((policyVehicle) => policyVehicle.vin === this.selectedVehicleVin); return (vehicle?.coverages?.length ?? 0) === 0; @@ -174,7 +174,7 @@ export default { this.vehicleFromLookup = Object.assign(vehicleLookupResponse.data, { vin: this.selectedVehicleVin, - noCompensation: this.noCompensationForSelectedVehicle, + noCoverage: this.noCoverageForSelectedVehicle, deductible: this.deductibleForSelectedVehicle, repairWaived: this.repairWaivedForSelectedVehicle }); diff --git a/src/store/index.js b/src/store/index.js index 648832b9..0e662b91 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -58,7 +58,7 @@ const getDefaultState = () => damageState: null, damageCity: null, isDamageGlassOnly: null, - noCompensation: null, + noCoverage: null, deductible: { repair: null, // numerical value; how much customer owes on deductible in repair case replace: null // numerical value; how much customer owes on deductible in replace case, @@ -394,61 +394,68 @@ export const useMainStore = defineStore({ registerClaim() { // TODO: replace place holder correlationId with the real thing const placeHolderCorrelationId = '00000000-0000-0000-0000-000000000000'; + const nonNumberCharRegex = /[^0-9]/g; globalMethods.callHttpClient({ method: endpoints.RegisterClaim.method, endpoint: endpoints.RegisterClaim.url, payload: - { - correlationId: placeHolderCorrelationId, - accountNumber: this.issConfig.accountNumber?.toString() ?? '', - insured: { - firstName: this.order.customer.firstName, - lastName: this.order.customer.lastName, - address: { - addressLine1: this.order.customer.address.streetAddress, - addressLine2: this.order.customer.address.streetAddress2, - city: this.order.customer.address.city, - state: this.order.customer.address.state, - zipCode: this.order.customer.address.zipCode, - country: 'US' // TODO set from store - }, - homePhone: { - number: this.order.customer.phoneNumber - } - }, - caller: { - homePhone: {} - }, - policyInfo: { - policyNumber: this.order.policy.policyNumber, - safelitePolicy: { - policies: [] - } - }, - lossInfo: { - dateOfLoss: this.order.policy.dateOfLoss, - location: { - city: this.order.policy.damageCity, - state: this.order.policy.damageState, - country: 'US' // TODO set from store - }, - vehicle: { - year: this.order.vehicle.year?.toString() ?? '', - make: this.order.vehicle.make, - model: this.order.vehicle.model, - vin: this.order.vehicle.vin - } - }, - damageDescription: this.order.policy.damageCause - } + { + correlationId: placeHolderCorrelationId, + accountNumber: this.issConfig.accountNumber?.toString() ?? '', + insured: { + firstName: this.order.customer.firstName, + lastName: this.order.customer.lastName, + address: { + addressLine1: this.order.customer.address.streetAddress, + addressLine2: this.order.customer.address.streetAddress2, + city: this.order.customer.address.city, + state: this.order.customer.address.state, + zipCode: this.order.customer.address.zipCode, + country: 'US' // TODO set from store + }, + homePhone: { + number: this.order.customer.phoneNumber?.replaceAll(nonNumberCharRegex, '') ?? '' + } + }, + driver: { + firstName: this.order.customer.firstName, + lastName: this.order.customer.lastName + }, + caller: { + homePhone: {} + }, + policyInfo: { + policyNumber: this.order.policy.policyNumber, + safelitePolicy: { + policies: [] + } + }, + lossInfo: { + dateOfLoss: this.order.policy.dateOfLoss, + location: { + city: this.order.policy.damageCity, + state: this.order.policy.damageState, + country: 'US' // TODO set from store + }, + vehicle: { + year: this.order.vehicle.year?.toString() ?? '', + make: this.order.vehicle.make, + model: this.order.vehicle.model, + vin: this.order.vehicle.vin + }, + damageDescription: this.order.policy.damageCause + } + } }).then((response) => { const registerClaimFailed = response.data.isError; this.order.payment.insuranceCoverage.isVerified = !registerClaimFailed; - this.order.payment.insuranceCoverage.coverageStatus = registerClaimFailed - ? coverageStatuses.PENDING - : this.policy.noCompensation - ? coverageStatuses.NO_COMP - : coverageStatuses.VERIFIED; + if (registerClaimFailed) { + this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; + } else if (this.policy.noCoverage) { + this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.NO_COMP; + } else { + this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED; + } }, (error) => { this.order.payment.insuranceCoverage.isVerified = false; this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.PENDING; @@ -892,7 +899,7 @@ export const useMainStore = defineStore({ this.order.vehicle.imageColor = vehicle.imageVifColor; // These could be undefined - this.order.policy.noCompensation = vehicle.noCoverage; + this.order.policy.noCoverage = vehicle.noCoverage; this.order.policy.deductible.replace = vehicle.deductible; this.order.policy.deductible.repair = vehicle?.repairWaived ?? false ? 0 : vehicle.deductible; diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 8a629fdc..dcaf2db2 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1,32 +1,30 @@ -import { useMainStore } from '@/store'; -import { createApp } from 'vue'; -import { setActivePinia, createPinia } from "pinia"; -import globalMethods from "@/global-methods"; -import App from '@/App'; -import { getRandomString, getRandomGuid, getRandomInt, getRandomBoolean } from '@/helpers/data-generation'; -import { coverageStatuses } from "@/constants/coverage-statuses.js"; +import { useMainStore } from '@/store/index.js'; +import { setActivePinia, createPinia } from 'pinia'; +import { getRandomString, + getRandomGuid, + getRandomInt, + getRandomBoolean } from '@/helpers/data-generation.js'; +import { coverageStatuses } from '@/constants/coverage-statuses.js'; +import globalMethods from '@/global-methods.js'; -describe("Store", () => { +describe('Store', () => { let store; - const vueApp = createApp(App); - beforeEach(() => { const pinia = createPinia(); setActivePinia(pinia); - vueApp.use(pinia); store = useMainStore(); store.applicationUser.eventBus = []; jest.resetAllMocks(); }); - it("Should Store Vehicle Year", () => { - let testYear = "2001"; + it('Should Store Vehicle Year', () => { + const testYear = '2001'; store.updateVehicleYear(testYear); expect(store.order.vehicle.year).toEqual(testYear); }); - it("Should add events to the bus", () => { + it('Should add events to the bus', () => { // Arrange const category = getRandomString(1, 25); const subCategory = getRandomString(5, 20); @@ -34,15 +32,15 @@ describe("Store", () => { const copy = getRandomString(5, 25); const headline = getRandomString(5, 25); const type = getRandomString(5, 15); - let event = { - category: category, - subCategory: subCategory, + const event = { + category, + subCategory, eventValue: { - isDismissible: isDismissible, + isDismissible, messageCopy: copy, messageHeadline: headline, - type: type, - }, + type + } }; // Act @@ -52,7 +50,7 @@ describe("Store", () => { expect(store.applicationUser.eventBus[0]).toEqual(event); }); - it("Should remove events from the bus", () => { + it('Should remove events from the bus', () => { // Arrange const category = getRandomString(1, 25); const subCategory = getRandomString(5, 20); @@ -60,15 +58,15 @@ describe("Store", () => { const copy = getRandomString(5, 25); const headline = getRandomString(5, 25); const type = getRandomString(5, 15); - let event = { - category: category, - subCategory: subCategory, + const event = { + category, + subCategory, eventValue: { - isDismissible: isDismissible, + isDismissible, messageCopy: copy, messageHeadline: headline, - type: type, - }, + type + } }; store.addEventToBus(event); @@ -82,7 +80,7 @@ describe("Store", () => { expect(store.applicationUser.eventBus.length).toBe(0); }); - it("Should return correct event using the getter function eventBusItem", () => { + it('Should return correct event using the getter function eventBusItem', () => { // Arrange const category = getRandomString(1, 25); const subCategory = getRandomString(5, 20); @@ -90,60 +88,60 @@ describe("Store", () => { const copy = getRandomString(5, 25); const headline = getRandomString(5, 25); const type = getRandomString(5, 15); - let event = { - category: category, - subCategory: subCategory, + const event = { + category, + subCategory, eventValue: { - isDismissible: isDismissible, + isDismissible, messageCopy: copy, messageHeadline: headline, - type: type, - }, + type + } }; store.addEventToBus(event); // Act - const actual = store.eventBusItem(event.category, event.subCategory) + const actual = store.eventBusItem(event.category, event.subCategory); // Assert expect(actual).toEqual(event.eventValue); }); - it("UpdateVehicle should merge vehicle with response object", () => { + it('UpdateVehicle should merge vehicle with response object', () => { // Arrange - const carId = getRandomString(10,14); - const category = getRandomString(3,7); + const carId = getRandomString(10, 14); + const category = getRandomString(3, 7); const year = getRandomInt(1960, 2023); - const make = getRandomString(4,10); - const model = getRandomString(4,10); - const style = getRandomString(4,15); - const imageUrl = getRandomString(50,100); - const imageVifNumber = getRandomInt(10000,99999).toString(); - const imageColor = getRandomString(4,10); + const make = getRandomString(4, 10); + const model = getRandomString(4, 10); + const style = getRandomString(4, 15); + const imageUrl = getRandomString(50, 100); + const imageVifNumber = getRandomInt(10000, 99999).toString(); + const imageColor = getRandomString(4, 10); const providedVehicle = { - carId: carId, - category: category, - year: year, - make: make, - model: model, - style: style, - imageUrl: imageUrl, - imageVifNumber: imageVifNumber, + carId, + category, + year, + make, + model, + style, + imageUrl, + imageVifNumber, imageVifColor: imageColor }; const expectedVehicle = { - carId: carId, - category: category, - year: year, - make: make, - model: model, - style: style, - imageUrl: imageUrl, - imageVifNumber: imageVifNumber, - imageColor: imageColor - } + carId, + category, + year, + make, + model, + style, + imageUrl, + imageVifNumber, + imageColor + }; // Act store.updateVehicle(providedVehicle); @@ -152,18 +150,18 @@ describe("Store", () => { expect(store.order.vehicle).toMatchObject(expectedVehicle); }); - it("UpdateVehicle should set policy values appropriately with repair waived", () => { + it('UpdateVehicle should set policy values appropriately with repair waived', () => { // Arrange - const noCompensation = getRandomBoolean(); - const deductible = getRandomInt(1,500); + const noCoverage = getRandomBoolean(); + const deductible = getRandomInt(1, 500); const vehicle = { - noCoverage: noCompensation, - deductible: deductible, + noCoverage, + deductible, repairWaived: true }; const expectedPolicy = { - noCompensation: noCompensation, + noCoverage, deductible: { replace: deductible, repair: 0 @@ -177,18 +175,18 @@ describe("Store", () => { expect(store.order.policy).toMatchObject(expectedPolicy); }); - it("UpdateVehicle should set policy values appropriately with repair not waived", () => { + it('UpdateVehicle should set policy values appropriately with repair not waived', () => { // Arrange - const noCompensation = getRandomBoolean(); - const deductible = getRandomInt(1,500); + const noCoverage = getRandomBoolean(); + const deductible = getRandomInt(1, 500); const vehicle = { - noCoverage: noCompensation, - deductible: deductible, + noCoverage, + deductible, repairWaived: false }; const expectedPolicy = { - noCompensation: noCompensation, + noCoverage, deductible: { replace: deductible, repair: deductible @@ -203,27 +201,27 @@ describe("Store", () => { }); // TODO update test to work also checking store values - it("setVehicle should call globalMethods.callHttpClient", () => { + it('setVehicle should call globalMethods.callHttpClient', () => { // Arrange - const carId = getRandomString(10,14); - const category = getRandomString(3,7); + const carId = getRandomString(10, 14); + const category = getRandomString(3, 7); const year = getRandomInt(1960, 2023); - const make = getRandomString(4,10); - const model = getRandomString(4,10); - const style = getRandomString(4,15); - const imageUrl = getRandomString(50,100); - const imageVifNumber = getRandomInt(10000,99999).toString(); - const imageColor = getRandomString(4,10); + const make = getRandomString(4, 10); + const model = getRandomString(4, 10); + const style = getRandomString(4, 15); + const imageUrl = getRandomString(50, 100); + const imageVifNumber = getRandomInt(10000, 99999).toString(); + const imageColor = getRandomString(4, 10); const response = { data: { - carId: carId, - category: category, - year: year, - make: make, - model: model, - style: style, - imageUrl: imageUrl, - imageVifNumber: imageVifNumber, + carId, + category, + year, + make, + model, + style, + imageUrl, + imageVifNumber, imageVifColor: imageColor } }; @@ -238,16 +236,16 @@ describe("Store", () => { expect(returned).resolves.toMatchObject(response); }); - it("saveVehicleDamage with windshield repair should update damage with number of chips not null", () => { + it('saveVehicleDamage with windshield repair should update damage with number of chips not null', () => { // Arrange - const glassName = getRandomString(4,10); - const glassLocation = getRandomString(5,15); + const glassName = getRandomString(4, 10); + const glassLocation = getRandomString(5, 15); const isWindshieldRepair = true; const selectedGlassToReplace = [{ - glassName: glassName, - glassLocation: glassLocation + glassName, + glassLocation }]; - const chipCount = getRandomInt(0,3); + const chipCount = getRandomInt(0, 3); // Act store.saveVehicleDamage(isWindshieldRepair, selectedGlassToReplace, chipCount); @@ -258,16 +256,16 @@ describe("Store", () => { expect(store.order.damage.numberOfChips).toEqual(chipCount); }); - it("saveVehicleDamage without windshield repair should update damage with number of chips null", () => { + it('saveVehicleDamage without windshield repair should update damage with number of chips null', () => { // Arrange - const glassName = getRandomString(4,10); - const glassLocation = getRandomString(5,15); + const glassName = getRandomString(4, 10); + const glassLocation = getRandomString(5, 15); const isWindshieldRepair = false; const selectedGlassToReplace = [{ - glassName: glassName, - glassLocation: glassLocation + glassName, + glassLocation }]; - const chipCount = getRandomInt(0,3); + const chipCount = getRandomInt(0, 3); const expectedChipCount = null; @@ -280,83 +278,83 @@ describe("Store", () => { expect(store.order.damage.numberOfChips).toEqual(expectedChipCount); }); - it("should return registration data if available", () => { - //Arrange - const streetAddress = getRandomString(5,15); - const city = getRandomString(5,15); - const state = getRandomString(5,10); - const zipCode = getRandomInt(10000,99999).toString(); - const firstName = getRandomString(5,20); - const lastName = getRandomString(5,20); + it('should return registration data if available', () => { + // Arrange + const streetAddress = getRandomString(5, 15); + const city = getRandomString(5, 15); + const state = getRandomString(5, 10); + const zipCode = getRandomInt(10000, 99999).toString(); + const firstName = getRandomString(5, 20); + const lastName = getRandomString(5, 20); const expected = { addressQuestions: { - streetAddress: streetAddress, - city: city, - state: state, - zipCode: zipCode, + streetAddress, + city, + state, + zipCode }, - firstName: firstName, - lastName: lastName, - } + firstName, + lastName + }; store.order.vehicle.registration = { licensePlate: null, address: streetAddress, - city: city, - state: state, - zipCode: zipCode, - firstName: firstName, - lastName: lastName, + city, + state, + zipCode, + firstName, + lastName }; - //Act + // Act const actual = store.customerData; - //Assert + // Assert expect(actual).toEqual(expected); }); - it("should return customer data if registration data unavailable", () => { - //Arrange - const address = getRandomString(1,25); - const city = getRandomString(5,20); - const state = getRandomString(4,20); + it('should return customer data if registration data unavailable', () => { + // Arrange + const address = getRandomString(1, 25); + const city = getRandomString(5, 20); + const state = getRandomString(4, 20); const zipCode = getRandomInt(10000, 99999).toString(); - const firstName = getRandomString(5,25); - const lastName = getRandomString(5,25); + const firstName = getRandomString(5, 25); + const lastName = getRandomString(5, 25); const expected = { addressQuestions: { streetAddress: address, - city: city, - state: state, - zipCode: zipCode, + city, + state, + zipCode }, - firstName: firstName, - lastName: lastName, - } + firstName, + lastName + }; store.order.vehicle.registration.address = null; store.order.customer = { address: { streetAddress: address, - city: city, - state: state, - zipCode: zipCode + city, + state, + zipCode }, - firstName: firstName, - lastName: lastName + firstName, + lastName }; - //Act + // Act const actual = store.customerData; - //Assert + // Assert expect(actual).toMatchObject(expected); }); - describe("registerClaim method", () => { - it("successful response with no coverage => isVerified true and coverage status no comp", async () => { + describe('registerClaim method', () => { + it('successful response with no coverage => isVerified true and coverage status no comp', async () => { // Arrange const response = { data: { @@ -369,7 +367,7 @@ describe("Store", () => { deductible: 0 } }; - store.policy.noCompensation = true; + store.policy.noCoverage = true; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(response)); @@ -382,7 +380,7 @@ describe("Store", () => { expect(store.payment.insuranceCoverage.coverageStatus).toBe(coverageStatuses.NO_COMP); }); - it("successful response with coverage => isVerified true and coverage status verified", async () => { + it('successful response with coverage => isVerified true and coverage status verified', async () => { // Arrange const response = { data: { @@ -395,7 +393,7 @@ describe("Store", () => { deductible: 0 } }; - store.policy.noCompensation = false; + store.policy.noCoverage = false; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(response)); @@ -406,9 +404,9 @@ describe("Store", () => { expect(globalMethods.callHttpClient).toHaveBeenCalled(); expect(store.payment.insuranceCoverage.isVerified).toBe(true); expect(store.payment.insuranceCoverage.coverageStatus).toBe(coverageStatuses.VERIFIED); - }) + }); - it("Call to client returns exception, resulting in object with error property being returned", async () => { + it('Call to client returns exception, resulting in object with error property being returned', async () => { // Arrange globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject());