Changed existing validateURL function on BasePage to WaitForURL, and added a new function for checking the url of the page. Added calls to this function throughout the workflow, on each page change
741 lines
33 KiB
TypeScript
741 lines
33 KiB
TypeScript
import TestCase from "@business-logic/types/TestCase";
|
|
import { expect, Page } from "@playwright/test";
|
|
import { addSmokeTagToRandomTest, prepareTest, test, TestInfo } from "@business-logic/types/Test";
|
|
import { RuleEngine, ValidationOptions } from "@business-logic/types/RuleEngine";
|
|
import { ICustomerDetails } from "@business-logic/types/CustomerDetails";
|
|
import essentialHpTestCases from "./0016_EssentialRepairInShop";
|
|
import essentialReplaceTestCases from "./0013_EssentialReplace";
|
|
import { BailoutCode, VehicleDamage, VehicleLookupType } from "@business-logic/types/Enums";
|
|
import essentialTpaNotEnabledTestCases from "./0003_EssentialTpaNotEnabledBailout";
|
|
import essentialDoNotSeeShopTestCases from "./0011_EssentialDoNotSeeShopBailout";
|
|
import essentialVehicleNotFoundTestCases from "./0010_EssentialVehicleNotFoundBailout";
|
|
import essentialPartsServiceErrorBailout_0009 from "./0009_EssentialPartsServiceErrorBailout";
|
|
import essentialHeavyVehicleBailoutTestCases from "./0008_EssentialHeavyVehicleBailout";
|
|
import essentialRepairMobileTests from "./0014_EssentialRepairMobile";
|
|
import essentialReplacePartsQuestionsDropoff_0015 from "./0015_EssentialReplacePartsQuestionsDropoff";
|
|
import essentialUniqueGlassTests from "./0012_EssentialUniqueGlass";
|
|
import essentialRepairInShopAcuraTests from "./0002_EssentialRepairInShopAcura";
|
|
import essentialTpaEnabled_0004 from "./0004_EssentialTpaEnabled";
|
|
import essentialRepairMobileHyundaiTests from "./0007_EssentialRepairHyundaiMobile";
|
|
import essentialTpaNotEnabledReplace_0017 from "./0017_EssentialTpaNotEnabledBailoutReplace";
|
|
import essentialTpaEnabledReplace_0018 from "./0018_EssentialTpaEnabledReplace";
|
|
import essentialTpaEnabledReplaceRecal_0019 from "./0019_EssentialTpaEnabledReplaceRecal";
|
|
import advancedScenario0001TestCases from "./advanced/0001a_ReplaceInShopCredit";
|
|
import advancedScenario0003TestCases from "./advanced/0003a_MobileAfterpay";
|
|
import essentialReplaceDynamicAdasTests from "./0005_EssentialReplaceDynamicAdas";
|
|
import essentialReplaceStaticAdasTests from "./0001_EssentialReplaceStatisAdas";
|
|
import essentialVehicleLookupBailoutTests from "./0020_EssentialVehicleLookupBailout";
|
|
import essentialPriceServiceErrorBailoutTests from "./0021_EssentialPriceServiceErrorBailout";
|
|
import { forceAPIError, mockApiManager } from "@impl/utils/HttpUtils";
|
|
|
|
import advancedScenario0002TestCases from "./advanced/0002a_ReplaceOemEndorsement";
|
|
import ApiResponseInterceptUtil from "@impl/api/ApiResponseInterceptUtil";
|
|
import advancedScenario0004aTestCases from "./advanced/0004a_NoDeductibleAdas";
|
|
import advancedScenario0006TestCases from "./advanced/0006a_RepairNoDeductibleMobile";
|
|
import advancedScenario0007TestCases from "./advanced/0007a_RepairStateLanguage";
|
|
import advancedScenario0008TestCases from "./advanced/0008a_RepairTpa";
|
|
import advancedScenario0011TestCases from "./advanced/0011a_ItacNoAdas";
|
|
import advancedScenario0012TestCases from "./advanced/0012a_ItacDropOff";
|
|
import advancedScenario0014TestCases from "./advanced/0014a_NoCompAdas";
|
|
import advancedScenario0013TestCases from "./advanced/0013a_ItacMobile";
|
|
import advancedScenario0015TestCases from "./advanced/0015a_NoCompPartQuestions";
|
|
import advancedScenario0016TestCases from "./advanced/0016a_NoCompAllGlass";
|
|
import advancedScenario0017TestCases from "./advanced/0017a_NoCompPremium";
|
|
import advancedScenario0018TestCases from "./advanced/0018a_NoCompGlassOnly";
|
|
import advancedScenario0019TestCases from "./advanced/0019a_NoCompEditVehicle";
|
|
import advancedScenario0020TestCases from "./advanced/0020a_NoCompChangeLoc";
|
|
import advancedScenario0005TestCases from "./advanced/0005a_CapabilityQuestions";
|
|
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";
|
|
|
|
|
|
|
|
test.describe.parallel('ISS QA Automation Regression', () => {
|
|
const ruleEngine = new RuleEngine<TestCase>();
|
|
const options = new ValidationOptions();
|
|
addSmokeTagToRandomTest(essentialReplaceStaticAdasTests);
|
|
addSmokeTagToRandomTest(essentialRepairInShopAcuraTests);
|
|
addSmokeTagToRandomTest(essentialTpaNotEnabledTestCases);
|
|
addSmokeTagToRandomTest(essentialTpaEnabled_0004);
|
|
addSmokeTagToRandomTest(essentialReplaceDynamicAdasTests);
|
|
addSmokeTagToRandomTest(essentialRepairMobileHyundaiTests);
|
|
addSmokeTagToRandomTest(essentialVehicleNotFoundTestCases);
|
|
addSmokeTagToRandomTest(essentialHeavyVehicleBailoutTestCases);
|
|
addSmokeTagToRandomTest(essentialPartsServiceErrorBailout_0009);
|
|
addSmokeTagToRandomTest(essentialDoNotSeeShopTestCases);
|
|
addSmokeTagToRandomTest(essentialUniqueGlassTests);
|
|
addSmokeTagToRandomTest(essentialReplaceTestCases);
|
|
addSmokeTagToRandomTest(essentialRepairMobileTests);
|
|
addSmokeTagToRandomTest(essentialReplacePartsQuestionsDropoff_0015);
|
|
addSmokeTagToRandomTest(essentialHpTestCases);
|
|
addSmokeTagToRandomTest(essentialTpaNotEnabledReplace_0017);
|
|
addSmokeTagToRandomTest(essentialTpaEnabledReplace_0018);
|
|
addSmokeTagToRandomTest(essentialTpaEnabledReplaceRecal_0019);
|
|
addSmokeTagToRandomTest(essentialVehicleLookupBailoutTests);
|
|
addSmokeTagToRandomTest(essentialPriceServiceErrorBailoutTests);
|
|
|
|
//Scenario 1
|
|
for (const testCase of essentialReplaceStaticAdasTests) {
|
|
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 2
|
|
for (const testCase of essentialRepairInShopAcuraTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 3
|
|
for (const testCase of essentialTpaNotEnabledTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 4
|
|
for (const testCase of essentialTpaEnabled_0004) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 5
|
|
for (const testCase of essentialReplaceDynamicAdasTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 7
|
|
for (const testCase of essentialRepairMobileHyundaiTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 8
|
|
for (const testCase of essentialHeavyVehicleBailoutTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 9
|
|
for (const testCase of essentialPartsServiceErrorBailout_0009) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 10
|
|
for (const testCase of essentialVehicleNotFoundTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 11
|
|
for (const testCase of essentialDoNotSeeShopTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 12
|
|
for (const testCase of essentialUniqueGlassTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 13 //defect# SSR-2009
|
|
for (const testCase of essentialReplaceTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 14
|
|
for (const testCase of essentialRepairMobileTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 15
|
|
for (const testCase of essentialReplacePartsQuestionsDropoff_0015) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 16
|
|
for (const testCase of essentialHpTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 17
|
|
for (const testCase of essentialTpaNotEnabledReplace_0017) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 18
|
|
for (const testCase of essentialTpaEnabledReplace_0018) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 19
|
|
for (const testCase of essentialTpaEnabledReplaceRecal_0019) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
//Scenario 20
|
|
for (const testCase of essentialVehicleLookupBailoutTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine)); //skipping this until SSR-2004 is fixed
|
|
}
|
|
//Scenario 21
|
|
for (const testCase of essentialPriceServiceErrorBailoutTests) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Advanced Scenarios
|
|
|
|
// Scenario 0001a
|
|
for (const testCase of advancedScenario0001TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0002a
|
|
for (const testCase of advancedScenario0002TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0003a
|
|
// Note: payment will fail in dev. Payment (PIA) works fine in SYS
|
|
for (const testCase of advancedScenario0003TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0004a
|
|
for (const testCase of advancedScenario0004aTestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0005a
|
|
for (const testCase of advancedScenario0005TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0006a
|
|
for (const testCase of advancedScenario0006TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0007a
|
|
for (const testCase of advancedScenario0007TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0008a
|
|
for (const testCase of advancedScenario0008TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0009a
|
|
for (const testCase of advancedScenario0009TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
// Scenario 0010a
|
|
for (const testCase of advancedScenario0010TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0011a
|
|
for (const testCase of advancedScenario0011TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0012a
|
|
for (const testCase of advancedScenario0012TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0013a
|
|
for (const testCase of advancedScenario0013TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0014a
|
|
for (const testCase of advancedScenario0014TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0015a
|
|
for (const testCase of advancedScenario0015TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0016a
|
|
// FIXME: Defect was created INSR-2138
|
|
for (const testCase of advancedScenario0016TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0017a
|
|
for (const testCase of advancedScenario0017TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0018a
|
|
for (const testCase of advancedScenario0018TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0019a
|
|
for (const testCase of advancedScenario0019TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0020a : There's a defect open INSR-2149
|
|
for (const testCase of advancedScenario0020TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0021a
|
|
for (const testCase of advancedScenario0021TestCases) {
|
|
test(...prepareTest(testCase, run, options, ruleEngine));
|
|
}
|
|
|
|
// Scenario 0022a
|
|
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));
|
|
}
|
|
});
|
|
|
|
|
|
test.afterEach(async ({ page, testInfo }) => {
|
|
await TestCase.afterEachMethod(page, testInfo);
|
|
});
|
|
|
|
test.afterAll(() => {
|
|
createAccessibilityHtmlReport();
|
|
});
|
|
|
|
async function run(page: Page, testInfo: TestInfo): Promise<void> {
|
|
if (!(testInfo.testCase.testData?.isMockTesting ?? false)) {
|
|
if (testInfo.testCase.testData?.isPolicyFound) {
|
|
await testInfo.testCase.setup();
|
|
}
|
|
}
|
|
testInfo.testCase.setupPages(page);
|
|
if (testInfo.testCase.testData.isAuthenticationRequired) {
|
|
await testInfo.testCase.pages.welcomePage.gotoWithAuthentication(testInfo.testCase.testData!.clientTag!);
|
|
}
|
|
else {
|
|
await testInfo.testCase.pages.welcomePage.goto(testInfo.testCase.testData!.clientTag!);
|
|
}
|
|
await runWorkflow(page, testInfo.testCase);
|
|
}
|
|
|
|
async function runWorkflow(page: Page, testCase: TestCase) {
|
|
if (testCase.testData?.isMockTesting ?? false) {
|
|
// await mockApiManager.mockApiResponse(page, 'common', testCase.testData!.isMockTesting ?? false);
|
|
await mockApiManager.mockApiResponse(page, testCase.name.split(':')[0], testCase.testData!.isMockTesting ?? false);
|
|
|
|
} else {
|
|
// Intercept API Responses
|
|
const apiResponseInterceptUtil = new ApiResponseInterceptUtil(testCase.testData);
|
|
page.on('response', apiResponseInterceptUtil.handleInterceptResponse);
|
|
await mockApiManager.mockApiResponse(page, 'common', true); // making sure no experiments
|
|
}
|
|
|
|
// Destructure data for easy access
|
|
const { customerDetails, claimDetails, vehicleDetails, vehicleDamage,
|
|
appointmentDetails, isSafelite, endorsements,
|
|
partQuestions, paymentDetails, isNoComp, isItac, isRecalNotification,
|
|
isRecalWarning, servicePackage, hasStateLawPopup, otherVehiclesOnPolicy,
|
|
isSeparateApptsWarning, vehiclePartQuestions, editVehicleDetails,
|
|
hasMilitaryWarning, capabilityQuestions, isUseVehicleOnPolicy, isVehicleLookupValidations, isMoldingQuestion } = testCase.testData;
|
|
|
|
let { isPolicyFound } = testCase.testData; // Allow isPolicyFound to be re-assigned
|
|
|
|
// Destructure pages for easy access
|
|
const { welcomePage, duplicateCheckPage, policyHolderDetailsPage,
|
|
vehicleSelectionPage, vehicleDamagePage, coverageStatementPage,
|
|
providerPreferencePage, serviceLocationPage, servicePackagesPage,
|
|
schedulePage, contactDetailsPage, orderConfirmationPage, policyVehiclesPage,
|
|
endorsementsPage, vehicleLookupPage, partQuestionsPage, paymentMethodPage,
|
|
vehicleLookupAddressPage, vehicleLookupLicensePage, vinLookupPage,
|
|
bailoutPage, tpaSearchPage, tpaSubmitPage, tpaConfirmationPage,
|
|
vehiclePartQuestionsPage, capabilityQuestionsPage, moldingQuestionsPage } = testCase.pages;
|
|
|
|
// Destructure bailout flags
|
|
const { isVehicleSelectBailout, isDoNotSeeMyShopBailout, isTpaNotEnabledBailout,
|
|
isHeavyTruckVehicleBailout, isPartsServiceErrorBailout,
|
|
isVehicleLookupBailout, isPriceServiceErrorBailout } = testCase.testData.bailoutFlags || {};
|
|
|
|
const repairTypes: VehicleDamage[] = [
|
|
VehicleDamage.WindshieldOneChip,
|
|
VehicleDamage.WindshieldTwoChips,
|
|
VehicleDamage.WindshieldThreeChips
|
|
]
|
|
|
|
// Are we replacing or repairing?
|
|
const isReplace = !repairTypes.some(damageType => {
|
|
return vehicleDamage!.includes(damageType);
|
|
});
|
|
|
|
const hasEndorsements = endorsements && endorsements.length > 0;
|
|
|
|
await test.step('WelcomePage >> Populate Customer Details', async () => {
|
|
await welcomePage.populatePage(customerDetails!, claimDetails!, await welcomePage.hasCityInfo());
|
|
await welcomePage.nextPage();
|
|
});
|
|
|
|
if (testCase.testData.isDuplicateClaim) {
|
|
// TODO: Scenarios where we want to resume from duplicate
|
|
// TODO: Dynamic for when we don't care if duplicate page appears
|
|
|
|
await test.step('DuplicateCheckPage >> Start New Claim', async () => {
|
|
await duplicateCheckPage.validateURL(duplicateCheckPage.url);
|
|
await duplicateCheckPage.startNewClaim();
|
|
await duplicateCheckPage.nextPage();
|
|
});
|
|
}
|
|
|
|
if (isPolicyFound) {
|
|
await test.step('PolicyVehiclesPage >> Select vehicle', async () => {
|
|
await policyVehiclesPage.validateURL(policyVehiclesPage.url);
|
|
await policyVehiclesPage.logReferralNumber();
|
|
// Validate other vehicles on policy
|
|
if (otherVehiclesOnPolicy && otherVehiclesOnPolicy.length > 0) {
|
|
for (const vehicle of otherVehiclesOnPolicy) {
|
|
await policyVehiclesPage.validateVehicleIsOnPolicy(vehicle);
|
|
}
|
|
}
|
|
if (!(isUseVehicleOnPolicy ?? true)) {
|
|
await policyVehiclesPage.selectVehicleNotListed();
|
|
await policyVehiclesPage.nextPage();
|
|
await vehicleSelectionPage.selectVehicle(vehicleDetails!);
|
|
await policyVehiclesPage.nextPage();
|
|
} else {
|
|
// Select vehicle
|
|
await policyVehiclesPage.selectVehicle(vehicleDetails!);
|
|
await policyVehiclesPage.nextPage();
|
|
}
|
|
});
|
|
|
|
if (isHeavyTruckVehicleBailout) {
|
|
await test.step('BailoutPage >> Heavy Vehicle Bailout', async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.HeavyTruckVehicle);
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (hasEndorsements) {
|
|
await test.step('EndorsementsPage >> Select Endorsements', async () => {
|
|
await endorsementsPage.validateURL(endorsementsPage.url);
|
|
await endorsementsPage.verifyEndorsements(endorsements);
|
|
await endorsementsPage.selectEndorsements(endorsements);
|
|
await endorsementsPage.nextPage();
|
|
});
|
|
}
|
|
|
|
} else {
|
|
await policyVehiclesPage.logReferralNumber();
|
|
await test.step('PolicyHolderDetailsPage >> Enter customer data', async () => {
|
|
await policyHolderDetailsPage.validateURL(policyHolderDetailsPage.url);
|
|
await policyHolderDetailsPage.fillCustomerDetails(customerDetails!);
|
|
await policyHolderDetailsPage.nextPage();
|
|
});
|
|
|
|
if (isVehicleLookupBailout) {
|
|
forceAPIError(page, '/vehicle/api/v1/vehicle/lookup')
|
|
}
|
|
|
|
await test.step('VehicleDetailsPage >> Select Vehicle', async () => {
|
|
await vehicleSelectionPage.validateURL(vehicleSelectionPage.url);
|
|
await vehicleSelectionPage.selectVehicle(vehicleDetails!);
|
|
await vehicleSelectionPage.nextPage();
|
|
});
|
|
|
|
if (isVehicleLookupBailout) {
|
|
await test.step('BailoutPage >> Vehicle Lookup Bailout', async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.VehicleLookupError);
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (isHeavyTruckVehicleBailout) {
|
|
await test.step('BailoutPage >> Heavy Vehicle Bailout', async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.HeavyTruckVehicle);
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (editVehicleDetails) {
|
|
isPolicyFound = false; // Flow proceeds as unverified
|
|
testCase.testData.isPolicyFound = false;
|
|
await test.step('VehicleDamagePage >> Click Edit Vehicle', async () => {
|
|
await vehicleDamagePage.validateURL(vehicleDamagePage.url);
|
|
await vehicleDamagePage.editVehicleButton.click();
|
|
});
|
|
|
|
await test.step('VehicleDetailsPage >> Select edited vehicle', async () => {
|
|
await test.step('VehicleDetailsPage >> Select Vehicle', async () => {
|
|
await vehicleSelectionPage.validateURL(vehicleSelectionPage.url);
|
|
await vehicleSelectionPage.selectVehicle(editVehicleDetails);
|
|
await vehicleSelectionPage.nextPage();
|
|
});
|
|
});
|
|
}
|
|
|
|
await test.step('VehicleDamagePage >> Select Damage', async () => {
|
|
await vehicleDamagePage.validateURL(vehicleDamagePage.url);
|
|
if (isSeparateApptsWarning) {
|
|
await vehicleDamagePage.checkSeparateApptsWarning();
|
|
}
|
|
await vehicleDamagePage.selectDamage(vehicleDamage!);
|
|
await vehicleDamagePage.nextPage();
|
|
});
|
|
|
|
if (isPartsServiceErrorBailout) {
|
|
await test.step('VehicleLookupPage >> Select Lookup Type', async () => {
|
|
await vehicleLookupPage.validateURL(vehicleLookupPage.url);
|
|
await vehicleLookupPage.vehicleLookup(vehicleDetails!);
|
|
});
|
|
await test.step('VinLookupPage >> Lookup by VIN', async () => {
|
|
await vinLookupPage.validateURL(vinLookupPage.url);
|
|
await vinLookupPage.enterVin(vehicleDetails!.vin!);
|
|
forceAPIError(page, '/parts/api/v1/parts')
|
|
await vinLookupPage.nextPage();
|
|
});
|
|
await test.step('BailoutPage >> Parts Service Error Bailout', async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.PartsServiceError);
|
|
return;
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (isReplace && (!(isPolicyFound) || !(isUseVehicleOnPolicy ?? true))) {
|
|
|
|
|
|
await test.step('VehicleLookupPage >> Select Lookup Type' + vehicleDetails?.vehicleLookupType, async () => {
|
|
await vehicleLookupPage.validateURL(vehicleLookupPage.url);
|
|
await vehicleLookupPage.vehicleLookup(vehicleDetails!);
|
|
});
|
|
|
|
|
|
if (isVehicleSelectBailout) {
|
|
await vinLookupPage.validateURL(vinLookupPage.url);
|
|
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!) {
|
|
case VehicleLookupType.Address:
|
|
await test.step('VehicleLookupAddressPage >> Lookup by address: ' + customerDetails!.address.street, async () => {
|
|
await vehicleLookupAddressPage.validateURL(vehicleLookupAddressPage.url);
|
|
await vehicleLookupAddressPage.lookupVehicleByAddress(customerDetails!, vehicleDetails!);
|
|
await vehicleLookupAddressPage.nextPage();
|
|
});
|
|
break;
|
|
case VehicleLookupType.LicensePlateNumber:
|
|
await vehicleLookupLicensePage.validateURL(vehicleLookupLicensePage.url);
|
|
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.validateURL(vinLookupPage.url);
|
|
await vinLookupPage.enterVin(vehicleDetails!.vin!, isVehicleLookupValidations);
|
|
await vinLookupPage.nextPage();
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
if (isMoldingQuestion) {
|
|
await test.step('Molding Questions Page >> Select Yes', async () => {
|
|
await moldingQuestionsPage.validateURL(moldingQuestionsPage.url);
|
|
if (!moldingQuestionsPage) {
|
|
console.error("moldingQuestionsPage is not initialized");
|
|
}
|
|
await moldingQuestionsPage.answerYes();
|
|
await moldingQuestionsPage.nextPage();
|
|
});
|
|
}
|
|
if (capabilityQuestions && capabilityQuestions.length > 0) {
|
|
await capabilityQuestionsPage.validateURL(capabilityQuestionsPage.url);
|
|
await capabilityQuestionsPage.validatePartQuestions(capabilityQuestions);
|
|
await capabilityQuestionsPage.selectPartQuestionResponses(capabilityQuestions);
|
|
await capabilityQuestionsPage.nextPage();
|
|
}
|
|
|
|
if (partQuestions && partQuestions.length > 0) {
|
|
await partQuestionsPage.validateURL(partQuestionsPage.url);
|
|
await partQuestionsPage.validatePartQuestions(partQuestions);
|
|
await partQuestionsPage.selectPartQuestionResponses(partQuestions);
|
|
await partQuestionsPage.nextPage();
|
|
}
|
|
|
|
if (vehiclePartQuestions && vehiclePartQuestions.length > 0) {
|
|
await vehiclePartQuestionsPage.validateURL(vehiclePartQuestionsPage.url);
|
|
await vehiclePartQuestionsPage.validatePartQuestions(vehiclePartQuestions);
|
|
await vehiclePartQuestionsPage.selectPartQuestionResponses(vehiclePartQuestions);
|
|
await vehiclePartQuestionsPage.nextPage();
|
|
}
|
|
|
|
await test.step('CoverageStatementPage >> Next page', async () => {
|
|
await coverageStatementPage.validateURL(coverageStatementPage.url);
|
|
// Confirm no coverage
|
|
if (isPolicyFound && (isItac || isNoComp)) {
|
|
await coverageStatementPage.continueToScheduleButton.click();
|
|
}
|
|
|
|
await coverageStatementPage.nextPage();
|
|
});
|
|
|
|
if (hasStateLawPopup) {
|
|
await test.step('ProviderPreferencePage >> Dismiss state law popup', async () => {
|
|
await providerPreferencePage.validateURL(providerPreferencePage.url);
|
|
await providerPreferencePage.validateStateLawModalIsVisible();
|
|
await providerPreferencePage.gotItButton.click();
|
|
});
|
|
}
|
|
|
|
if (!isPolicyFound || !(isItac || isNoComp)) {
|
|
await test.step('ProviderPreferencePage >> Select Provider ' + isSafelite ? "Safelite" : "Other shops(Non-Safelite)", async () => {
|
|
await providerPreferencePage.validateURL(providerPreferencePage.url);
|
|
await providerPreferencePage.selectProvider(isSafelite);
|
|
});
|
|
}
|
|
|
|
// validations for Recal warning mesage
|
|
if (isRecalWarning) {
|
|
await serviceLocationPage.validateURL(serviceLocationPage.url);
|
|
await serviceLocationPage.validateRecalWarning();
|
|
}
|
|
|
|
// if isRecalNotifidation flag true additional step to acknowledge Recal notification.
|
|
if (isRecalNotification) {
|
|
await providerPreferencePage.validateURL(providerPreferencePage.url);
|
|
await providerPreferencePage.acknowledgeRecalNotificaiton();
|
|
}
|
|
// If No-Comp or ITAC, ProviderPreferencePage does not appear
|
|
if (!isPolicyFound || !(isItac || isNoComp)) {
|
|
|
|
|
|
if (!isSafelite) {
|
|
if (testCase.testData!.clientTag == '05CC1609-3631-4044-B45A-E78E13343B9A') { // Avoiding TPA flow for Federated Insureance due to Defect# SSR-1984 //Temporary fix until Defect# SSR-1984 is addressed.
|
|
await test.step('***** Performing Safelite flow for Federal Insurance due to defec# SSR-1984 *****', async () => { });
|
|
await test.step('TpaSearchPage >> TPA Search', async () => {
|
|
await tpaSearchPage.validateURL(tpaSearchPage.url);
|
|
await tpaSearchPage.selectFirstLocation();
|
|
// await tpaSearchPage.nextPage();
|
|
});
|
|
return;
|
|
}
|
|
if (isTpaNotEnabledBailout) {
|
|
await test.step('validateBailoutDetails >> Bailout code : ' + BailoutCode.TPANotEnabled, async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.TPANotEnabled);
|
|
return;
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (isDoNotSeeMyShopBailout) {
|
|
await test.step('TpaSearchPage >> Select "Do Not See My Shop"', async () => {
|
|
await tpaSearchPage.validateURL(tpaSearchPage.url);
|
|
await tpaSearchPage.selectDoNotSeeMyShop();
|
|
});
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.DoNotSeeMyShop);
|
|
return;
|
|
}
|
|
|
|
await test.step('TpaSearchPage >> TPA Search', async () => {
|
|
await tpaSearchPage.validateURL(tpaSearchPage.url);
|
|
await tpaSearchPage.selectFirstLocation();
|
|
await tpaSearchPage.nextPage();
|
|
});
|
|
|
|
await test.step('TpaSubmitPage >> TPA Submit', async () => {
|
|
// TODO: Validations
|
|
await tpaSubmitPage.validateURL(tpaSubmitPage.url);
|
|
await tpaSubmitPage.nextPage();
|
|
});
|
|
|
|
await test.step('TpaConfirmationPage >> TPA Confirmation', async () => {
|
|
await tpaConfirmationPage.validateURL(tpaConfirmationPage.url);
|
|
await tpaConfirmationPage.validateSuccessMessage();
|
|
return;
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
|
|
await test.step('ServiceLocationPage >> Select service location', async () => {
|
|
await serviceLocationPage.validateURL(serviceLocationPage.url);
|
|
await serviceLocationPage.selectLocation(appointmentDetails!);
|
|
if (hasMilitaryWarning) {
|
|
await expect.soft(serviceLocationPage.militaryWarningMessage).toBeVisible();
|
|
}
|
|
await serviceLocationPage.nextPage();
|
|
});
|
|
|
|
await test.step('SchedulePage >> Select day and time', async () => {
|
|
await schedulePage.validateURL(schedulePage.url);
|
|
customerDetails!.apptDate = await schedulePage.scheduleFirstAppointment(appointmentDetails!.serviceLocation);
|
|
});
|
|
|
|
await test.step('ContactDetailsPage >> Validate contact details', async () => {
|
|
const expectedContactDetails: Partial<ICustomerDetails> = {
|
|
firstName: customerDetails!.firstName,
|
|
lastName: customerDetails!.lastName,
|
|
email: customerDetails!.email,
|
|
phoneNumber: customerDetails!.phoneNumber
|
|
};
|
|
await contactDetailsPage.validateURL(contactDetailsPage.url);
|
|
const actualContactDetails = await contactDetailsPage.getContactDetails();
|
|
expect.soft(actualContactDetails).toEqual(expectedContactDetails);
|
|
|
|
await contactDetailsPage.fillNotes(customerDetails!.notes);
|
|
|
|
if (isPriceServiceErrorBailout) {
|
|
forceAPIError(page, '/price/api/v1/price/combined-quote');
|
|
}
|
|
|
|
await contactDetailsPage.nextPage();
|
|
});
|
|
|
|
if (isPriceServiceErrorBailout) {
|
|
await test.step('BailoutPage >> Price Service Error Bailout', async () => {
|
|
await bailoutPage.validateURL(bailoutPage.url);
|
|
await bailoutPage.validateBailoutDetails(customerDetails!, BailoutCode.PricingResponseError);
|
|
});
|
|
return;
|
|
}
|
|
|
|
await test.step('ServicePackagesPage >> Choose service package', async () => {
|
|
await servicePackagesPage.validateURL(servicePackagesPage.url);
|
|
customerDetails!.packagePrice = await servicePackagesPage.selectServicePackage(servicePackage!);
|
|
await servicePackagesPage.nextPage();
|
|
});
|
|
|
|
if (isPolicyFound && (isUseVehicleOnPolicy ?? true) && claimDetails!.policyDeductible > 0) {
|
|
await test.step('PaymentMethodPage >> Execute Payment', async () => {
|
|
await paymentMethodPage.validateURL(paymentMethodPage.url);
|
|
await paymentMethodPage.executePayment(paymentDetails!);
|
|
await paymentMethodPage.nextPage();
|
|
});
|
|
} else {
|
|
await test.step('PaymentMethodPage >> Skip to Order Confirmation', async () => {
|
|
await paymentMethodPage.validateURL(paymentMethodPage.url);
|
|
await paymentMethodPage.nextPage();
|
|
});
|
|
}
|
|
|
|
await test.step('OrderConfirmationPage >> Validate order', async () => {
|
|
await orderConfirmationPage.validateURL(orderConfirmationPage.url);
|
|
await orderConfirmationPage.validateOrderConfirmationPage(testCase.testData);
|
|
});
|
|
}
|