From df807f953400e60e6d1eb48b453a758b29a7c31a Mon Sep 17 00:00:00 2001 From: Siraj Shaik Date: Mon, 10 Mar 2025 10:55:29 -0400 Subject: [PATCH] Scenario 25 is added. --- .../business-logic/data/MockPolicyData.ts | 3 +- .../business-logic/types/CustomerDetails.ts | 7 +- .../business-logic/types/IAddress.ts | 3 +- .../business-logic/types/ITestData.ts | 1 + .../business-logic/types/ITestPages.ts | 4 +- .../business-logic/types/TestCase.ts | 4 +- playwright-tests/pages/Addresslookuppage.ts | 84 +++++++++++++++++++ playwright-tests/playwright.config.ts | 2 +- playwright-tests/tests/0000__M.test.ts | 72 ++++++++++------ .../0024a_VehicleByVINUnverifiedBailout.ts | 21 +++-- .../0025a_VehicleByVINUnverifiedBailout.ts | 83 ++++++++++++++++++ .../api/v1/schedule/shop-time-slots.json | 47 +++++++++-- 12 files changed, 281 insertions(+), 50 deletions(-) create mode 100644 playwright-tests/pages/Addresslookuppage.ts create mode 100644 playwright-tests/tests/advanced/0025a_VehicleByVINUnverifiedBailout.ts diff --git a/playwright-tests/business-logic/data/MockPolicyData.ts b/playwright-tests/business-logic/data/MockPolicyData.ts index 213ca961..0e641e16 100644 --- a/playwright-tests/business-logic/data/MockPolicyData.ts +++ b/playwright-tests/business-logic/data/MockPolicyData.ts @@ -25,7 +25,8 @@ const policySoapByScenario: { [x: string]: string } = { '0021a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ', '0022a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ', '0023a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ', - '0024a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ' + '0024a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ', + '0025a': ' <_xml:ACORD> <_xml:SignonRs> <_xml:CustId> <_xml:SPName>Safelite <_xml:CustPermId>00005 <_xml:ClientDt>2025-01-03T14:13:58Z <_xml:CustLangPref>EN <_xml:ClientApp> <_xml:Org>Liberty Mutual <_xml:Name>PM CNG <_xml:Version>1.0 <_xml:ServerDt>2025-01-03T14:13:58Z <_xml:Language>EN <_xml:InsuranceSvcRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:PolicyInqRs> <_xml:RqUID>cda7f1a9-6a7c-4851-8c75-9eba3f721e26 <_xml:TransactionResponseDt>2025-01-03T14:13:58Z <_xml:MsgStatus> <_xml:MsgStatusCd>Success <_xml:AsOfDt>2017-02-06 <_xml:Requestor id=\"RequestorId_1\" /> <_xml:PartyInqInfo> <_xml:InsuredOrPrincipal id=\"InsuredOrPrincipalId_1\" /> <_xml:PolInfo> <_xml:PersAutoPolicy id=\"PersAutoPolicyID_1\"> <_xml:InsuredOrPrincipal> <_xml:GeneralPartyInfo> <_xml:NameInfo> <_xml:PersonName> <_xml:Surname>${lastName} <_xml:GivenName>${firstName} <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:Communications> <_xml:PhoneInfo> <_xml:PhoneTypeCd>Home <_xml:PhoneNumber>${phoneNumber} <_xml:InsuredOrPrincipalInfo> <_xml:InsuredOrPrincipalRoleCd>primary <_xml:PersonInfo> <_xml:GenderCd>M <_xml:PersPolicy> <_xml:PolicyNumber>${policyNumber} <_xml:PolicyVersion>STD <_xml:CompanyProductCd>liberty <_xml:LOBCd>AUTOP <_xml:ControllingStateProvCd>CA <_xml:ContractTerm> <_xml:EffectiveDt>2023-11-01 <_xml:ExpirationDt>2099-11-01 <_xml:GroupId>000 <_xml:MiscParty> <_xml:ItemIdInfo> <_xml:InsurerId>3861415357665 <_xml:Location> <_xml:ItemIdInfo id=\"ItemIdInfoId_1\" /> <_xml:Addr> <_xml:Addr1>${streetAddress} <_xml:City>${city} <_xml:StateProvCd>${state} <_xml:PostalCode>${postalCode} <_xml:Country>US <_xml:PersAutoLineBusiness> <_xml:LOBCd>AUTOP <_xml:PersVeh> <_xml:ItemIdInfo> <_xml:InsurerId>1 <_xml:Manufacturer>HOND <_xml:Model>ACCORD <_xml:ModelYear>2016 <_xml:Registration> <_xml:RegistrationId>UNKNOWN <_xml:StateProvCd>CA <_xml:VehIdentificationNumber>1HGCR2F31GA195371 <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>service_level_ind <_xml:VehRateGroupInfo> <_xml:RateGroup>000 <_xml:CoverageCd>parking_guard <_xml:Coverage> <_xml:CoverageCd>GLSS <_xml:CoverageDesc>ACV <_xml:Deductible> <_xml:FormatCurrencyAmt> <_xml:Amt>500.00 <_xml:Option> <_xml:OptionCd>V <_xml:OptionValue>1 <_xml:OptionValueDesc>COVERAGE_LIMIT_IND <_xml:RemarkText id=\"endorsementId_1\" IdRef=\"PersAutoPolicyID_1\">000 <_xml:PolicySummaryInfo> <_xml:PolicyStatusCd>ACTIVE ' } 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\":[]}}"; diff --git a/playwright-tests/business-logic/types/CustomerDetails.ts b/playwright-tests/business-logic/types/CustomerDetails.ts index e3bed95c..1152f7a4 100644 --- a/playwright-tests/business-logic/types/CustomerDetails.ts +++ b/playwright-tests/business-logic/types/CustomerDetails.ts @@ -30,9 +30,10 @@ export interface IVehicleDetails { make: string, model: string, style?: string, - vin?: string|string[], - licensePlateNumber?: string|string[], - licensePlateState?: string|string[], + vin?: string | string[], + address?: string | IAddress[], + licensePlateNumber?: string | string[], + licensePlateState?: string | string[], vehicleLookupType?: VehicleLookupType, } diff --git a/playwright-tests/business-logic/types/IAddress.ts b/playwright-tests/business-logic/types/IAddress.ts index 2e0b0fd8..d8e37671 100644 --- a/playwright-tests/business-logic/types/IAddress.ts +++ b/playwright-tests/business-logic/types/IAddress.ts @@ -3,5 +3,6 @@ export interface IAddress { city: string, state: string, postalCode: string, - country: string + country?: string, + lastName?: string } \ No newline at end of file diff --git a/playwright-tests/business-logic/types/ITestData.ts b/playwright-tests/business-logic/types/ITestData.ts index d4ed42e2..be4c1e25 100644 --- a/playwright-tests/business-logic/types/ITestData.ts +++ b/playwright-tests/business-logic/types/ITestData.ts @@ -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? + isAddressLookupValidations: boolean, // Should we validate address lookup errors? isVehicleSelectBailout: boolean, // Should we bailout on vehicle lookup? isNoComp: boolean, // Is this a NoComp policy? isItac: boolean, // Is this an ITAC scenario? diff --git a/playwright-tests/business-logic/types/ITestPages.ts b/playwright-tests/business-logic/types/ITestPages.ts index 46da9d0a..b4d01607 100644 --- a/playwright-tests/business-logic/types/ITestPages.ts +++ b/playwright-tests/business-logic/types/ITestPages.ts @@ -1,3 +1,4 @@ +import { AddressLookupPage } from "../../pages/addresslookuppage"; import { BailoutPage } from "../../pages/BailoutPage"; import CapabilityQuestionsPage from "../../pages/CapabilityQuestionsPage"; import { ContactConfirmationPage } from "../../pages/ContactConfirmationPage"; @@ -59,5 +60,6 @@ export default interface ITestPages { vehicleLookupAddressPage: VehicleLookupAddressPage, vehicleLookupLicensePage: VehicleLookupLicensePage, welcomePage: WelcomePage, - moldingQuestionsPage: MoldingQuestionsPage + moldingQuestionsPage: MoldingQuestionsPage, + addressLookupPage: AddressLookupPage, } \ No newline at end of file diff --git a/playwright-tests/business-logic/types/TestCase.ts b/playwright-tests/business-logic/types/TestCase.ts index 3378b4af..3103b990 100644 --- a/playwright-tests/business-logic/types/TestCase.ts +++ b/playwright-tests/business-logic/types/TestCase.ts @@ -44,6 +44,7 @@ import MockPolicyData from "@business-logic/data/MockPolicyData"; import VehiclePartQuestionsPage from "../../pages/VehiclePartsPage"; import CapabilityQuestionsPage from "../../pages/CapabilityQuestionsPage"; import { MoldingQuestionsPage } from "../../pages/MoldingQuestionsPage"; +import { AddressLookupPage } from "../../pages/addresslookuppage"; export default class TestCase extends DisposableBase implements ITestCase { public static FrameworkConfig: FrameworkConfig = { @@ -205,7 +206,8 @@ export default class TestCase extends DisposableBase implements ITestCase { vehicleLookupAddressPage: new VehicleLookupAddressPage(page), vehicleLookupLicensePage: new VehicleLookupLicensePage(page), welcomePage: new WelcomePage(page), - moldingQuestionsPage: new MoldingQuestionsPage(page) + moldingQuestionsPage: new MoldingQuestionsPage(page), + addressLookupPage: new AddressLookupPage(page) }; } diff --git a/playwright-tests/pages/Addresslookuppage.ts b/playwright-tests/pages/Addresslookuppage.ts new file mode 100644 index 00000000..4aa73601 --- /dev/null +++ b/playwright-tests/pages/Addresslookuppage.ts @@ -0,0 +1,84 @@ +import { expect, type Locator, type Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { IAddress } from '@business-logic/types/IAddress'; + +export class AddressLookupPage extends BasePage { + readonly page: Page; + readonly streetAddressTextBox: Locator; + readonly cityTextBox: Locator; + readonly stateDropdown: Locator; + readonly zipTextBox: Locator; + readonly lastNameTextBox: Locator; + readonly addressNoMatchTextBox: Locator; + readonly stateRestrictionsTextBox: Locator; + url = process.env['baseurl']! + '/?issPage=address-lookup'; + + constructor(page: Page) { + super(page); + this.page = page; + this.streetAddressTextBox = page.getByRole('textbox', { name: 'Street address' }) + this.cityTextBox = page.getByRole('textbox', { name: 'City' }) + this.stateDropdown = page.getByRole('combobox') + this.zipTextBox = page.getByRole('textbox', { name: 'ZIP code' }) + this.lastNameTextBox = page.getByRole('textbox', { name: 'Last name' }) + this.addressNoMatchTextBox = page.getByText('Your address didn’t return a VIN matchPlease re-enter the information below or'); + this.stateRestrictionsTextBox = page.getByText('State restrictionsLooks like'); + } + + async enterAddress(street, city, state, zip, lastName) { + this.streetAddressTextBox.clear(); + this.page.waitForTimeout(250); + this.streetAddressTextBox.fill(street); + this.cityTextBox.clear(); + this.page.waitForTimeout(250); + this.cityTextBox.fill(city); + this.stateDropdown.selectOption(state); + this.zipTextBox.clear(); + this.page.waitForTimeout(250); + this.zipTextBox.fill(zip); + this.lastNameTextBox.clear(); + this.page.waitForTimeout(250); + this.lastNameTextBox.fill(lastName); + this.page.waitForTimeout(250); + + } + async forceAddressFormToAppear() { + await expect(async () => { + await this.streetAddressTextBox.click(); + await this.streetAddressTextBox.pressSequentially('7400 Safelite Way'); + await this.streetAddressTextBox.press('Tab'); + await expect(this.zipTextBox).toBeVisible({ timeout: 100 }); + }).toPass(); + } + async populateAddress(fullAdddress: IAddress) { + + if (fullAdddress.street) { + // Force address form to appear + await this.forceAddressFormToAppear(); + + // Fill address + await this.fillAndValidate(this.streetAddressTextBox, fullAdddress.street); + await this.fillAndValidate(this.zipTextBox, fullAdddress.postalCode) + await this.fillAndValidate(this.cityTextBox, fullAdddress.city); + await this.stateDropdown.selectOption(fullAdddress.state); + } + + if (fullAdddress.lastName) { + await this.fillAndValidate(this.lastNameTextBox, fullAdddress.lastName!); + } + // if (fullAdddress.firstName!) { + // await this.fillAndValidate(this.firstNameTextBox, fullAdddress.firstName); + // } + } + + async validateAddressLookupAlerts(addressSet: IAddress[]) { + await this.populateAddress(addressSet[0]); + await this.continueButton.click(); + await expect(this.addressNoMatchTextBox).toBeVisible(); + await this.populateAddress(addressSet[1]); + await this.continueButton.click(); + await expect(this.stateRestrictionsTextBox).toBeVisible(); + await this.populateAddress(addressSet[2]); + } + +} \ No newline at end of file diff --git a/playwright-tests/playwright.config.ts b/playwright-tests/playwright.config.ts index 20bf301e..7edf4eb3 100644 --- a/playwright-tests/playwright.config.ts +++ b/playwright-tests/playwright.config.ts @@ -58,7 +58,7 @@ export default defineConfig({ ['junit'], ['list'] ], - timeout: 120_000, + timeout: 180_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('/')`. */ diff --git a/playwright-tests/tests/0000__M.test.ts b/playwright-tests/tests/0000__M.test.ts index 11f110fe..a8ae5839 100644 --- a/playwright-tests/tests/0000__M.test.ts +++ b/playwright-tests/tests/0000__M.test.ts @@ -52,6 +52,7 @@ import advancedScenario0022TestCases from "./advanced/0022a_VehicleByVIN"; import advancedScenario0023TestCases from "./advanced/0023a_VehicleByVINPartsQns"; import { createAccessibilityHtmlReport } from "@impl/utils/ReportUtils"; import advancedScenario0024TestCases from "./advanced/0024a_VehicleByVINUnverifiedBailout"; +import advancedScenario0025TestCases from "./advanced/0025a_VehicleByVINUnverifiedBailout"; @@ -283,6 +284,11 @@ test.describe.parallel('ISS QA Automation Regression', () => { for (const testCase of advancedScenario0024TestCases) { test(...prepareTest(testCase, run, options, ruleEngine)); } + + // Scenario 0025a + for (const testCase of advancedScenario0025TestCases) { + test(...prepareTest(testCase, run, options, ruleEngine)); + } }); @@ -327,7 +333,7 @@ async function runWorkflow(page: Page, testCase: TestCase) { appointmentDetails, isSafelite, endorsements, partQuestions, paymentDetails, isNoComp, isItac, isRecalNotification, isRecalWarning, servicePackage, hasStateLawPopup, otherVehiclesOnPolicy, - isSeparateApptsWarning, vehiclePartQuestions, editVehicleDetails, + isSeparateApptsWarning, vehiclePartQuestions, editVehicleDetails, isAddressLookupValidations, hasMilitaryWarning, capabilityQuestions, isUseVehicleOnPolicy, isVehicleLookupValidations, isMoldingQuestion } = testCase.testData; let { isPolicyFound } = testCase.testData; // Allow isPolicyFound to be re-assigned @@ -340,7 +346,7 @@ async function runWorkflow(page: Page, testCase: TestCase) { endorsementsPage, vehicleLookupPage, partQuestionsPage, paymentMethodPage, vehicleLookupAddressPage, vehicleLookupLicensePage, vinLookupPage, bailoutPage, tpaSearchPage, tpaSubmitPage, tpaConfirmationPage, - vehiclePartQuestionsPage, capabilityQuestionsPage, moldingQuestionsPage } = testCase.pages; + vehiclePartQuestionsPage, capabilityQuestionsPage, moldingQuestionsPage, addressLookupPage } = testCase.pages; // Destructure bailout flags const { isVehicleSelectBailout, isDoNotSeeMyShopBailout, isTpaNotEnabledBailout, @@ -489,6 +495,7 @@ async function runWorkflow(page: Page, testCase: TestCase) { }); + if (testCase.testData.isVehicleSelectBailout) { await test.step('Lookup vehicle >> By VIN-' + vehicleDetails!.vin!, async () => { await vinLookupPage.enterVin(vehicleDetails!.vin!); @@ -504,33 +511,44 @@ async function runWorkflow(page: Page, testCase: TestCase) { return; } - switch (vehicleDetails!.vehicleLookupType!) { - case VehicleLookupType.Address: - await test.step('VehicleLookupAddressPage >> Lookup by address: ' + customerDetails!.address.street, async () => { - await vehicleLookupAddressPage.lookupVehicleByAddress(customerDetails!, vehicleDetails!); - await vehicleLookupAddressPage.nextPage(); - }); - break; - case VehicleLookupType.LicensePlateNumber: - if (isVehicleLookupValidations) { - await test.step('VehicleLookupLicensePage >> Lookup by license plate: ' + vehicleDetails!.licensePlateNumber, async () => { - await vehicleLookupLicensePage.enterPlateDetails(vehicleDetails!, isVehicleLookupValidations); - await vehicleLookupLicensePage.nextPage(); - }); - } else { - await test.step('VehicleLookupLicensePage >> Lookup by license plate: ' + vehicleDetails!.licensePlateNumber, async () => { - await vehicleLookupLicensePage.enterPlateDetails(vehicleDetails!); - await vehicleLookupLicensePage.nextPage(); - }); + if (isAddressLookupValidations) { + await test.step('Address Lookup validations >> Vehicle Lookup by address: ' + customerDetails!.address.street, async () => { + if (Array.isArray(vehicleDetails?.address)) { + await addressLookupPage.validateAddressLookupAlerts(vehicleDetails?.address); + await addressLookupPage.nextPage(); } - break; - case VehicleLookupType.Vin: - await test.step('VinLookupPage >> Lookup by VIN: ' + vehicleDetails!.vin!, async () => { - await vinLookupPage.enterVin(vehicleDetails!.vin!, isVehicleLookupValidations); - await vinLookupPage.nextPage(); - }); - break; + }); + } else { + + switch (vehicleDetails!.vehicleLookupType!) { + case VehicleLookupType.Address: + await test.step('VehicleLookupAddressPage >> Lookup by address: ' + customerDetails!.address.street, async () => { + await vehicleLookupAddressPage.lookupVehicleByAddress(customerDetails!, vehicleDetails!); + await vehicleLookupAddressPage.nextPage(); + }); + break; + case VehicleLookupType.LicensePlateNumber: + if (isVehicleLookupValidations) { + await test.step('VehicleLookupLicensePage >> Lookup by license plate: ' + vehicleDetails!.licensePlateNumber, async () => { + await vehicleLookupLicensePage.enterPlateDetails(vehicleDetails!, isVehicleLookupValidations); + await vehicleLookupLicensePage.nextPage(); + }); + + } else { + await test.step('VehicleLookupLicensePage >> Lookup by license plate: ' + vehicleDetails!.licensePlateNumber, async () => { + await vehicleLookupLicensePage.enterPlateDetails(vehicleDetails!); + await vehicleLookupLicensePage.nextPage(); + }); + } + break; + case VehicleLookupType.Vin: + await test.step('VinLookupPage >> Lookup by VIN: ' + vehicleDetails!.vin!, async () => { + await vinLookupPage.enterVin(vehicleDetails!.vin!, isVehicleLookupValidations); + await vinLookupPage.nextPage(); + }); + break; + } } } if (isMoldingQuestion) { diff --git a/playwright-tests/tests/advanced/0024a_VehicleByVINUnverifiedBailout.ts b/playwright-tests/tests/advanced/0024a_VehicleByVINUnverifiedBailout.ts index 0307088b..52ae3c5c 100644 --- a/playwright-tests/tests/advanced/0024a_VehicleByVINUnverifiedBailout.ts +++ b/playwright-tests/tests/advanced/0024a_VehicleByVINUnverifiedBailout.ts @@ -2,7 +2,7 @@ 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 { faker, tr } from "@faker-js/faker"; import { getNextWeekday } from "@impl/utils/DateUtils"; import MockPolicyData from "@business-logic/data/MockPolicyData"; import { ICustomerDetails } from "@business-logic/types/CustomerDetails"; @@ -35,8 +35,9 @@ const advancedScenario0024Data: Partial = { endorsements: undefined, isUseVehicleOnPolicy: false, isVehicleLookupValidations: false, - isVehicleSelectBailout: true, - isMoldingQuestion: true, + isVehicleSelectBailout: false, + isAddressLookupValidations: true, + isMoldingQuestion: false, isSafelite: true, servicePackage: faker.helpers.enumValue(ServicePackage), customerDetails: customerDetails, @@ -49,11 +50,15 @@ const advancedScenario0024Data: Partial = { policySoap: policySoap, vehicleDetails: { year: '2015', - make: 'Honda', - model: 'Accord', - style: '4 door sedan', - vehicleLookupType: VehicleLookupType.Vin, - vin: '0HGCR2E30FA099831', + make: 'Ford', + model: 'F Series F150', + style: '2 door super cab', + vehicleLookupType: VehicleLookupType.Address, + address: [ + { street: '9 Test Street', city: 'Columbus', state: 'OH', postalCode: '43220', lastName: 'Test' }, + { street: '8621 GREENLEAF AVE', city: 'Whittier', state: 'California', postalCode: '90602', lastName: 'Johnson' }, + { street: '10212 JEWEL CT', city: 'Conroe', state: 'Texas', postalCode: '77385', lastName: 'Reed' } + ], }, vehicleDamage: [ VehicleDamage.WindshieldCrack, diff --git a/playwright-tests/tests/advanced/0025a_VehicleByVINUnverifiedBailout.ts b/playwright-tests/tests/advanced/0025a_VehicleByVINUnverifiedBailout.ts new file mode 100644 index 00000000..2cdcaaaf --- /dev/null +++ b/playwright-tests/tests/advanced/0025a_VehicleByVINUnverifiedBailout.ts @@ -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 = `~AutomatedScenario0025a${faker.string.uuid().substring(0, 6)}`; +const policySoap = MockPolicyData.getPolicySoapByScenario('0025a', customerDetails, policyNumber); + +const advancedScenario0025Data: Partial = { + 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 advancedScenario0025TestCases: TestCase[] = []; +for (const client of advancedClients) { + const data = { ...advancedScenario0025Data }; + data.clientTag = client.clientTag; + const tc = new TestCase({ + name: `0025a Advanced client Unlisted Vehicle Bailout: "${client.accountName}"`, + tags: [`@${client.clientTag}`, `@${client.accountName}`, '@Advanced'], + testData: data + }, undefined, '00255a'); + advancedScenario0025TestCases.push(tc); +} + +export default advancedScenario0025TestCases; \ No newline at end of file diff --git a/playwright-tests/tests/mockResponses/0002a_Advanced_Replace_Deductible_Client/schedule/api/v1/schedule/shop-time-slots.json b/playwright-tests/tests/mockResponses/0002a_Advanced_Replace_Deductible_Client/schedule/api/v1/schedule/shop-time-slots.json index ba6e6c41..b807b200 100644 --- a/playwright-tests/tests/mockResponses/0002a_Advanced_Replace_Deductible_Client/schedule/api/v1/schedule/shop-time-slots.json +++ b/playwright-tests/tests/mockResponses/0002a_Advanced_Replace_Deductible_Client/schedule/api/v1/schedule/shop-time-slots.json @@ -3,7 +3,7 @@ "estimatedServiceMinutesMaximum": 120, "days": [ { - "date": "2025-02-22", + "date": "2025-03-01", "timeSlots": [ { "id": "01813-01813-S-B*20873*ALL DAY DROP OFF", @@ -14,7 +14,40 @@ ] }, { - "date": "2025-02-24", + "date": "2025-03-02", + "timeSlots": [ + { + "id": "01813-01813-S-B*20873*ALL DAY DROP OFF", + "startTime": "07:30", + "endTime": "17:00", + "offerPremium": false + } + ] + }, + { + "date": "2025-03-03", + "timeSlots": [ + { + "id": "01813-01813-S-B*20873*ALL DAY DROP OFF", + "startTime": "07:30", + "endTime": "17:00", + "offerPremium": false + } + ] + }, + { + "date": "2025-03-04", + "timeSlots": [ + { + "id": "01813-01813-S-B*20873*ALL DAY DROP OFF", + "startTime": "07:30", + "endTime": "17:00", + "offerPremium": false + } + ] + }, + { + "date": "2025-03-24", "timeSlots": [ { "id": "01813-01813-S-B*20875*ALL DAY DROP OFF", @@ -25,7 +58,7 @@ ] }, { - "date": "2025-02-25", + "date": "2025-03-25", "timeSlots": [ { "id": "01813-01813-S-B*20876*ALL DAY DROP OFF", @@ -36,7 +69,7 @@ ] }, { - "date": "2025-02-26", + "date": "2025-03-26", "timeSlots": [ { "id": "01813-01813-S-B*20877*ALL DAY DROP OFF", @@ -47,7 +80,7 @@ ] }, { - "date": "2025-02-27", + "date": "2025-03-27", "timeSlots": [ { "id": "01813-01813-S-B*20878*ALL DAY DROP OFF", @@ -58,7 +91,7 @@ ] }, { - "date": "2025-02-28", + "date": "2025-03-28", "timeSlots": [ { "id": "01813-01813-S-B*20879*ALL DAY DROP OFF", @@ -69,7 +102,7 @@ ] }, { - "date": "2025-03-01", + "date": "2025-04-01", "timeSlots": [ { "id": "01813-01813-S-B*20880*ALL DAY DROP OFF",