diff --git a/src/store/index.js b/src/store/index.js index 841d8795..e7fb7846 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -654,7 +654,7 @@ export const useMainStore = defineStore({ partType: lineItem.partType })); const glassPieces = order.damage.glassToReplace - ? convertGlassPieceToBackEndCompatibleFormat(order.damage.glassToReplace) + ? convertGlassPieceNamingForApi(order.damage.glassToReplace) : []; const payload = { startDate, @@ -714,7 +714,7 @@ export const useMainStore = defineStore({ partType: lineItem.partType })); const glassPieces = order.damage.glassToReplace - ? convertGlassPieceToBackEndCompatibleFormat(order.damage.glassToReplace) + ? convertGlassPieceNamingForApi(order.damage.glassToReplace) : []; const payload = { providerNumber, @@ -1040,121 +1040,123 @@ export const useMainStore = defineStore({ }, loadSession() { - const { applicationUser } = this; + const { applicationUser, order, issConfig } = this; // TODO how to get savedSessionId for a duplicate referral? return new Promise((resolve, reject) => { globalMethods.callHttpClient({ method: endpoints.LoadSession.method, endpoint: endpoints.LoadSession.url, payload: { - savedSessionId: this.applicationUser.savedSessionId?.toString(), - referralNumber: this.order.referralNumber?.toString(), - referralDate: this.order.referralDate?.toString(), - parentAccountNumber: this.issConfig.parentAccountNumber, - referralCorrelationId: this.order.referralCorrelationId + savedSessionId: applicationUser.savedSessionId?.toString(), + referralNumber: order.referralNumber?.toString(), + referralDate: order.referralDate?.toString(), + parentAccountNumber: issConfig.parentAccountNumber, + referralCorrelationId: order.referralCorrelationId } }).then((result) => { - applicationUser.crmCustomerId = result?.applicationUser?.crmCustomerId; - this.applicationUser.experiments = result?.applicationUser?.experiments; - this.applicationUser.lastPageVisited = result?.applicationUser?.lastPage; - this.applicationUser.pageData = result?.applicationUser?.pageData; - this.applicationUser.savedSessionId = result?.applicationUser?.savedSessionId; // TODO this might just be what is passed - this.applicationUser.hasSentSaveQuoteEmail = result?.applicationUser?.hasSentSaveQuoteEmail; + if (!result) { + // TODO how should we handle this case? + return resolve(result); + } + applicationUser.crmCustomerId = result.applicationUser?.crmCustomerId; + applicationUser.experiments = result.applicationUser?.experiments; + applicationUser.lastPageVisited = result.applicationUser?.lastPage; + applicationUser.pageData = result.applicationUser?.pageData; + applicationUser.savedSessionId = result.applicationUser?.savedSessionId; // TODO this might just be what is passed + applicationUser.hasSentSaveQuoteEmail = result.applicationUser?.hasSentSaveQuoteEmail; - this.order.vehicle.registration.licensePlate = result?.order?.vehicle?.registration?.licensePlateNumber; - this.order.vehicle.imageUrl = result?.order?.vehicle?.imageUrl; - this.order.vehicle.imageColor = result?.order?.vehicle?.imageVifColor; - this.order.vehicle.imageVifNumber = result?.order?.vehicle?.imageVifNumber; - this.order.vehicle.year = result?.order?.vehicle?.year; - this.order.vehicle.make = result?.order?.vehicle?.make; - this.order.vehicle.model = result?.order?.vehicle?.model; - this.order.vehicle.style = result?.order?.vehicle?.style; - this.order.vehicle.carId = result?.order?.vehicle?.carId; - this.order.vehicle.category = result?.order?.vehicle?.category; - this.order.vehicle.vin = result?.order?.vehicle?.vin; + order.vehicle.registration.licensePlate = result.order?.vehicle?.registration?.licensePlateNumber; + order.vehicle.imageUrl = result.order?.vehicle?.imageUrl; + order.vehicle.imageColor = result.order?.vehicle?.imageVifColor; + order.vehicle.imageVifNumber = result.order?.vehicle?.imageVifNumber; + order.vehicle.year = result.order?.vehicle?.year; + order.vehicle.make = result.order?.vehicle?.make; + order.vehicle.model = result.order?.vehicle?.model; + order.vehicle.style = result.order?.vehicle?.style; + order.vehicle.carId = result.order?.vehicle?.carId; + order.vehicle.category = result.order?.vehicle?.category; + order.vehicle.vin = result.order?.vehicle?.vin; - this.order.customer.emailAddress = result?.order?.customer?.emailAddress; - this.order.customer.firstName = result?.order?.policy?.policyHolder?.policyFirstName; - this.order.customer.lastName = result?.order?.policy?.policyHolder?.policyLastName; - this.order.customer.phoneNumber = result?.order?.policy?.policyHolder?.policyPhoneNumber; - this.order.customer.address.state = result?.order?.policy?.policyHolder?.policyState; + order.customer.emailAddress = result.order?.customer?.emailAddress; + order.customer.firstName = result.order?.policy?.policyHolder?.policyFirstName; + order.customer.lastName = result.order?.policy?.policyHolder?.policyLastName; + order.customer.phoneNumber = result.order?.policy?.policyHolder?.policyPhoneNumber; - this.order.customer.address.streetAddress = result?.order?.customer?.address?.streetAddress; - this.order.customer.address.streetAddress2 = result?.order?.customer?.address?.streetAddress2; - this.order.customer.address.city = result?.order?.customer?.address?.city; - // TODO ask Bill about this - // this.order.customer.address.state = result?.order?.customer?.address?.state; - this.order.customer.address.zipCode = result?.order?.customer?.address?.zipCode; + order.customer.address.streetAddress = result.order?.customer?.address?.streetAddress; + order.customer.address.streetAddress2 = result.order?.customer?.address?.streetAddress2; + order.customer.address.city = result.order?.customer?.address?.city; + order.customer.address.state = result.order?.customer?.address?.state; + order.customer.address.zipCode = result.order?.customer?.address?.zipCode; - this.order.damage.isRepair = result?.order?.damage?.isRepair; - this.order.damage.numberOfChips = result?.order?.damage?.numberOfChips; - this.order.damage.glassToReplace = result?.order?.damage?.glassToReplace; // TODO this might need transformed - this.order.damage.capabilityQuestionAnswers = result?.order?.damage?.capabilityQuestionAnswers; - this.order.damage.moldingQuestionAnswers = result?.order?.damage?.moldingQuestionAnswers; - this.order.damage.partQuestionAnswers = result?.order?.damage?.partQuestionAnswers; + order.damage.isRepair = result.order?.damage?.isRepair; + order.damage.numberOfChips = result.order?.damage?.numberOfChips; + order.damage.glassToReplace = result.order?.damage?.glassToReplace; + order.damage.capabilityQuestionAnswers = result.order?.damage?.capabilityQuestionAnswers; + order.damage.moldingQuestionAnswers = result.order?.damage?.moldingQuestionAnswers; + order.damage.partQuestionAnswers = result.order?.damage?.partQuestionAnswers; - this.order.policy.policyNumber = result?.order?.policy?.policyNumber; - this.order.policy.policyZipCode = result?.order?.policy?.policyZipCode; - this.order.policy.noCoverage = result?.order?.policy?.noCoverage; - this.order.policy.policyLookupSuccessful = result?.order?.policy?.policyLookupSuccessful; // TODO probably don't need to load this - this.order.policy.dateOfLoss = result?.order?.damage?.dateOfLoss; - this.order.policy.damageCause = result?.order?.damage?.damageCause; - this.order.policy.damageState = result?.order?.damage?.damageState; - this.order.policy.damageCity = result?.order?.damage?.damageCity; - this.order.policy.isDamageGlassOnly = result?.order?.damage?.isDamageGlassOnly; + order.policy.policyNumber = result.order?.policy?.policyNumber; + order.policy.policyZipCode = result.order?.policy?.policyZipCode; + order.policy.noCoverage = result.order?.policy?.noCoverage; + order.policy.policyLookupSuccessful = result.order?.policy?.policyLookupSuccessful; // TODO probably don't need to load this + order.policy.dateOfLoss = result.order?.damage?.dateOfLoss; + order.policy.damageCause = result.order?.damage?.damageCause; + order.policy.damageState = result.order?.damage?.damageState; + order.policy.damageCity = result.order?.damage?.damageCity; + order.policy.isDamageGlassOnly = result.order?.damage?.isDamageGlassOnly; - this.order.originalDeductible = result?.order?.policy?.originalDeductible; - this.order.currentDeductible = result?.order?.policy?.currentDeductible; + order.originalDeductible = result.order?.policy?.originalDeductible; + order.currentDeductible = result.order?.policy?.currentDeductible; - this.order.lineItems.glassParts = result?.order?.lineItems?.glassParts; + order.lineItems.glassParts = result.order?.lineItems?.glassParts; // TODO otherParts - this.order.lineItems.supportingItems = result?.order?.lineItems?.supportingItems; - this.order.lineItems.vaps = result?.order?.lineItems?.vaps; + order.lineItems.supportingItems = result.order?.lineItems?.supportingItems; + order.lineItems.vaps = result.order?.lineItems?.vaps; - this.order.payment.isInsurance = result?.order?.payment?.isInsurance; - this.order.payment.insuranceCoverage.isVerified = result?.order?.payment?.insuranceCoverage?.isVerified; - this.order.payment.insuranceCoverage.coverageStatus = result?.order?.payment?.insuranceCoverage?.coverageStatus; - this.order.payment.parentAccountNumber = result?.order?.payment?.parentAccountNumber; - this.issConfig.parentAccountNumber = result?.order?.payment?.parentAccountNumber; - // TODO result.order.payment.insuranceCoverage.claimNumber + order.payment.isInsurance = result.order?.payment?.isInsurance; + order.payment.insuranceCoverage.isVerified = result.order?.payment?.insuranceCoverage?.isVerified; + order.payment.insuranceCoverage.coverageStatus = result.order?.payment?.insuranceCoverage?.coverageStatus; + order.payment.parentAccountNumber = result.order?.payment?.parentAccountNumber; + issConfig.parentAccountNumber = result.order?.payment?.parentAccountNumber; + order.payment.insuranceCoverage.claimNumber = result.order?.payment?.insuranceCoverage?.claimNumber; - this.order.serviceLocation.address = result?.order?.serviceLocation?.streetAddress; - this.order.serviceLocation.address2 = result?.order?.serviceLocation?.streetAddress2; - this.order.serviceLocation.city = result?.order?.serviceLocation?.city; - this.order.serviceLocation.state = result?.order?.serviceLocation?.state; - this.order.serviceLocation.zipCode = result?.order?.serviceLocation?.zipCode; - this.order.serviceLocation.zipCodeCtu = result?.order?.serviceLocation?.zipCodeCtu; - this.order.serviceLocation.appointmentType = result?.order?.serviceLocation?.appointmentType; - this.order.serviceLocation.isVehicleProtected = result?.order?.serviceLocation?.isVehicleProtected; - this.order.serviceLocation.provider.providerNumber = result?.order?.serviceLocation?.provider?.providerNumber; - this.order.serviceLocation.provider.address.streetAddress = result?.order?.serviceLocation?.provider?.address?.streetAddress; - this.order.serviceLocation.provider.address.city = result?.order?.serviceLocation?.provider?.address?.city; - this.order.serviceLocation.provider.address.state = result?.order?.serviceLocation?.provider?.address?.state; - this.order.serviceLocation.provider.address.zipCode = result?.order?.serviceLocation?.provider?.address?.zipCode; - this.order.serviceLocation.provider.address.zipCodeCtu = result?.order?.serviceLocation?.provider?.address?.zipCodeCtu; + order.serviceLocation.address = result.order?.serviceLocation?.streetAddress; + order.serviceLocation.address2 = result.order?.serviceLocation?.streetAddress2; + order.serviceLocation.city = result.order?.serviceLocation?.city; + order.serviceLocation.state = result.order?.serviceLocation?.state; + order.serviceLocation.zipCode = result.order?.serviceLocation?.zipCode; + order.serviceLocation.zipCodeCtu = result.order?.serviceLocation?.zipCodeCtu; + order.serviceLocation.appointmentType = result.order?.serviceLocation?.appointmentType; + order.serviceLocation.isVehicleProtected = result.order?.serviceLocation?.isVehicleProtected; + order.serviceLocation.provider.providerNumber = result.order?.serviceLocation?.provider?.providerNumber; + order.serviceLocation.provider.address.streetAddress = result.order?.serviceLocation?.provider?.address?.streetAddress; + order.serviceLocation.provider.address.city = result.order?.serviceLocation?.provider?.address?.city; + order.serviceLocation.provider.address.state = result.order?.serviceLocation?.provider?.address?.state; + order.serviceLocation.provider.address.zipCode = result.order?.serviceLocation?.provider?.address?.zipCode; + order.serviceLocation.provider.address.zipCodeCtu = result.order?.serviceLocation?.provider?.address?.zipCodeCtu; - this.order.contactInfo.firstName = result?.order?.customer?.firstName; - this.order.contactInfo.lastName = result?.order?.customer?.lastName; - this.order.contactInfo.emailAddress = result?.order?.customer?.emailAddress; - this.order.contactInfo.phoneNumber = result?.order?.customer?.phoneNumber; - this.order.contactInfo.requestTextUpdates = result?.order?.customer?.isSmsOptIn; // TODO confirm - this.order.contactInfo.notesForTechnician = result?.order?.serviceLocation?.techNotes; + order.contactInfo.firstName = result.order?.customer?.firstName; + order.contactInfo.lastName = result.order?.customer?.lastName; + order.contactInfo.emailAddress = result.order?.customer?.emailAddress; + order.contactInfo.phoneNumber = result.order?.customer?.phoneNumber; + order.contactInfo.requestTextUpdates = result.order?.customer?.isSmsOptIn; // TODO confirm + order.contactInfo.notesForTechnician = result.order?.serviceLocation?.techNotes; // TODO service phone number ?? // TODO isSmsOptIn service ?? - this.order.schedule.date = result?.order?.schedule?.date; - this.order.schedule.startTime = result?.order?.schedule?.startTime; - this.order.schedule.endTime = result?.order?.schedule?.endTime; - this.order.schedule.routeCode = result?.order?.schedule?.routeCode; - this.order.schedule.jobMaxMinutes = result?.order?.schedule?.jobMaxMinutes; - // TODO result.order.schedule.jobMinMinutes + order.schedule.date = result.order?.schedule?.date; + order.schedule.startTime = result.order?.schedule?.startTime; + order.schedule.endTime = result.order?.schedule?.endTime; + order.schedule.routeCode = result.order?.schedule?.routeCode; + order.schedule.jobMaxMinutes = result.order?.schedule?.jobMaxMinutes; + order.schedule.jobMinMinutes = result.order?.schedule?.jobMinMinutes; - this.order.referralNumber = result?.order?.referralNumber; - this.order.referralDate = result?.order?.referralDate; - this.order.referralCorrelationId = result?.order?.referralCorrelationId; - this.order.referralSequenceNumber = result?.order?.referralSequenceNumber; - this.order.eon = result?.order?.eon; - // TODO this.order.workOrderNumber not set + order.referralNumber = result.order?.referralNumber; + order.referralDate = result.order?.referralDate; + order.referralCorrelationId = result.order?.referralCorrelationId; + order.referralSequenceNumber = result.order?.referralSequenceNumber; + order.eon = result.order?.eon; + // TODO order.workOrderNumber not set, but this likely is not an issue since WON => will not return return resolve(result); }, (error) => { console.log(error); @@ -1984,44 +1986,30 @@ function sortArrayOfObjectsByPropertyValue(arrayOfObjects, propertyName) { } function convertGlassPieceNamingForApi(glassArray) { - if (!glassArray || glassArray.length === 0) return []; - // check if array already converted. (likely when a session has been saved previously and then reloaded) if (glassArray[0].location !== undefined) { return glassArray; } - const converted = []; - glassArray.forEach((glass) => { - converted.push({ - location: glass.glassLocation, - name: glass.glassName - }); - }); - return converted; + return glassArray?.map((glass) => new { + location: glass.glassLocation, + name: glass.glassName + }()) ?? []; } function convertResultsForApi(resultsArray) { - if (!resultsArray) return []; - const converted = []; - resultsArray.forEach((answer) => { - converted.push({ - location: answer.glassLocation, - name: answer.glassName, - result: answer.result - }); - }); - return converted; + return resultsArray?.map((answer) => new { + location: answer.glassLocation, + name: answer.glassName, + result: answer.result + }()) ?? []; } function convertGlassPieceNamingFromApi(glassArray) { - glassArray.forEach((glass) => { - glass.glassLocation = glass.glassPiece.location; - glass.glassName = glass.glassPiece.name; - delete glass.glassPiece; - return glass; - }); - return glassArray; + return glassArray?.map((glass) => new { + glassLocation: glass.glassPiece.location, + glassName: glass.glassPiece.name + }()) ?? []; } function addPricesToLineItems(lineItems, pricingLineItems) { @@ -2078,13 +2066,6 @@ function buildQueryStringParameterFromArrayOfComplexObjects(arrayOfObjects, para return queryStringParameter.slice(0, -1); } -function convertGlassPieceToBackEndCompatibleFormat(glassPieces) { - return glassPieces.map((glassPiece) => ({ - location: glassPiece.glassLocation, - name: glassPiece.glassName - })); -} - function providersEqual(providerA, providerB) { return ( providerA.providerNumber === providerB.providerNumber diff --git a/src/store/store.spec.js b/src/store/store.spec.js index fab81f5f..138a87b7 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1,5 +1,5 @@ -import { useMainStore } from '@/store/index.js'; import { setActivePinia, createPinia } from 'pinia'; +import { useMainStore } from '@/store/index.js'; import globalMethods from '@/global-methods.js'; import { getRandomString, getRandomGuid, getRandomInt, getRandomBoolean } from '@/helpers/data-generation.js'; import coverageStatuses from '@/constants/coverage-statuses.js'; @@ -10,9 +10,11 @@ describe('Store', () => { let store; beforeEach(() => { + console.log('HI'); const pinia = createPinia(); setActivePinia(pinia); store = useMainStore(); + store.$reset(); store.applicationUser.eventBus = []; jest.resetAllMocks(); }); @@ -952,7 +954,7 @@ describe('Store', () => { }); }); - describe('loadSession method', () => { + describe.only('loadSession method', () => { describe('successful method call', () => { const applicationUser = { crmCustomerId: getRandomString(6, 6), @@ -1218,7 +1220,7 @@ describe('Store', () => { expect(store.order.customer.address.streetAddress).toBe(customer.address.streetAddress); expect(store.order.customer.address.streetAddress2).toBe(customer.address.streetAddress2); expect(store.order.customer.address.city).toBe(customer.address.city); - expect(store.order.customer.address.state).toBe(policy.policyHolder.policyState); + expect(store.order.customer.address.state).toBe(customer.address.state); expect(store.order.customer.address.zipCode).toBe(customer.address.zipCode); expect(store.order.customer.firstName).toBe(policy.policyHolder.policyFirstName); expect(store.order.customer.lastName).toBe(policy.policyHolder.policyLastName); @@ -1275,6 +1277,7 @@ describe('Store', () => { expect(store.order.payment.insuranceCoverage.coverageStatus).toBe(payment.insuranceCoverage.coverageStatus); expect(store.order.payment.parentAccountNumber).toBe(payment.parentAccountNumber); expect(store.issConfig.parentAccountNumber).toBe(payment.parentAccountNumber); + expect(store.order.payment.insuranceCoverage.claimNumber).toBe(payment.insuranceCoverage.claimNumber); }); it('sets expected contactInfo data', async () => { // Arrange