Merge branch 'develop' of https://github.com/Safelite/DigitalConsumer.ISS into feature/INSR-2140

This commit is contained in:
Chase King 2025-03-05 10:05:00 -05:00
commit c73029763c
45 changed files with 2195 additions and 315 deletions

1
.gitignore vendored
View file

@ -24,7 +24,6 @@ pnpm-debug.log*
# Playwright
/test-results/
/ortoni-report/
/playwright-report/
/blob-report/
/playwright/.cache/

View file

@ -1,4 +1,4 @@
FROM node:20
FROM node:16
FROM mcr.microsoft.com/playwright:v1.48.0-noble
@ -12,10 +12,10 @@ COPY package*.json ./
RUN npm install
# Install Playwright browsers
RUN npx playwright install chromium --with-deps
# Install jq
RUN apt-get install -y jq
RUN npx playwright install --with-deps
# Copy the rest of the application code
COPY . .
# Run Playwright tests
CMD ["npx", "playwright", "test"]

View file

@ -90,6 +90,7 @@ stages:
"npx wait-on http://localhost:8080 && npm run test:playwright -- --shard=$(shardNumber)/$(totalShards) --reporter=list,blob --grep \"@smoke | @Advanced\"")
# Start container and stream logs
echo "Starting tests for shard $(shardNumber)..."
docker start -a $container_id
@ -126,6 +127,8 @@ stages:
condition: always()
- job: download_and_merge_reports
container:
image: mcr.microsoft.com/playwright:v1.48.0-noble
dependsOn: playwright_tests
timeoutInMinutes: 8
cancelTimeoutInMinutes: 10
@ -192,23 +195,19 @@ stages:
# inputs:
# searchFolder: 'test-results'
# testResultsFormat: 'JUnit'
# testResultsFiles: 'junit_results.xml'
# testResultsFiles: 'results.xml'
# mergeTestResults: true
# failTaskOnFailedTests: false
# testRunTitle: 'Playwright Tests'
# condition: succeededOrFailed()
- task: PublishPipelineArtifact@1
displayName: 'Publish Merged Report'
condition: always()
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/ortoni-report'
artifact: 'playwright-merged-report'
publishLocation: 'pipeline'
- script: |
docker rmi $(dockerImageName):$(imageTag) -f
displayName: 'Cleanup Docker Image'
condition: always()
- task: PublishPipelineArtifact@1
displayName: 'Publish Merged Report'
condition: always()
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/ortoni-report'
artifact: 'playwright-merged-report'
publishLocation: 'pipeline'
- ${{ else }}:
# Dev Build/Deploy

View file

@ -1,149 +0,0 @@
#!/bin/bash
create_issue() {
local title="$1"
local project_key="$2"
local issue_type="$3"
local parent_issue_key="$4"
AUTH=$(echo -ne "$JIRA_USERNAME:$JIRA_API_KEY" | base64 --wrap 0)
local parent_issue=$(curl -s -H "Authorization: Basic $AUTH" \
"$JIRA_SERVER/rest/api/3/issue/$parent_issue_key")
local parent_fix_versions=$(echo $parent_issue | jq -r '.fields.fixVersions')
local created_issue=$(curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH" \
-d '{
"fields": {
"summary": "'"$title"'",
"project": {
"key": "'"$project_key"'"
},
"issuetype": {
"name": "'"$issue_type"'"
},
"parent": {
"key": "'"$parent_issue_key"'"
},
"fixVersions": '"$parent_fix_versions"'
}
}' \
"$JIRA_SERVER/rest/api/3/issue")
local created_issue_id=$(echo $created_issue | jq -r '.id')
curl -X PUT -H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH" \
-d '{
"fields": {
"fixVersions": '"$parent_fix_versions"'
}
}' \
"$JIRA_SERVER/rest/api/3/issue/$created_issue_id"
}
extract_uuid() {
local url="$1"
local uuid_regex='[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'
if [[ "$url" =~ $uuid_regex ]]; then
echo "${BASH_REMATCH}"
else
echo "No UUID found in the URL."
fi
}
update_issue_status() {
local issue_key="$1"
local status_name="$2"
AUTH=$(echo -ne "$JIRA_USERNAME:$JIRA_API_KEY" | base64 --wrap 0)
local transitions=$(curl -s -H "Authorization: Basic $AUTH" \
"$JIRA_SERVER/rest/api/3/issue/$issue_key/transitions")
local transition_id=$(echo "$transitions" | jq -r --arg status_name "$status_name" '
.transitions[] | select(.isAvailable == true and .to.name == $status_name) | .id
')
if [ -z "$transition_id" ]; then
echo "BadRequestError"
exit 1
else
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH" \
-d '{
"transition": {
"id": "'"$transition_id"'"
}
}' \
"$JIRA_SERVER/rest/api/3/issue/$issue_key/transitions"
fi
}
add_attachments() {
AUTH=$(echo -ne "$JIRA_USERNAME:$JIRA_API_KEY" | base64 --wrap 0)
local issue_key="$1"
shift
local attachments=("$@")
echo $issue_key
echo $attachments
local form_data=""
for attachment in "${attachments[@]}"; do
form_data+="--form file=@$attachment "
done
echo $form_data
echo $(curl -X POST $form_data \
-H "X-Atlassian-Token: no-check" \
-H "Authorization: Basic $AUTH" \
"$JIRA_SERVER/rest/api/3/issue/$issue_key/attachments")
}
add_comment() {
AUTH=$(echo -ne "$JIRA_USERNAME:$JIRA_API_KEY" | base64 --wrap 0)
local issue_key="$1"
shift
local comment_items_input=("$@")
local comment_json="[]"
for item in "${comment_items_input[@]}"; do
if [ -e "$item" ]; then
# If it's a file path
local attachment=$(add_attachments "$issue_key" "$item")
local id=$(echo $attachment | grep -oP '"id":\s*"\K[^"]+')
local attachment_content=$(curl -s -I -L -H "Authorization: Basic $AUTH" "$JIRA_SERVER/rest/api/3/attachment/content/$id" \
| grep -i "Location:" | tail -1 | awk '{print $2}' | tr -d '\r')
echo "$JIRA_SERVER/rest/api/3/attachment/content/$id"
echo "$attachment_content"
local uuid=$(extract_uuid "$attachment_content")
echo "$uuid"
json_object=$(jq -n --arg uuid "$uuid" '{ type: "mediaSingle", attrs: { layout: "align-start" }, content: [{ type: "media", attrs: { type: "file", id: $uuid, width: 200, height: 200, collection: "", alt: "" } }]}')
comment_json=$(echo "$comment_json" | jq --argjson obj "$json_object" '. += [$obj]')
else
# If it's a string
json_object=$(jq -n --arg text "$item" '{ type: "paragraph", content: [{ type: "text", text: $text }]}')
comment_json=$(echo "$comment_json" | jq --argjson obj "$json_object" '. += [$obj]')
fi
done
request=$(jq -n --argjson content "$comment_json" '{body: { type: "doc", version: 1, content: $content }}')
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH" \
-d "$request" \
"$JIRA_SERVER/rest/api/3/issue/$issue_key/comment"
}
if [[ $# -gt 0 ]]; then # IF function call passed in
"$@" # Call function
fi

View file

@ -22,7 +22,10 @@ const policySoapByScenario: { [x: string]: string } = {
'0018a': '<soapenv:Envelope xmlns:soapenv= \"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml= \"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se= \"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2023-12-11T21:27:05Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2023-12-11T21:27:05Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>df38d1a8-f583-4ee6-a23d-950c1930c150</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>df38d1a8-f583-4ee6-a23d-950c1930c150</_xml:RqUID> <_xml:TransactionResponseDt>2023-12-11T21:27:05Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2023-01-01</_xml:AsOfDt> <_xml:Requestor id= \"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id= \"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id= \"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>F</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>GRS</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CT</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2022-12-21</_xml:EffectiveDt> <_xml:ExpirationDt>2099-12-21</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>998281163922817</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id= \"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>SBRU</_xml:Manufacturer> <_xml:Model>Outback</_xml:Model> <_xml:ModelYear>2021</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CT</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>4S4BTAFC7M3163249</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id= \"endorsementId_1\" IdRef= \"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0019a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-13T18:01:11Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-13T18:01:11Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>5da3e764-374a-41e0-9baf-9fe76bbc4a6e</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>5da3e764-374a-41e0-9baf-9fe76bbc4a6e</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-13T18:01:11Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2023-01-01</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>GRS</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>NH</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2022-12-21</_xml:EffectiveDt> <_xml:ExpirationDt>2099-12-21</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>998411168732470</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>SBRU</_xml:Manufacturer> <_xml:Model>WRX</_xml:Model> <_xml:ModelYear>2021</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>NH</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>JF1VA1A63M9801802</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0020a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-13T18:01:11Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-13T18:01:11Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>5da3e764-374a-41e0-9baf-9fe76bbc4a6e</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>5da3e764-374a-41e0-9baf-9fe76bbc4a6e</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-13T18:01:11Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2023-01-01</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>GRS</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>NH</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2022-12-21</_xml:EffectiveDt> <_xml:ExpirationDt>2099-12-21</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>998411168732470</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>SBRU</_xml:Manufacturer> <_xml:Model>WRX</_xml:Model> <_xml:ModelYear>2021</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>NH</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>JF1VA1A63M9801802</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0021a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-03T14:13:58Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-03T14:13:58Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-03T14:13:58Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2017-02-06</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>STD</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CA</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01</_xml:EffectiveDt> <_xml:ExpirationDt>2099-11-01</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>HOND</_xml:Manufacturer> <_xml:Model>ACCORD</_xml:Model> <_xml:ModelYear>2016</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CA</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>1HGCR2F31GA195371</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:Coverage> <_xml:CoverageCd>GLSS</_xml:CoverageCd> <_xml:CoverageDesc>ACV</_xml:CoverageDesc> <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00</_xml:Amt> </_xml:FormatCurrencyAmt> </_xml:Deductible> <_xml:Option> <_xml:OptionCd>V</_xml:OptionCd> <_xml:OptionValue>1</_xml:OptionValue> <_xml:OptionValueDesc>COVERAGE_LIMIT_IND</_xml:OptionValueDesc> </_xml:Option> </_xml:Coverage> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>'
'0021a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-03T14:13:58Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-03T14:13:58Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-03T14:13:58Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2017-02-06</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>STD</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CA</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01</_xml:EffectiveDt> <_xml:ExpirationDt>2099-11-01</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>HOND</_xml:Manufacturer> <_xml:Model>ACCORD</_xml:Model> <_xml:ModelYear>2016</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CA</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>1HGCR2F31GA195371</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:Coverage> <_xml:CoverageCd>GLSS</_xml:CoverageCd> <_xml:CoverageDesc>ACV</_xml:CoverageDesc> <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00</_xml:Amt> </_xml:FormatCurrencyAmt> </_xml:Deductible> <_xml:Option> <_xml:OptionCd>V</_xml:OptionCd> <_xml:OptionValue>1</_xml:OptionValue> <_xml:OptionValueDesc>COVERAGE_LIMIT_IND</_xml:OptionValueDesc> </_xml:Option> </_xml:Coverage> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0022a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-03T14:13:58Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-03T14:13:58Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-03T14:13:58Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2017-02-06</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>STD</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CA</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01</_xml:EffectiveDt> <_xml:ExpirationDt>2099-11-01</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>HOND</_xml:Manufacturer> <_xml:Model>ACCORD</_xml:Model> <_xml:ModelYear>2016</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CA</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>1HGCR2F31GA195371</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:Coverage> <_xml:CoverageCd>GLSS</_xml:CoverageCd> <_xml:CoverageDesc>ACV</_xml:CoverageDesc> <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00</_xml:Amt> </_xml:FormatCurrencyAmt> </_xml:Deductible> <_xml:Option> <_xml:OptionCd>V</_xml:OptionCd> <_xml:OptionValue>1</_xml:OptionValue> <_xml:OptionValueDesc>COVERAGE_LIMIT_IND</_xml:OptionValueDesc> </_xml:Option> </_xml:Coverage> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0023a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-03T14:13:58Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-03T14:13:58Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-03T14:13:58Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2017-02-06</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>STD</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CA</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01</_xml:EffectiveDt> <_xml:ExpirationDt>2099-11-01</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>HOND</_xml:Manufacturer> <_xml:Model>ACCORD</_xml:Model> <_xml:ModelYear>2016</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CA</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>1HGCR2F31GA195371</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:Coverage> <_xml:CoverageCd>GLSS</_xml:CoverageCd> <_xml:CoverageDesc>ACV</_xml:CoverageDesc> <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00</_xml:Amt> </_xml:FormatCurrencyAmt> </_xml:Deductible> <_xml:Option> <_xml:OptionCd>V</_xml:OptionCd> <_xml:OptionValue>1</_xml:OptionValue> <_xml:OptionValueDesc>COVERAGE_LIMIT_IND</_xml:OptionValueDesc> </_xml:Option> </_xml:Coverage> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>',
'0024a': '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <se:policySearchResponse xmlns:_xml=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:se=\"http://pm.lmig.com/cl/PolicyServicesMediationModule/iAcordPolicySearch\"> <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite</_xml:SPName> <_xml:CustPermId>00005</_xml:CustPermId> </_xml:CustId> <_xml:ClientDt>2025-01-03T14:13:58Z</_xml:ClientDt> <_xml:CustLangPref>EN</_xml:CustLangPref> <_xml:ClientApp> <_xml:Org>Liberty Mutual</_xml:Org> <_xml:Name>PM CNG</_xml:Name> <_xml:Version>1.0</_xml:Version> </_xml:ClientApp> <_xml:ServerDt>2025-01-03T14:13:58Z</_xml:ServerDt> <_xml:Language>EN</_xml:Language> </_xml:SignonRs> <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26</_xml:RqUID> <_xml:TransactionResponseDt>2025-01-03T14:13:58Z</_xml:TransactionResponseDt> <_xml:MsgStatus> <_xml:MsgStatusCd>Success</_xml:MsgStatusCd> </_xml:MsgStatus> <_xml:AsOfDt>2017-02-06</_xml:AsOfDt> <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> </_xml:PartyInqInfo> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName}</_xml:Surname> <_xml:GivenName>${firstName}</_xml:GivenName> </_xml:PersonName> </_xml:NameInfo> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home</_xml:PhoneTypeCd> <_xml:PhoneNumber>${phoneNumber}</_xml:PhoneNumber> </_xml:PhoneInfo> </_xml:Communications> </_xml:GeneralPartyInfo> <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary</_xml:InsuredOrPrincipalRoleCd> <_xml:PersonInfo> <_xml:GenderCd>M</_xml:GenderCd> </_xml:PersonInfo> </_xml:InsuredOrPrincipalInfo> </_xml:InsuredOrPrincipal> <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber}</_xml:PolicyNumber> <_xml:PolicyVersion>STD</_xml:PolicyVersion> <_xml:CompanyProductCd>liberty</_xml:CompanyProductCd> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:ControllingStateProvCd>CA</_xml:ControllingStateProvCd> <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01</_xml:EffectiveDt> <_xml:ExpirationDt>2099-11-01</_xml:ExpirationDt> </_xml:ContractTerm> <_xml:GroupId>000</_xml:GroupId> <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665</_xml:InsurerId> </_xml:ItemIdInfo> </_xml:MiscParty> </_xml:PersPolicy> <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress}</_xml:Addr1> <_xml:City>${city}</_xml:City> <_xml:StateProvCd>${state}</_xml:StateProvCd> <_xml:PostalCode>${postalCode}</_xml:PostalCode> <_xml:Country>US</_xml:Country> </_xml:Addr> </_xml:Location> <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP</_xml:LOBCd> <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1</_xml:InsurerId> </_xml:ItemIdInfo> <_xml:Manufacturer>HOND</_xml:Manufacturer> <_xml:Model>ACCORD</_xml:Model> <_xml:ModelYear>2016</_xml:ModelYear> <_xml:Registration> <_xml:RegistrationId>UNKNOWN</_xml:RegistrationId> <_xml:StateProvCd>CA</_xml:StateProvCd> </_xml:Registration> <_xml:VehIdentificationNumber>1HGCR2F31GA195371</_xml:VehIdentificationNumber> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>service_level_ind</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:VehRateGroupInfo> <_xml:RateGroup>000</_xml:RateGroup> <_xml:CoverageCd>parking_guard</_xml:CoverageCd> </_xml:VehRateGroupInfo> <_xml:Coverage> <_xml:CoverageCd>GLSS</_xml:CoverageCd> <_xml:CoverageDesc>ACV</_xml:CoverageDesc> <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00</_xml:Amt> </_xml:FormatCurrencyAmt> </_xml:Deductible> <_xml:Option> <_xml:OptionCd>V</_xml:OptionCd> <_xml:OptionValue>1</_xml:OptionValue> <_xml:OptionValueDesc>COVERAGE_LIMIT_IND</_xml:OptionValueDesc> </_xml:Option> </_xml:Coverage> </_xml:PersVeh> </_xml:PersAutoLineBusiness> <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000</_xml:RemarkText> <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE</_xml:PolicyStatusCd> </_xml:PolicySummaryInfo> </_xml:PersAutoPolicy> </_xml:PolInfo> </_xml:PolicyInqRs> </_xml:InsuranceSvcRs> </_xml:ACORD> </se:policySearchResponse> </soapenv:Body> </soapenv:Envelope>'
}
const claimRegistrationValue = "{\"claimNumber\":\"058913992\",\"reportedDate\":\"2023-11-01T18:56:08.264Z\",\"howReported\":\"digital\",\"status\":\"registered\",\"lossCategory\":\"glassOnly\",\"lossCause\":\"glassOnly\",\"lossCauseDetail\":null,\"lossDate\":\"2023-11-01\",\"lossTime\":\"00:00\",\"lossDescription\":\"ROCK FROM ROAD - NO ONE AT FAULT\",\"lossLocation\":{\"primary\":true,\"line1\":null,\"line2\":null,\"city\":\"Columbus\",\"county\":null,\"state\":\"OR\",\"postalCode\":\"\",\"country\":\"US\",\"type\":null,\"locationName\":null,\"subType\":null},\"_links\":{\"reporter\":{\"id\":\"65429f485e8cd37072a5bb5d\",\"href\":\"claims/058913992/contacts/65429f485e8cd37072a5bb5d\",\"title\":\"BRANDON JOHNSON\"},\"primaryContact\":null,\"insureds\":[{\"id\":\"65429f485e8cd37072a5bb5d\",\"href\":\"claims/058913992/contacts/65429f485e8cd37072a5bb5d\",\"title\":\"BRANDON JOHNSON\"}],\"pedestrianCyclists\":[],\"contacts\":{\"id\":null,\"href\":\"claims/058913992/contacts\"},\"claimDamage\":{\"id\":null,\"href\":\"claims/058913992/claim-damage\"},\"vehicleIncidents\":[{\"id\":\"65429f4b31209b23b788c38e\",\"href\":\"claims/058913992/vehicle-incidents/65429f4b31209b23b788c38e\",\"vehicle\":\"BMW740\"}],\"propertyIncidents\":{\"dwelling\":null,\"otherStructure\":null,\"personalProperty\":null,\"livingExpense\":null},\"injuryIncidents\":[]}}";

View file

@ -10,6 +10,7 @@ export interface ITestData {
isPolicyFound: boolean, // Effective difference between advanced and essential
isUseVehicleOnPolicy: boolean, // Should we use the vehicle on the policy?
isVehicleLookupValidations: boolean, // Should we validate vehicle lookup?
isVehicleSelectBailout: boolean, // Should we bailout on vehicle lookup?
isNoComp: boolean, // Is this a NoComp policy?
isItac: boolean, // Is this an ITAC scenario?
hasStateLawPopup: boolean, // Are we expecting a state law pop-up on ProviderSelectionPage?
@ -36,4 +37,5 @@ export interface ITestData {
isRecalWarning: boolean,
isSeparateApptsWarning: boolean, // IF true, check for the separate appts warning on VehicleDamagePage
isAuthenticationRequired: boolean
isMoldingQuestion: boolean,
}

View file

@ -5,6 +5,7 @@ import { ContactDetailsPage } from "../../pages/ContactDetailsPage";
import { CoverageStatementPage } from "../../pages/CoverageStatementPage";
import { DuplicateCheckPage } from "../../pages/DuplicateCheckPage";
import { EndorsementsPage } from "../../pages/EndorsementsPage";
import { MoldingQuestionsPage } from "../../pages/MoldingQuestionsPage";
import { OrderConfirmationPage } from "../../pages/OrderConfirmationPage";
import { PartQuestionsPage } from "../../pages/PartQuestionsPage";
import { PaymentMethodPage } from "../../pages/PaymentMethodPage";
@ -57,5 +58,6 @@ export default interface ITestPages {
vinLookupPage: VinLookupPage,
vehicleLookupAddressPage: VehicleLookupAddressPage,
vehicleLookupLicensePage: VehicleLookupLicensePage,
welcomePage: WelcomePage
welcomePage: WelcomePage,
moldingQuestionsPage: MoldingQuestionsPage
}

View file

@ -43,6 +43,7 @@ import CcisApiUtil from "@impl/api/CcisApiUtil";
import MockPolicyData from "@business-logic/data/MockPolicyData";
import VehiclePartQuestionsPage from "../../pages/VehiclePartsPage";
import CapabilityQuestionsPage from "../../pages/CapabilityQuestionsPage";
import { MoldingQuestionsPage } from "../../pages/MoldingQuestionsPage";
export default class TestCase extends DisposableBase implements ITestCase {
public static FrameworkConfig: FrameworkConfig = {
@ -136,7 +137,9 @@ export default class TestCase extends DisposableBase implements ITestCase {
if (testInfo.testCase)
if (!(testInfo.testCase.testData!.isMockTesting ?? false)) {
await testInfo.testCase.disposeAll();
if (testInfo.testCase.testData?.isPolicyFound) {
await testInfo.testCase.disposeAll();
}
}
const seconds: string = String(testInfo.duration / 1000);
@ -201,7 +204,8 @@ export default class TestCase extends DisposableBase implements ITestCase {
vinLookupPage: new VinLookupPage(page),
vehicleLookupAddressPage: new VehicleLookupAddressPage(page),
vehicleLookupLicensePage: new VehicleLookupLicensePage(page),
welcomePage: new WelcomePage(page)
welcomePage: new WelcomePage(page),
moldingQuestionsPage: new MoldingQuestionsPage(page)
};
}
@ -226,4 +230,4 @@ export default class TestCase extends DisposableBase implements ITestCase {
console.log("Delete 'Fake Claim Registration policy' status: " + crDeleteRes.status); //For debug use console.dir(crDeleteRes);
}
}
}
}

View file

@ -61,6 +61,21 @@ export function consolidateJsonReport() {
}
function generateSummaryTable(existingIssues: { [key: string]: any[] }): string {
let totalCritical = 0;
let totalSerious = 0;
let totalModerate = 0;
let totalMinor = 0;
let totalTotal = 0;
Object.keys(existingIssues).forEach(pageName => {
const issues = existingIssues[pageName];
totalCritical += issues.filter(issue => issue.impact === 'critical').length;
totalSerious += issues.filter(issue => issue.impact === 'serious').length;
totalModerate += issues.filter(issue => issue.impact === 'moderate').length;
totalMinor += issues.filter(issue => issue.impact === 'minor').length;
totalTotal += issues.length;
});
return `
<table class="summary-table" role="table">
<thead>
@ -94,6 +109,16 @@ function generateSummaryTable(existingIssues: { [key: string]: any[] }): string
`;
}).join('')}
</tbody>
<tfoot>
<tr>
<td><b>Total</b></td>
<td><b>${totalCritical}</b></td>
<td><b>${totalSerious}</b></td>
<td><b>${totalModerate}</b></td>
<td><b>${totalMinor}</b></td>
<td><b>${totalTotal}</b></td>
</tr>
</tfoot>
</table>
`;
}
@ -285,6 +310,9 @@ export function createAccessibilityHtmlReport() {
border: 1px solid #ddd;
text-align: left;
}
tfoot {
font-weight: bold;
}
`;
let reportContent = `
@ -334,4 +362,4 @@ function isDuplicateIssue(existingIssues: any[], newIssue: any): boolean {
return existingIssues.some(issue => {
return issue.id === newIssue.id && issue.pageName === newIssue.pageName;
});
}
}

View file

@ -34,7 +34,7 @@ export class BasePage {
//this causes the schedule page to fail
//await expect(this.buttonLoadSpin).toHaveCount(0, {timeout: 180000});
expect(currentUrl).not.toEqual(startingUrl);
}).toPass({ timeout: 240_000 });
}).toPass({ timeout: 180_000 });
}
async validateURL(url: string) {

View file

@ -0,0 +1,18 @@
import { expect, type Locator, type Page } from '@playwright/test';
import { BasePage } from './BasePage';
export class MoldingQuestionsPage extends BasePage {
readonly page: Page;
url = process.env['BASE_URL']! + '/?issPage=part-questions';
readonly yesButton: Locator;
constructor(page: Page) {
super(page);
this.page = page;
this.yesButton = page.locator('label').filter({ hasText: 'Yes' }).locator('div');
}
async answerYes() {
await this.yesButton.click();
}
}

View file

@ -35,7 +35,7 @@ export class OrderConfirmationPage extends BasePage {
async validateOrderConfirmationPage(testData: Partial<ITestData>) {
// Destructure data we use
const { vehicleDetails, customerDetails, servicePackage, isItac,
isNoComp, isPolicyFound, claimDetails, paymentDetails, isUseVehicleOnPolicy } = testData;
isNoComp, isPolicyFound, claimDetails, paymentDetails, isUseVehicleOnPolicy } = testData;
await this.serviceText.waitFor({ state: "visible" });
await this.logOrderNumber();
@ -45,7 +45,7 @@ export class OrderConfirmationPage extends BasePage {
const emailTextValue = await this.emailText.textContent();
const servicePackageValue = await this.cartServicePackageText.textContent();
const amountDueValue = await this.amountDueText.textContent();
const deductibleTextValue = (isItac || isNoComp)? null: await this.deductibleText.textContent();
const deductibleTextValue = (isItac || isNoComp) ? null : await this.deductibleText.textContent();
const subtotalTextValue = await this.subtotalText.textContent();
const finalAmountDueValue = await this.finalAmountDue.textContent();
@ -59,7 +59,7 @@ export class OrderConfirmationPage extends BasePage {
// Service package validations
await expect.soft(this.cartServicePackageText).toContainText(`${servicePackage}`)
if (servicePackage === ServicePackage.Premium || servicePackage === ServicePackage.Standard) {
if ((servicePackage === ServicePackage.Premium && testData.isReplace === true) || servicePackage === ServicePackage.Standard) {
expect.soft(servicePackageValue).toContain('New wiper blades');
}
if (servicePackage === ServicePackage.Premium) {
@ -76,7 +76,7 @@ export class OrderConfirmationPage extends BasePage {
if (isPolicyFound && (isUseVehicleOnPolicy ?? true)) {
// Extract numbers
const amountDueAmt = Number.parseFloat(amountDueValue!.split('$')[1].replaceAll(',', ''));
const deductibleAmt = deductibleTextValue? Number.parseFloat(deductibleTextValue.split('$')[1].replaceAll(',', '')): 0;
const deductibleAmt = deductibleTextValue ? Number.parseFloat(deductibleTextValue.split('$')[1].replaceAll(',', '')) : 0;
const subtotalAmt = Number.parseFloat(subtotalTextValue!.split('$')[1].replaceAll(',', ''));
subtotalTextValue?.replaceAll(',', '')
const finalAmountDueAmt = Number.parseFloat(finalAmountDueValue!.split('$')[1].replaceAll(',', ''));

View file

@ -54,7 +54,8 @@ export class ServiceLocationPage extends BasePage {
// For in-shop and drop off
this.selectAShopOptions = this.page.locator('[class="shop-question"]');
this.firstAppointmentButton = this.page.locator('div').filter({ hasText: /Appts/}).first();
// this.firstAppointmentButton = this.page.locator('div').filter({ hasText: /Appts/}).first();
this.firstAppointmentButton = this.page.locator('#availabilityIndicator').first();
this.changeZipButton = this.page.locator('[id="serviceZipLinkPromptId"]');
this.updateZipTextBox = this.page.getByRole('textbox', { name: 'Update your service ZIP code'});
this.saveZipButton = this.page.getByRole('button', { name: 'Save ZIP code' });

View file

@ -79,27 +79,5 @@ export class WelcomePage extends BasePage {
await this.city.fill(customerDetails.address.city);
await this.state.selectOption(customerDetails.address.state);
}
await this.logReferralNumber();
}
async logReferralNumber() {
let mainLocalStorage = JSON.parse(await this.page.evaluate('localStorage.getItem(\'main\')'));
let referralNumber = mainLocalStorage.order.referralNumber as number;
let referralSequenceNumber = mainLocalStorage.order.referralSequenceNumber as number;
if (referralNumber == null) {
for (let i = 1; i <= 20; i++) {
if (!referralNumber == null) break;
await this.page.waitForTimeout(500);
mainLocalStorage = JSON.parse(await this.page.evaluate('localStorage.getItem(\'main\')'));
referralNumber = mainLocalStorage.order.referralNumber as number;
referralSequenceNumber = mainLocalStorage.order.referralSequenceNumber as number;
}
}
await test.step(`Referral Number:${referralNumber} Referral Sequence Number:${referralSequenceNumber}`, async () => {
console.log(`Referral Number:${referralNumber}`);
console.log(`Referral Sequence Number:${referralSequenceNumber}`);
});
}
}

View file

@ -28,7 +28,7 @@ if (!process.env.CI) {
const reportConfig: OrtoniReportConfig = {
port: 1994,
open: "never",
folderPath: "ortoni-report",
folderPath: "test-results",
filename: "index.html",
logo: "../business-logic/data/logo.png",
title: "Test Report",
@ -39,8 +39,8 @@ const reportConfig: OrtoniReportConfig = {
base64Image: true,
};
export const reportFilePath = path.resolve(__dirname, './test-results/accessibility-report.html');
export const jsonReportFilePath = path.resolve(__dirname, './test-results/accessibility-report.json');
export const reportFilePath = path.resolve(__dirname, './../test-results/accessibility-report.html');
export const jsonReportFilePath = path.resolve(__dirname, './../test-results/accessibility-report.json');
export default defineConfig({
testDir: './tests',
@ -55,10 +55,10 @@ export default defineConfig({
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: [
['ortoni-report', reportConfig],
['junit', {outputFile: '../test-results/junit_results.xml'}],
['junit'],
['list']
],
timeout: 240_000,
timeout: 120_000,
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */

View file

@ -49,7 +49,9 @@ import advancedScenario0009TestCases from "./advanced/0009a_NoDeductibleFlorida"
import advancedScenario0010TestCases from "./advanced/0010a_RearGlass";
import advancedScenario0021TestCases from "./advanced/0021a_VehicleByPlate";
import advancedScenario0022TestCases from "./advanced/0022a_VehicleByVIN";
import advancedScenario0023TestCases from "./advanced/0023a_VehicleByVINPartsQns";
import { createAccessibilityHtmlReport } from "@impl/utils/ReportUtils";
import advancedScenario0024TestCases from "./advanced/0024a_VehicleByVINUnverifiedBailout";
@ -271,6 +273,16 @@ test.describe.parallel('ISS QA Automation Regression', () => {
for (const testCase of advancedScenario0022TestCases) {
test(...prepareTest(testCase, run, options, ruleEngine));
}
// Scenario 0023a
for (const testCase of advancedScenario0023TestCases) {
test(...prepareTest(testCase, run, options, ruleEngine));
}
// Scenario 0024a
for (const testCase of advancedScenario0024TestCases) {
test(...prepareTest(testCase, run, options, ruleEngine));
}
});
@ -284,7 +296,9 @@ test.afterAll(() => {
async function run(page: Page, testInfo: TestInfo): Promise<void> {
if (!(testInfo.testCase.testData?.isMockTesting ?? false)) {
await testInfo.testCase.setup();
if (testInfo.testCase.testData?.isPolicyFound) {
await testInfo.testCase.setup();
}
}
testInfo.testCase.setupPages(page);
if (testInfo.testCase.testData.isAuthenticationRequired) {
@ -314,7 +328,7 @@ async function runWorkflow(page: Page, testCase: TestCase) {
partQuestions, paymentDetails, isNoComp, isItac, isRecalNotification,
isRecalWarning, servicePackage, hasStateLawPopup, otherVehiclesOnPolicy,
isSeparateApptsWarning, vehiclePartQuestions, editVehicleDetails,
hasMilitaryWarning, capabilityQuestions, isUseVehicleOnPolicy, isVehicleLookupValidations } = testCase.testData;
hasMilitaryWarning, capabilityQuestions, isUseVehicleOnPolicy, isVehicleLookupValidations, isMoldingQuestion } = testCase.testData;
let { isPolicyFound } = testCase.testData; // Allow isPolicyFound to be re-assigned
@ -326,7 +340,7 @@ async function runWorkflow(page: Page, testCase: TestCase) {
endorsementsPage, vehicleLookupPage, partQuestionsPage, paymentMethodPage,
vehicleLookupAddressPage, vehicleLookupLicensePage, vinLookupPage,
bailoutPage, tpaSearchPage, tpaSubmitPage, tpaConfirmationPage,
vehiclePartQuestionsPage, capabilityQuestionsPage } = testCase.pages;
vehiclePartQuestionsPage, capabilityQuestionsPage, moldingQuestionsPage } = testCase.pages;
// Destructure bailout flags
const { isVehicleSelectBailout, isDoNotSeeMyShopBailout, isTpaNotEnabledBailout,
@ -475,12 +489,19 @@ async function runWorkflow(page: Page, testCase: TestCase) {
});
if (isVehicleSelectBailout) {
await test.step('BailoutPage >> Validate Bailout', async () => {
if (testCase.testData.isVehicleSelectBailout) {
await test.step('Lookup vehicle >> By VIN-' + vehicleDetails!.vin!, async () => {
await vinLookupPage.enterVin(vehicleDetails!.vin!);
});
await test.step('Click Invalid vin Link', async () => {
await vinLookupPage.triggerBailout();
});
await test.step('BailoutPage >> Validate Bailout-' + BailoutCode.VehicleNotFound, async () => {
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.VehicleNotFound);
});
return;
}
switch (vehicleDetails!.vehicleLookupType!) {
@ -512,7 +533,15 @@ async function runWorkflow(page: Page, testCase: TestCase) {
break;
}
}
if (isMoldingQuestion) {
await test.step('Molding Questions Page >> Select Yes', async () => {
if (!moldingQuestionsPage) {
console.error("moldingQuestionsPage is not initialized");
}
await moldingQuestionsPage.answerYes();
await moldingQuestionsPage.nextPage();
});
}
if (capabilityQuestions && capabilityQuestions.length > 0) {
await capabilityQuestionsPage.validatePartQuestions(capabilityQuestions);
await capabilityQuestionsPage.selectPartQuestionResponses(capabilityQuestions);
@ -666,4 +695,4 @@ async function runWorkflow(page: Page, testCase: TestCase) {
await test.step('OrderConfirmationPage >> Validate order', async () => {
await orderConfirmationPage.validateOrderConfirmationPage(testCase.testData);
});
}
}

View file

@ -70,7 +70,7 @@ for (const client of advancedClients) {
const data = { ...advancedScenario0001Data };
data.clientTag = client.clientTag;
const tc = new TestCase({
name: `0001a Advanced Replace Deductible Client: "${client.accountName}"`,
name: `0001a_Advanced_Replace_Deductible_Client: "${client.accountName}"`,
tags: [`@${client.clientTag}`, `@${client.accountName}`, '@Advanced'],
testData: data
}, undefined, '0001a');

View file

@ -23,10 +23,10 @@ const customerDetails: ICustomerDetails = {
}
}
const policyNumber = `~AutomatedScenario0021a${faker.string.uuid().substring(0, 6)}`;
const policySoap = MockPolicyData.getPolicySoapByScenario('0021a', customerDetails, policyNumber);
const policyNumber = `~AutomatedScenario0022a${faker.string.uuid().substring(0, 6)}`;
const policySoap = MockPolicyData.getPolicySoapByScenario('0022a', customerDetails, policyNumber);
const advancedScenario0021Data: Partial<ITestData> = {
const advancedScenario0022Data: Partial<ITestData> = {
clientTag: '',
isDuplicateClaim: false,
isPolicyFound: true,
@ -73,7 +73,7 @@ const advancedScenario0021Data: Partial<ITestData> = {
const advancedClients = ClientData.getAdvancedClients();
const advancedScenario0022TestCases: TestCase[] = [];
for (const client of advancedClients) {
const data = { ...advancedScenario0021Data };
const data = { ...advancedScenario0022Data };
data.clientTag = client.clientTag;
const tc = new TestCase({
name: `0022a Advanced Client Vehicle By Vin: "${client.accountName}"`,

View file

@ -0,0 +1,84 @@
import ClientData from "@business-logic/data/ClientData";
import TestCase from "@business-logic/types/TestCase";
import { DamageType, PartQuestionType, PaymentType, ServiceLocation, ServicePackage, VehicleDamage, VehicleLookupType } from "@business-logic/types/Enums";
import { ITestData } from "@business-logic/types/ITestData"
import { faker } from "@faker-js/faker";
import { getNextWeekday } from "@impl/utils/DateUtils";
import MockPolicyData from "@business-logic/data/MockPolicyData";
import { ICustomerDetails } from "@business-logic/types/CustomerDetails";
const nextWeekday = getNextWeekday();
const customerDetails: ICustomerDetails = {
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
email: 'itqatest@safelite.com',
phoneNumber: '614-531-0031',
notes: 'Automated Test',
address: {
street: faker.location.streetAddress(),
city: 'San Jose',
state: 'CA',
postalCode: '97230-6373',
country: 'United States'
}
}
const policyNumber = `~AutomatedScenario0023a${faker.string.uuid().substring(0, 6)}`;
const policySoap = MockPolicyData.getPolicySoapByScenario('0023a', customerDetails, policyNumber);
const advancedScenario0023Data: Partial<ITestData> = {
clientTag: '',
isDuplicateClaim: false,
isPolicyFound: true,
isNoComp: false,
hasStateLawPopup: true,
endorsements: undefined,
isUseVehicleOnPolicy: false,
isVehicleLookupValidations: true,
isMoldingQuestion: true,
isSafelite: true,
servicePackage: faker.helpers.enumValue(ServicePackage),
customerDetails: customerDetails,
claimDetails: {
policyNumber: policyNumber,
policyDeductible: 500,
damageDate: '2017-06-02',
damageCause: DamageType.Vandalism
},
policySoap: policySoap,
vehicleDetails: {
year: '1999',
make: 'Buick',
model: 'LeSabre',
style: '4 door sedan',
vehicleLookupType: VehicleLookupType.Vin,
vin: '1G4HR52K2XH454648',
},
vehicleDamage: [
VehicleDamage.WindshieldCrack,
],
appointmentDetails: {
serviceLocation: ServiceLocation.InShop,
shopAddress: undefined,
appointmentDate: nextWeekday
},
paymentDetails: {
paymentType: PaymentType.PayAtService
}
}
// TODO: Add validation for deductible/covered amount
const advancedClients = ClientData.getAdvancedClients();
const advancedScenario0023TestCases: TestCase[] = [];
for (const client of advancedClients) {
const data = { ...advancedScenario0023Data };
data.clientTag = client.clientTag;
const tc = new TestCase({
name: `0023a Advanced client Unlisted Vehicle: "${client.accountName}"`,
tags: [`@${client.clientTag}`, `@${client.accountName}`, '@Advanced'],
testData: data
}, undefined, '0023a');
advancedScenario0023TestCases.push(tc);
}
export default advancedScenario0023TestCases;

View file

@ -0,0 +1,83 @@
import ClientData from "@business-logic/data/ClientData";
import TestCase from "@business-logic/types/TestCase";
import { DamageType, PartQuestionType, PaymentType, ServiceLocation, ServicePackage, VehicleDamage, VehicleLookupType } from "@business-logic/types/Enums";
import { ITestData } from "@business-logic/types/ITestData"
import { faker } from "@faker-js/faker";
import { getNextWeekday } from "@impl/utils/DateUtils";
import MockPolicyData from "@business-logic/data/MockPolicyData";
import { ICustomerDetails } from "@business-logic/types/CustomerDetails";
const nextWeekday = getNextWeekday();
const customerDetails: ICustomerDetails = {
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
email: 'itqatest@safelite.com',
phoneNumber: '614-531-0031',
notes: 'Automated Test',
address: {
street: faker.location.streetAddress(),
city: 'Columbus',
state: 'OH',
postalCode: '43220',
country: 'United States'
}
}
const policyNumber = `~AutomatedScenario0024a${faker.string.uuid().substring(0, 6)}`;
const policySoap = MockPolicyData.getPolicySoapByScenario('0024a', customerDetails, policyNumber);
const advancedScenario0024Data: Partial<ITestData> = {
clientTag: '',
isDuplicateClaim: false,
isPolicyFound: false,
isNoComp: false,
hasStateLawPopup: false,
endorsements: undefined,
isUseVehicleOnPolicy: false,
isVehicleLookupValidations: false,
isVehicleSelectBailout: true,
isMoldingQuestion: true,
isSafelite: true,
servicePackage: faker.helpers.enumValue(ServicePackage),
customerDetails: customerDetails,
claimDetails: {
policyNumber: policyNumber,
policyDeductible: 0.00,
damageDate: '2017-06-02',
damageCause: DamageType.Vandalism
},
policySoap: policySoap,
vehicleDetails: {
year: '2015',
make: 'Honda',
model: 'Accord',
style: '4 door sedan',
vehicleLookupType: VehicleLookupType.Vin,
vin: '0HGCR2E30FA099831',
},
vehicleDamage: [
VehicleDamage.WindshieldCrack,
],
appointmentDetails: {
serviceLocation: ServiceLocation.InShop,
shopAddress: undefined,
appointmentDate: nextWeekday
},
}
// TODO: Add validation for deductible/covered amount
const advancedClients = ClientData.getAdvancedClients();
const advancedScenario0024TestCases: TestCase[] = [];
for (const client of advancedClients) {
const data = { ...advancedScenario0024Data };
data.clientTag = client.clientTag;
const tc = new TestCase({
name: `0024a Advanced client Unlisted Vehicle Bailout: "${client.accountName}"`,
tags: [`@${client.clientTag}`, `@${client.accountName}`, '@Advanced'],
testData: data
}, undefined, '0024a');
advancedScenario0024TestCases.push(tc);
}
export default advancedScenario0024TestCases;

View file

@ -0,0 +1,10 @@
{
"userKey": 2004417,
"sessionKey": 2419636,
"sessionId": "8967dbc4-5081-47c4-a896-03050353d9e2",
"userId": "2ea43842-440b-4362-a72f-105d987f4bc1",
"deviceId": "2ea43842-440b-4362-a72f-105d987f4bc1",
"version": 1,
"status": 1,
"error": null
}

View file

@ -0,0 +1,18 @@
{
"accountNumber": "550036",
"detailedErrorMessage": null,
"notes": null,
"hasPolicies": false,
"deductible": 250,
"status": null,
"noCoverage": false,
"isOEMEndorsed": false,
"policyData": "AMjHAgrjFS8H8IiDcI9sC8DUxbkV/fm1HmxAnMOiIuk1OKL4a5gpqx3O8DmtryfvwcsjA1vAsxalx4t73Fukx0axtCS1cX6NopWRnLnxTPvL3Mv3IcgESaBqcEeWtSol8CN2tly7xvRHPjdQUzXictkVxtlYssRRoPt5V/QtPyydEDbeoHY0F3gTd9/bhxuRCZ5zvO2/jXvVMB2zznBzYfa44+Ywhl9T9ip7VMlcHxox1Wce6kWOGSZTLtf8Zkg+5uft2JspYryrQkhn8/bC3amYRChdfzE8kGL3jh2x1cYgGg1Ooyh7UaWbc/zEFrlt",
"referralCorrelationId": "02601141-4f2a-4fc9-9b72-a01c49a2f3fd",
"referralNumber": null,
"isSuccess": true,
"isError": false,
"errorCode": null,
"errorMessage": null,
"successMessage": null
}

View file

@ -0,0 +1,18 @@
{
"referralNumber": "120916",
"referralSequenceNumber": "10101599",
"referralDate": "2025-02-19T10:33:17.68",
"referralCorrelationId": "02601141-4f2a-4fc9-9b72-a01c49a2f3fd",
"parentAccountNumber": 550036,
"billToAccountNumber": "214616",
"crmCustomerId": 857222,
"savedSessionId": "9da64bae-c2a0-4ef6-8477-74f42965c369",
"eon": "S10097450",
"workOrderNumber": "",
"workOrderId": "",
"workOrderStatus": "",
"customerPortalLoginToken": "00000000-0000-0000-0000-000000000000",
"lockToken": null,
"settledTenderAmount": 0.0,
"isRecalAckOptIn": false
}

View file

@ -5,18 +5,18 @@
"expirationDate": "0001-01-01T00:00:00",
"type": null,
"lineOfBusiness": null,
"policyNumber": "AOA23102736040",
"policyNumber": "~AutomatedScenario0001a1db71b",
"status": null,
"source": null,
"insureds": [
{
"firstName": "JOHN",
"lastName": "SMITH",
"firstName": "Collin",
"lastName": "Collier",
"businessName": null,
"address": "4372 SUNSHINE DR",
"city": "MONTGOMERY",
"state": "AL",
"zipCode": "36116",
"address": "601 Grove Lane",
"city": "PORTLAND",
"state": "OR",
"zipCode": "97230",
"phones": null,
"email": null,
"driverLicenseState": null,
@ -28,25 +28,33 @@
"vehicles": [
{
"id": 0,
"vehicleYear": "2006",
"vehicleMake": "SBRU",
"vehicleModel": "FORESTER",
"vehicleYear": "2020",
"vehicleMake": "BMW",
"vehicleModel": "740",
"vehicleStyle": null,
"licensePlate": "UNKNOWN",
"vin": "JF1SG63616B121212",
"vin": "WBA7T2C01LGL17632",
"driver": null,
"owner": null,
"coverages": [],
"coverages": [
{
"code": "COMP",
"deductible": 250,
"individualLimit": 0,
"occurrenceLimit": 0,
"dayLimit": 0
}
],
"fleetNumber": null,
"fleetUnitNumber": "1",
"endorsements": null
}
],
"taxExempt": "FALSE",
"policyData": "G+r99boRzfUExiJdE0IYp5w1bhP8AZ31Qy+HnTxiQ8sf9paDgwprrcJJ8b8Sd3khpFBwgGwA0ZDgZmLNcmlOiSRchEvJfrZ47XoMTYq4cRsYjrMqvGVKl2ihGDY5brfMc11Hj6h/iJyDyUTAF4CgkDGhtRTHRcaDnjNQtC3G5Mge5LnZwF1HZs6AI4iFm43O6ZFC1fviI00LoQ1JAiXRcDBDng9OFTkeHoyAiVbxyaUqT07sEKl7jHKXJGYletP2r+yMKdMPoN2fo48quSvoQA=="
"policyData": "AMjHAgrjFS8H8IiDcI9sC8DUxbkV/fm1HmxAnMOiIuk1OKL4a5gpqx3O8DmtryfvwcsjA1vAsxalx4t73Fukx0axtCS1cX6NopWRnLnxTPvL3Mv3IcgESaBqcEeWtSol8CN2tly7xvRHPjdQUzXictkVxtlYssRRoPt5V/QtPyydEDbeoHY0F3gTd9/bhxuRCZ5zvO2/jXvVMB2zznBzYfa44+Ywhl9T9ip7VMlcHxox1Wce6kWOGSZTLtf8Zkg+5uft2JspYryrQkhn8/bC3amYRChdfzE8kGL3jh2x1cYgGg1Ooyh7UaWbc/zEFrlt"
}
],
"referralCorrelationId": "6a4e2176-b877-481a-ab13-01653ee4f224",
"referralCorrelationId": "02601141-4f2a-4fc9-9b72-a01c49a2f3fd",
"referralNumber": null,
"accountNumber": "550036",
"isSuccess": true,

View file

@ -0,0 +1,15 @@
{
"claimantId": null,
"claimNumber": "0589139920001",
"notes": null,
"dispatchNumber": null,
"deductible": 0,
"referralCorrelationId": "02601141-4f2a-4fc9-9b72-a01c49a2f3fd",
"referralNumber": null,
"accountNumber": "550036",
"isSuccess": true,
"isError": false,
"errorCode": null,
"errorMessage": null,
"successMessage": "registered"
}

View file

@ -0,0 +1,19 @@
{
"experiments": [
{
"universeName": "PIAInsurance",
"universeId": 640,
"testName": "PIAInsurance_V1",
"testId": 504,
"variationName": "YesShowPIAInsurance_TEST",
"variationId": 1430,
"isActive": true,
"isExposed": true,
"userPartitionNumber": 12,
"assignmentId": 14863748,
"settings": {
"DisplayPIAInsurance": "true"
}
}
]
}

View file

@ -0,0 +1,149 @@
{
"mobileProviderNumber": "001813",
"shopProviders": [
{
"address": {
"city": "PLANO",
"country": "US",
"state": "TX",
"streetAddress": "1601 E PLANO PKWY",
"streetAddress2": "STE 150",
"zipCode": "75074",
"zipCodeCtu": "01813"
},
"distanceInMiles": 4.187648412874978,
"providerNumber": "001813",
"companyName": "SAFELITE AUTOGLASS - DALLAS-FT.WO,TX SOR-CTU",
"phoneNumber": "9724237183",
"isSafeliteShop": true
},
{
"address": {
"city": "MCKINNEY",
"country": "US",
"state": "TX",
"streetAddress": "417 POWER HOUSE ST.",
"streetAddress2": "STE A",
"zipCode": "75071",
"zipCodeCtu": "01813"
},
"distanceInMiles": 13.220085913669747,
"providerNumber": "005318",
"companyName": "SAFELITE AUTOGLASS - MCKINNEY, TX",
"phoneNumber": "9725624492",
"isSafeliteShop": true
},
{
"address": {
"city": "LEWISVILLE",
"country": "US",
"state": "TX",
"streetAddress": "2129 S STEMMONS FWY",
"streetAddress2": "",
"zipCode": "75067",
"zipCodeCtu": "01813"
},
"distanceInMiles": 14.553951205638858,
"providerNumber": "004542",
"companyName": "SAFELITE AUTOGLASS - LEWISVILLE, TX",
"phoneNumber": "4694442057",
"isSafeliteShop": true
},
{
"address": {
"city": "MESQUITE",
"country": "US",
"state": "TX",
"streetAddress": "2131 N TOWN EAST BLVD",
"streetAddress2": "",
"zipCode": "75150",
"zipCodeCtu": "01813"
},
"distanceInMiles": 17.86005691117364,
"providerNumber": "004541",
"companyName": "SAFELITE AUTOGLASS - MESQUITE, TX",
"phoneNumber": "9722889891",
"isSafeliteShop": true
},
{
"address": {
"city": "N RICHLAND HILLS",
"country": "US",
"state": "TX",
"streetAddress": "5649 RUFE SNOW DR",
"streetAddress2": "",
"zipCode": "76180",
"zipCodeCtu": "04544"
},
"distanceInMiles": 32.558897054726366,
"providerNumber": "006504",
"companyName": "SAFELITE AUTOGLASS - FORT WORTH, TX RDU",
"phoneNumber": "8176569791",
"isSafeliteShop": true
},
{
"address": {
"city": "ARLINGTON",
"country": "US",
"state": "TX",
"streetAddress": "2411 S COOPER ST",
"streetAddress2": "",
"zipCode": "76015",
"zipCodeCtu": "04544"
},
"distanceInMiles": 33.065576901075474,
"providerNumber": "004540",
"companyName": "SAFELITE AUTOGLASS - ARLINGTON, TX",
"phoneNumber": "8175224300",
"isSafeliteShop": true
},
{
"address": {
"city": "GREENVILLE",
"country": "US",
"state": "TX",
"streetAddress": "7907 TRADERS CIR",
"streetAddress2": "",
"zipCode": "75402",
"zipCodeCtu": "01813"
},
"distanceInMiles": 36.369381330667089,
"providerNumber": "005317",
"companyName": "SAFELITE AUTOGLASS - GREENVILLE, TX",
"phoneNumber": "9034501771",
"isSafeliteShop": true
},
{
"address": {
"city": "FORT WORTH",
"country": "US",
"state": "TX",
"streetAddress": "2751 NORTHERN CROSS BLVD",
"streetAddress2": "",
"zipCode": "76137",
"zipCodeCtu": "04544"
},
"distanceInMiles": 36.676844951002508,
"providerNumber": "004544",
"companyName": "SAFELITE AUTOGLASS - FORT WORTH, TX",
"phoneNumber": "2143283111",
"isSafeliteShop": true
},
{
"address": {
"city": "TYLER",
"country": "US",
"state": "TX",
"streetAddress": "4043 S BROADWAY AVE",
"streetAddress2": "",
"zipCode": "75701",
"zipCodeCtu": "01813"
},
"distanceInMiles": 98.1186957553462,
"providerNumber": "000714",
"companyName": "SAFELITE AUTOGLASS - TYLER, TX",
"phoneNumber": "9035972059",
"isSafeliteShop": true
}
]
}

View file

@ -0,0 +1,14 @@
[
{
"partNumber": "SBB19",
"description": "SAFELITE BEAM BLADE 19",
"partType": "FRONT WIPER",
"isInsurable": null
},
{
"partNumber": "SBB26",
"description": "SAFELITE BEAM BLADE 26",
"partType": "FRONT WIPER",
"isInsurable": null
}
]

View file

@ -0,0 +1,85 @@
{
"mobileProviderNumber": "001824",
"shopProviders": [
{
"address": {
"city": "Portland",
"country": "US",
"state": "OR",
"streetAddress": "5119 NE 158th Ave",
"streetAddress2": "",
"zipCode": "97230",
"zipCodeCtu": "01824"
},
"distanceInMiles": 1.2090846804646957,
"providerNumber": "001824",
"companyName": "SAFELITE AUTOGLASS - PORTLAND, OR WSR-CTU",
"phoneNumber": "5032260323",
"isSafeliteShop": true
},
{
"address": {
"city": "Clackamas",
"country": "US",
"state": "OR",
"streetAddress": "11231 SE Highway 212",
"streetAddress2": "",
"zipCode": "97015",
"zipCodeCtu": "01824"
},
"distanceInMiles": 9.5642605222286665,
"providerNumber": "003875",
"companyName": "SAFELITE AUTOGLASS - CLACKAMAS, OR",
"phoneNumber": "5037626330",
"isSafeliteShop": true
},
{
"address": {
"city": "Beaverton",
"country": "US",
"state": "OR",
"streetAddress": "13227 SW Canyon Rd",
"streetAddress2": "STE F",
"zipCode": "97005",
"zipCodeCtu": "01824"
},
"distanceInMiles": 15.594098490720718,
"providerNumber": "004762",
"companyName": "SAFELITE AUTOGLASS - BEAVERTON, OR",
"phoneNumber": "5036436601",
"isSafeliteShop": true
},
{
"address": {
"city": "Tualatin",
"country": "US",
"state": "OR",
"streetAddress": "9606 SW Tualatin-Sherwood Rd",
"streetAddress2": "",
"zipCode": "97062",
"zipCodeCtu": "01824"
},
"distanceInMiles": 17.548518168792196,
"providerNumber": "005919",
"companyName": "SAFELITE AUTOGLASS - TUALATIN, OR",
"phoneNumber": "5032822420",
"isSafeliteShop": true
},
{
"address": {
"city": "Keizer",
"country": "US",
"state": "OR",
"streetAddress": "4229 River Rd N",
"streetAddress2": "STE 150",
"zipCode": "97303",
"zipCodeCtu": "01824"
},
"distanceInMiles": 46.16399084140199,
"providerNumber": "004277",
"companyName": "SAFELITE AUTOGLASS - SALEM - KEIZER, OR",
"phoneNumber": "5033903030",
"isSafeliteShop": true
}
]
}

View file

@ -0,0 +1,8 @@
{
"containsMilitaryBase": false,
"isServiceable": true,
"isValid": true,
"state": "OR",
"providerNumber": "01824",
"zipCodeCtu": "01824"
}

View file

@ -0,0 +1,27 @@
{
"windshieldOptions": {
"availableReplacementOptions": [
"Single"
],
"isRepairAvailable": true
},
"backGlassOptions": {
"availableReplacementOptions": [
"Stationary"
]
},
"driverSideOptions": {
"availableReplacementOptions": [
"Vent",
"Back",
"Front"
]
},
"passengerSideOptions": {
"availableReplacementOptions": [
"Vent",
"Back",
"Front"
]
}
}

View file

@ -0,0 +1,33 @@
{
"partsOrQuestions": [
{
"glassPiece": {
"name": "Single",
"location": "Windshield"
},
"parts": [
{
"childPartQuestions": [],
"basePartNumber": "FW05419",
"safelitePartNumber": "FW05419 GTY",
"color": "Green Tint",
"requiresRecalibration": true,
"recalibrationType": "DYNAMIC",
"canSafeliteRecalibrate": true,
"requiresCapabilityQuestions": false,
"childParts": [
{
"partNumber": "RS 101 PAD",
"safelitePartNumber": "RS 101 PAD"
}
],
"partNumber": "FW05419GTYN",
"description": "rain sensor, solar, soundproofing, lane departure warning system, forward collision alert w",
"partType": "WINDSHIELD",
"isInsurable": null
}
],
"partQuestions": null
}
]
}

View file

@ -0,0 +1,32 @@
{
"partsOrQuestions": [
{
"glassPiece": {
"name": "Single",
"location": "Windshield"
},
"parts": [
{
"childPartQuestions": [],
"basePartNumber": "DW01571",
"safelitePartNumber": "DW01571 GTNOEM",
"color": "Green Tint",
"requiresRecalibration": false,
"recalibrationType": null,
"canSafeliteRecalibrate": false,
"requiresCapabilityQuestions": false,
"childParts": [
{
"partNumber": "GGG 1571",
"safelitePartNumber": "GGG 1571"
}
],
"partNumber": "DW01571GTNNOEM",
"description": "",
"partType": "WINDSHIELD"
}
],
"partQuestions": null
}
]
}

View file

@ -0,0 +1,6 @@
{
"partNumber": "RAIN REPEL",
"description": null,
"partType": "RAIN DEFENSE",
"isInsurable": null
}

View file

@ -0,0 +1,20 @@
{
"requiredProviderServices": [
"ADAS Dynamic Calibration"
],
"canProviderRecalibrate": true,
"allowMobileSchedule": true,
"recalibrationParts": [
{
"partNumber": "RECAL DYNAMIC",
"description": "Adas Dynamic Recal Serv",
"recalibrationType": "DYNAMIC",
"ribCode": "RL",
"safelitePartNumber": "RECAL DYNAMIC",
"status": "ACTIVE",
"partType": "ADAS RECALIBRATION",
"childParts": [],
"recalibrationFees": []
}
]
}

View file

@ -0,0 +1,20 @@
{
"requiredProviderServices": [
"ADAS Dynamic Calibration"
],
"canProviderRecalibrate": true,
"allowMobileSchedule": true,
"recalibrationParts": [
{
"partNumber": "RECAL DYNAMIC",
"description": "Adas Dynamic Recal Serv",
"recalibrationType": "DYNAMIC",
"ribCode": "RL",
"safelitePartNumber": "RECAL DYNAMIC",
"status": "ACTIVE",
"partType": "ADAS RECALIBRATION",
"childParts": [],
"recalibrationFees": []
}
]
}

View file

@ -0,0 +1,12 @@
[
{
"partNumber": "SBB22",
"description": "SAFELITE BEAM BLADE 22",
"partType": "FRONT WIPER"
},
{
"partNumber": "SBB22",
"description": "SAFELITE BEAM BLADE 22",
"partType": "FRONT WIPER"
}
]

View file

@ -0,0 +1,29 @@
{
"lineItems": [
{
"partNumber": "RAIN REPEL",
"promoCode": null,
"laborAmount": 0.0,
"sellingPrice": 44.99,
"kitPrice": 0,
"salesTax": null
},
{
"partNumber": "SBB19",
"promoCode": null,
"laborAmount": 0.0,
"sellingPrice": 34.99,
"kitPrice": 0,
"salesTax": null
},
{
"partNumber": "SBB26",
"promoCode": null,
"laborAmount": 0.0,
"sellingPrice": 34.99,
"kitPrice": 0,
"salesTax": null
}
],
"serverData": "ZtCNOF1tCLQBAx2NRKHE/n/fqD8zUxRfYtDuTu7uUiPpeg7i6TmwXwggssX5KsXVenWi0X3mFSjdoyYq79ysxeknuFO2bNoXU8e+wTG2Qmoi4Hoby6pVzuJPTnJzIg75TMZI1cF/FRSffgKLp/Z3HXVAzL1MgvCVZLQgK7x5ILVuBrK6wGFgjfBdEp8qUG/9YKSsJMGYtsuEcJmg8WsxSa1AicmAXj9cXPROcJSocxXp8CDVa3AAqC3mKsD+Hk3uF3EPZ4peVDjGOochxKiN/DnJq1EuJrq/9dqAVnZBc83+j6tKXuYCqtSPciqH+yjOs+p+Qymg51/21cwgK4hWtSNwalc2rSB7xhFqwlK365tO7XmU+KeSdfoKa6co+EjJopr2e/NMb2Edd8bOp88llYtkIHL/HKfxqW8SFHAwazh1PqFd5R9MCC2jCDqaoEVd9awrYlLuvtGSW8WRRAGtLiIiuEhq4/bpfRaYLU2noFk="
}

View file

@ -0,0 +1,8 @@
{
"isItac": false,
"isItacOptimized": null,
"primaryBillToNumber": null,
"partsWerePriced": true,
"lineItems": [],
"serverData": "KcYkmhhx3j2jfrKcPIai5c3vxIPezYw3algekZCIJ1nRzZHsoYWmD//QlA9cNAqo7E4vA4lcilhi/EbXZ5BfIlUjQng0T1GMzltEwIcGbNw="
}

View file

@ -0,0 +1,29 @@
{
"taxedLineItems": [
{
"partNumber": "SBB22",
"promoCode": null,
"laborAmount": 0,
"sellingPrice": 34.99,
"kitPrice": 0,
"salesTax": 2.89
},
{
"partNumber": "SBB22",
"promoCode": null,
"laborAmount": 0,
"sellingPrice": 34.99,
"kitPrice": 0,
"salesTax": 2.89
},
{
"partNumber": "RAIN REPEL",
"promoCode": null,
"laborAmount": 0,
"sellingPrice": 44.99,
"kitPrice": 0,
"salesTax": 3.71
}
],
"serverData": "KcYkmhhx3j2jfrKcPIai5c3vxIPezYw3algekZCIJ1nRzZHsoYWmD//QlA9cNAqo7E4vA4lcilhi/EbXZ5BfIvc9C7c7sl9TGGbrA2A3QUiVi9Q+eQQWUrGSlb5Te3PyfK8g5A+gvcXvn+YSjH0tie6XYRgOnhi6ArHjHJ3GTgCmWIhMUosEpnBrUg3/W5ci/3UF4sCnDpihiJPPiMCnOMjzvWp1/xTg5jaoE8N8otARbxQ73ObbvZCJndil/EaSbqYMvL+ymPvDJHPoAfbXUJc90Drlef4gvSV1d6HEZGR/zwoKYipecNPSXcXzRGKrfxgmViszg1d1PyncoyVQrokAIl1KPRmDPJso5CmGrdDjEYsTV0SXUd0NcphMKd8wVrx7QUCLiyW8Vee7cVjWFnqdhkeJ9PYb14WoNb4j1cLJv39ofMcTmaJMI/maAcA8XKPOuhdWTTqWBXOPq3ax1g=="
}

View file

@ -0,0 +1,16 @@
{
"carId": "CR00069811",
"category": "CAR",
"year": 2020,
"make": "BMW",
"model": "740",
"style": "4 door sedan",
"imageUrl": "https://dbhdyzvm8lm25.cloudfront.net/color_0320_032/MY2020/13736/13736_cc0320_032_300.jpg",
"imageVifNumber": "13736",
"imageVifColor": "white",
"canSafeliteService": true,
"recalibrationServices": [
"DYNAMIC"
],
"isMobileStaticRecalibrationApplicable": false
}

View file

@ -2,7 +2,7 @@
"common": {
"experiments/api/v1/experiments/run": "common/experiments/api/v1/experiments/run.json"
},
"scenario1": {
"0001a_Advanced_Replace_Deductible_Client": {
"coverage/api/v1/coverage/policy-information": "scenario1/coverage/api/v1/coverage/policy-information.json"
},
"0002a_Advanced_Replace_Deductible_Client": {

View file

@ -1,82 +0,0 @@
{
"policies": [
{
"policyEffectiveDate": "0001-01-01T00:00:00",
"expirationDate": "0001-01-01T00:00:00",
"type": null,
"lineOfBusiness": null,
"policyNumber": "~550036ENDRSOEM",
"status": null,
"source": null,
"insureds": [
{
"firstName": "LERNO",
"lastName": "REEB",
"businessName": null,
"address": "2817 BENGAL LN",
"city": "PLANO",
"state": "TX",
"zipCode": "75023",
"phones": null,
"email": null,
"driverLicenseState": null,
"relationToInsured": null,
"companyCode": "LIBERTY",
"customerId": null
},
{
"firstName": "ISAAC",
"lastName": "ASIMOV",
"businessName": null,
"address": "2817 BENGAL LN",
"city": "PLANO",
"state": "TX",
"zipCode": "75023",
"phones": null,
"email": null,
"driverLicenseState": null,
"relationToInsured": null,
"companyCode": "LIBERTY",
"customerId": null
}
],
"vehicles": [
{
"id": 0,
"vehicleYear": "2006",
"vehicleMake": "CHRY",
"vehicleModel": "300",
"vehicleStyle": null,
"licensePlate": "UNKNOWN",
"vin": "2C3KA53G06H407823",
"driver": null,
"owner": null,
"coverages": [
{
"code": "COMP",
"deductible": 50,
"individualLimit": 0,
"occurrenceLimit": 0,
"dayLimit": 0
}
],
"fleetNumber": null,
"fleetUnitNumber": "1",
"endorsements": [
"OEM Approved"
]
}
],
"taxExempt": "FALSE",
"policyData": "G+r99boRzfUExiJdE0IYp/EeRyybEAPInOh4NEX8UesSGLZvquPGXqn9HRn/4zge7aj+HhRN6CkN21JKCMqw4cPrSHhJzQpb83TQMsj71r2fmpx7/2mxZskTaSu0UG48ye+7qQki7a3xTkE9V3aw8+xFLhEm3P6gkExFSRefeCBPH3+n//ypF0ZsawSni4wPyzpZ5KOSyTX4kDPPJUS3Ry2drjHpT/oDKm6Iro0WBaqj8mf7758UlaW1OsxO3JHZc2fi2+vnYB+nVjbDN0DnWZOayLLmjUKyHf09kp2gDCEc39Mb1mweI9OOl8GtW91078A7wnCEWrTITvc1+VLCN9n7mwf6WJ8m47qw5oBxv5s="
}
],
"referralCorrelationId": "3fd7b485-569a-4b4b-8d90-7b7bb49dbb01",
"referralNumber": null,
"accountNumber": "550036",
"isSuccess": true,
"isError": false,
"errorCode": null,
"errorMessage": null,
"successMessage": null
}