Merge pull request #1302 from Safelite/feature/humphries/INSR-523
INSR-523: If flag is on, includes memberNumber in all coverage requests
This commit is contained in:
commit
8c65680c44
3 changed files with 232 additions and 87 deletions
|
|
@ -226,6 +226,10 @@ export default {
|
|||
this.mainStore.issConfig.hiddenFields.phoneNumber = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (clientFlags.CallClaimRegistrationAtEnd) {
|
||||
this.mainStore.issConfig.callClaimRegistrationAtEnd = true;
|
||||
}
|
||||
}
|
||||
},
|
||||
combineClientParameters(configParams, queryStringParams) {
|
||||
|
|
|
|||
|
|
@ -279,7 +279,8 @@ export const getDefaultState = () => ({
|
|||
buildInfo: (typeof __BUILD_INFO__ !== 'undefined') ? __BUILD_INFO__ : null, // Contains the build info for the website, set during the build process. Version, Time, Git info etc....
|
||||
siteType: null, // SiteType / SubType the site is set to (Essential/Advanced).
|
||||
enableNoCompQuote: false,
|
||||
useMemberNumber: false // Indicates if member number should be included for policy lookup purposes
|
||||
useMemberNumber: false, // Indicates if member number should be included for coverage related purposes
|
||||
callClaimRegistrationAtEnd: false, // Indicates if claim registration should be called at the end of the flow.
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -646,72 +647,76 @@ export const useMainStore = defineStore({
|
|||
const { isITAC } = this;
|
||||
|
||||
try {
|
||||
const payload = {
|
||||
referralCorrelationId: this.order.referralCorrelationId,
|
||||
referralDate: this.order.referralDate,
|
||||
referralNumber: this.order.referralNumber,
|
||||
accountNumber: this.order.parentAccountNumber?.toString() ?? '',
|
||||
policyData: this.order.policy.policyData,
|
||||
// TODO: Remove this isRepair flag from the payload after coverage service updates are deployed.
|
||||
// This is here in case we have to deploy site for other fixes before coverage service gets updated.
|
||||
isRepair: this.order.damage.isRepair,
|
||||
isItac: isITAC,
|
||||
sourceSystem: applicationConfig.APPLICATION_NAME,
|
||||
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.contactInfo.homePhone?.replaceAll(nonNumberCharRegex, '') ?? ''
|
||||
}
|
||||
},
|
||||
driver: {
|
||||
firstName: this.order.customer.firstName,
|
||||
lastName: this.order.customer.lastName
|
||||
},
|
||||
caller: {
|
||||
homePhone: {}
|
||||
},
|
||||
policyInfo: {
|
||||
policyNumber: this.order.policy.policyNumber,
|
||||
safelitePolicy: {
|
||||
policies: []
|
||||
},
|
||||
actualDeductible: this.currentDeductible?.toString() ?? '',
|
||||
currentRepairDeductible: this.order.currentDeductible.repair,
|
||||
currentReplaceDeductible: this.order.currentDeductible.replace,
|
||||
company: this.order.customer.companyCode
|
||||
},
|
||||
lossInfo: {
|
||||
dateOfLoss: this.order.policy.dateOfLoss,
|
||||
isRepair: this.order.damage.isRepair,
|
||||
location: {
|
||||
city: this.order.policy.damageCity,
|
||||
state: this.order.policy.damageState,
|
||||
country: 'US' // TODO set from store
|
||||
},
|
||||
vehicle: {
|
||||
id: this.order.vehicle.policyVehicleId?.toString() ?? '',
|
||||
year: this.order.vehicle.year?.toString() ?? '',
|
||||
make: this.order.vehicle.make,
|
||||
model: this.order.vehicle.model,
|
||||
vin: this.order.vehicle.vin
|
||||
},
|
||||
cause: this.order.policy.damageCause,
|
||||
damageDescription: this.order.policy.damageCause
|
||||
}
|
||||
};
|
||||
// Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name
|
||||
if (this.issConfig.useMemberNumber) {
|
||||
payload.memberNumber = this.order.policy.policyNumber;
|
||||
}
|
||||
const response = await globalMethods.callHttpClient({
|
||||
method: endpoints.RegisterClaim.method,
|
||||
endpoint: endpoints.RegisterClaim.url,
|
||||
payload:
|
||||
{
|
||||
referralCorrelationId: this.order.referralCorrelationId,
|
||||
referralDate: this.order.referralDate,
|
||||
referralNumber: this.order.referralNumber,
|
||||
accountNumber: this.order.parentAccountNumber?.toString() ?? '',
|
||||
policyData: this.order.policy.policyData,
|
||||
// TODO: Remove this isRepair flag from the payload after coverage service updates are deployed.
|
||||
// This is here in case we have to deploy site for other fixes before coverage service gets updated.
|
||||
isRepair: this.order.damage.isRepair,
|
||||
isItac: isITAC,
|
||||
sourceSystem: applicationConfig.APPLICATION_NAME,
|
||||
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.contactInfo.homePhone?.replaceAll(nonNumberCharRegex, '') ?? ''
|
||||
}
|
||||
},
|
||||
driver: {
|
||||
firstName: this.order.customer.firstName,
|
||||
lastName: this.order.customer.lastName
|
||||
},
|
||||
caller: {
|
||||
homePhone: {}
|
||||
},
|
||||
policyInfo: {
|
||||
policyNumber: this.order.policy.policyNumber,
|
||||
safelitePolicy: {
|
||||
policies: []
|
||||
},
|
||||
actualDeductible: this.currentDeductible.toString() ?? '',
|
||||
currentRepairDeductible: this.order.currentDeductible.repair,
|
||||
currentReplaceDeductible: this.order.currentDeductible.replace,
|
||||
company: this.order.customer.companyCode
|
||||
},
|
||||
lossInfo: {
|
||||
dateOfLoss: this.order.policy.dateOfLoss,
|
||||
isRepair: this.order.damage.isRepair,
|
||||
location: {
|
||||
city: this.order.policy.damageCity,
|
||||
state: this.order.policy.damageState,
|
||||
country: 'US' // TODO set from store
|
||||
},
|
||||
vehicle: {
|
||||
id: this.order.vehicle.policyVehicleId?.toString() ?? '',
|
||||
year: this.order.vehicle.year?.toString() ?? '',
|
||||
make: this.order.vehicle.make,
|
||||
model: this.order.vehicle.model,
|
||||
vin: this.order.vehicle.vin
|
||||
},
|
||||
cause: this.order.policy.damageCause,
|
||||
damageDescription: this.order.policy.damageCause
|
||||
}
|
||||
},
|
||||
payload,
|
||||
bailoutOnError: false
|
||||
});
|
||||
this.order.insuranceCoverage.claimNumber = response.data.claimNumber;
|
||||
|
|
@ -741,33 +746,39 @@ export const useMainStore = defineStore({
|
|||
glassInformation?.forEach((glassPiece) => {
|
||||
manualGlassNamesArray.push(glassPiece?.glassLocation?.toUpperCase());
|
||||
});
|
||||
|
||||
|
||||
const payload = {
|
||||
referralCorrelationId: this.order.referralCorrelationId,
|
||||
accountNumber: this.order.parentAccountNumber?.toString() ?? '',
|
||||
endorsements: endorsementAnswersForPayload,
|
||||
manualGlassNames: manualGlassNamesArray,
|
||||
policyState: this.order.customer.address.state,
|
||||
status: this.order.policy.status,
|
||||
originalDeductible: this.originalDeductible,
|
||||
currentDeductible: this.currentDeductible,
|
||||
currentRepairDeductible: this.order.currentDeductible.repair,
|
||||
currentReplaceDeductible: this.order.currentDeductible.replace,
|
||||
noCoverage: false,
|
||||
isRepair: this.order.damage.isRepair,
|
||||
policyNumber: this.order.policy.policyNumber,
|
||||
insuredFirstName: this.order.customer.firstName,
|
||||
insuredLastName: this.order.customer.lastName,
|
||||
insuredZipCode: this.order.customer.address.zipCode,
|
||||
policyVehicleId: this.order.vehicle.policyVehicleId?.toString() ?? '',
|
||||
vehicleVin: this.order.vehicle.vin,
|
||||
policyData: this.order.policy.policyData,
|
||||
isItac: this.isITAC
|
||||
};
|
||||
// Clients (i.e. USAA) may sometimes use member number, which is just policy number by a different name
|
||||
if (this.issConfig.useMemberNumber) {
|
||||
payload.memberNumber = this.order.policy.policyNumber;
|
||||
}
|
||||
|
||||
try {
|
||||
const r = await globalMethods.callHttpClient({
|
||||
method: endpoints.FinalDeductible.method,
|
||||
endpoint: endpoints.FinalDeductible.url,
|
||||
payload: {
|
||||
referralCorrelationId: this.order.referralCorrelationId,
|
||||
accountNumber: this.order.parentAccountNumber?.toString() ?? '',
|
||||
endorsements: endorsementAnswersForPayload,
|
||||
manualGlassNames: manualGlassNamesArray,
|
||||
policyState: this.order.customer.address.state,
|
||||
status: this.order.policy.status,
|
||||
originalDeductible: this.originalDeductible,
|
||||
currentDeductible: this.currentDeductible,
|
||||
currentRepairDeductible: this.order.currentDeductible.repair,
|
||||
currentReplaceDeductible: this.order.currentDeductible.replace,
|
||||
noCoverage: false,
|
||||
isRepair: this.order.damage.isRepair,
|
||||
policyNumber: this.order.policy.policyNumber,
|
||||
insuredFirstName: this.order.customer.firstName,
|
||||
insuredLastName: this.order.customer.lastName,
|
||||
insuredZipCode: this.order.customer.address.zipCode,
|
||||
policyVehicleId: this.order.vehicle.policyVehicleId?.toString() ?? '',
|
||||
vehicleVin: this.order.vehicle.vin,
|
||||
policyData: this.order.policy.policyData,
|
||||
isItac: this.isITAC
|
||||
},
|
||||
payload,
|
||||
bailoutOnError: false
|
||||
});
|
||||
this.order.policy.policyData = r.data.policyData;
|
||||
|
|
@ -2308,6 +2319,7 @@ export const useMainStore = defineStore({
|
|||
this.issConfig.enableNoCompQuote = false;
|
||||
this.issConfig.billToAccountNumber = null;
|
||||
this.issConfig.useMemberNumber = false;
|
||||
this.issConfig.callClaimRegistrationAtEnd = false;
|
||||
// NOTE: Do not wipe out build info.
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -518,6 +518,46 @@ describe('Store', () => {
|
|||
})
|
||||
}));
|
||||
});
|
||||
|
||||
it('calls api with memberNumber when useMemberNumber is true', async () => {
|
||||
// Arrange
|
||||
store.issConfig.useMemberNumber = true;
|
||||
const companyCode = getRandomString(6, 6);
|
||||
const policyNumber = getRandomString(6, 6);
|
||||
const originalDeductible = {
|
||||
replace: 500,
|
||||
repair: 0
|
||||
};
|
||||
const currentDeductible = {
|
||||
replace: 500,
|
||||
repair: 0
|
||||
};
|
||||
store.order.originalDeductible = {
|
||||
replace: originalDeductible.replace,
|
||||
repair: originalDeductible.repair
|
||||
};
|
||||
store.order.currentDeductible = {
|
||||
replace: currentDeductible.replace,
|
||||
repair: currentDeductible.repair
|
||||
};
|
||||
store.order.customer.companyCode = companyCode;
|
||||
store.order.policy.policyNumber = policyNumber;
|
||||
globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({ data: { claimNumber: 'CLM123', isSuccess: true } }));
|
||||
|
||||
// Act
|
||||
await store.registerClaim();
|
||||
|
||||
// Asserts
|
||||
expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({
|
||||
payload: expect.objectContaining({
|
||||
sourceSystem: applicationConfig.APPLICATION_NAME,
|
||||
memberNumber: policyNumber,
|
||||
policyInfo: expect.objectContaining({
|
||||
company: companyCode
|
||||
})
|
||||
})
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateContactInfo method', () => {
|
||||
|
|
@ -1929,6 +1969,95 @@ describe('Store', () => {
|
|||
bailoutOnError: false
|
||||
}));
|
||||
});
|
||||
it('includes memberNumber when flag is set', async () => {
|
||||
// Arrange
|
||||
const response = {
|
||||
data: {
|
||||
deductible: getRandomInt(0, 5000),
|
||||
policyData: getRandomString(100, 200)
|
||||
}
|
||||
};
|
||||
|
||||
const location = getRandomString(10, 15).toUpperCase();
|
||||
store.order.damage.glassToReplace = [
|
||||
{
|
||||
glassLocation: location
|
||||
}
|
||||
];
|
||||
const referralCorrelationId = getRandomGuid();
|
||||
const parentAccountNumber = getRandomString(6, 6);
|
||||
const endorsements = [];
|
||||
const manualGlassNames = [location];
|
||||
const policyState = getRandomString(2, 2);
|
||||
const status = getRandomString(6, 8);
|
||||
const currentDeductible = 500;
|
||||
const originalDeductible = 500;
|
||||
const isRepair = getRandomBoolean();
|
||||
const policyNumber = getRandomString(10, 20);
|
||||
const insuredFirstName = getRandomString(10, 20);
|
||||
const insuredLastName = getRandomString(10, 20);
|
||||
const insuredZipCode = getRandomInt(10000, 99999).toString();
|
||||
const policyVehicleId = getRandomInt(1, 2).toString();
|
||||
const vehicleVin = getRandomString(17, 17);
|
||||
const policyData = getRandomString(100, 200);
|
||||
|
||||
store.order.referralCorrelationId = referralCorrelationId;
|
||||
store.order.parentAccountNumber = parentAccountNumber;
|
||||
store.order.currentDeductible = {
|
||||
replace: currentDeductible,
|
||||
repair: currentDeductible
|
||||
};
|
||||
store.order.originalDeductible = {
|
||||
replace: originalDeductible,
|
||||
repair: originalDeductible
|
||||
};
|
||||
store.order.policy.status = status;
|
||||
store.order.customer.address.state = policyState;
|
||||
store.order.damage.isRepair = isRepair;
|
||||
store.order.policy.policyNumber = policyNumber;
|
||||
store.order.customer.firstName = insuredFirstName;
|
||||
store.order.customer.lastName = insuredLastName;
|
||||
store.order.customer.address.zipCode = insuredZipCode;
|
||||
store.order.vehicle.policyVehicleId = policyVehicleId;
|
||||
store.order.vehicle.vin = vehicleVin;
|
||||
store.order.policy.policyData = policyData;
|
||||
store.issConfig.useMemberNumber = true;
|
||||
|
||||
globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(response));
|
||||
|
||||
// Act
|
||||
await store.getFinalDeductible();
|
||||
|
||||
// Assert
|
||||
expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({
|
||||
method: endpoints.FinalDeductible.method,
|
||||
endpoint: endpoints.FinalDeductible.url,
|
||||
payload: ({
|
||||
referralCorrelationId,
|
||||
accountNumber: parentAccountNumber,
|
||||
endorsements,
|
||||
manualGlassNames,
|
||||
policyState,
|
||||
status,
|
||||
currentDeductible,
|
||||
originalDeductible,
|
||||
currentRepairDeductible: currentDeductible,
|
||||
currentReplaceDeductible: currentDeductible,
|
||||
noCoverage: store.isNoComp,
|
||||
isRepair,
|
||||
policyNumber,
|
||||
insuredFirstName,
|
||||
insuredLastName,
|
||||
insuredZipCode,
|
||||
policyVehicleId,
|
||||
vehicleVin,
|
||||
policyData,
|
||||
isItac: store.isITAC,
|
||||
memberNumber: policyNumber
|
||||
}),
|
||||
bailoutOnError: false
|
||||
}));
|
||||
});
|
||||
it('only "Yes" endorsement answers are added to payload', () => {
|
||||
// Arrange
|
||||
const response = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue