Updating 836 with 631
Adds a new environment variable to skip content site checks, improving test environment flexibility. Improves the "nextPage" function in BasePage to handle loader elements and button states more reliably. Adds support for selecting loss location in CCPolicyInfoPage to reflect claim details accurately. Updates assertion methods to use Soft assertions for smoother test execution. Adds a new test case "InsuranceMeemicNearSchoolVerified" to expand test coverage.
This commit is contained in:
parent
565d9f473e
commit
92c223487a
7 changed files with 120 additions and 30 deletions
|
|
@ -80,6 +80,7 @@ stages:
|
|||
container_id=$(docker create \
|
||||
--ipc=host \
|
||||
-e "CCIS_API_AUTH=$(CCIS_API_AUTH)" \
|
||||
-e "SKIP_CONTENT_SITE=$(SKIP_CONTENT_SITE)" \
|
||||
-e "BASE_URL=$(BASE_URL)" \
|
||||
-e "CCIS_API_URL=$(CCIS_API_URL)" \
|
||||
-e "ADMIN_SERVICE_API_URL=$(ADMIN_SERVICE_API_URL)" \
|
||||
|
|
|
|||
|
|
@ -29,16 +29,19 @@ export class BasePage {
|
|||
}
|
||||
|
||||
async nextPage() {
|
||||
const startingUrl = this.page.url();
|
||||
await expect(async () => {
|
||||
const currentUrl = this.page.url();
|
||||
if (currentUrl === startingUrl) {
|
||||
await this.continueButton.click({ timeout: 1000 });
|
||||
}
|
||||
expect(currentUrl).not.toEqual(startingUrl);
|
||||
}).toPass({ timeout: 240_000 });
|
||||
await waitUntil(async () => {;
|
||||
return (await this.continueButton.getAttribute('aria-disabled')) !== 'true'
|
||||
});
|
||||
|
||||
await this.continueButton.click();
|
||||
|
||||
await waitUntil(async () => {
|
||||
let loaderElements = await this.page.locator('button .loader, .buy-loader, timeout, .modal-loader').all();
|
||||
return !(await Promise.any(loaderElements.map(el => el.isVisible())).catch(() => false));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async previousPage() {
|
||||
const startingUrl = this.page.url();
|
||||
await expect(async () => {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ export class CCPolicyInfoPage extends InsuranceBasePage {
|
|||
readonly hasAdditionalDamage: Locator;
|
||||
readonly isRentalVehicle: Locator;
|
||||
readonly isOtherPartyResponsibleForCoverage: Locator;
|
||||
readonly lossLocation: Locator;
|
||||
|
||||
url = `${process.env['BASE_URL']!}/FixMyGlass/CCPolicyInfo.aspx*`;
|
||||
|
||||
|
|
@ -32,6 +33,7 @@ export class CCPolicyInfoPage extends InsuranceBasePage {
|
|||
this.hasAdditionalDamage = page.locator('#HasAdditionalDamage');
|
||||
this.isRentalVehicle = page.locator('#IsRentalVehicle');
|
||||
this.isOtherPartyResponsibleForCoverage = page.locator('#IsOtherPartyResponsibleForCoverage');
|
||||
this.lossLocation = page.locator('#LossLocationType');
|
||||
}
|
||||
|
||||
async hasCityInfo(): Promise<boolean> {
|
||||
|
|
@ -67,6 +69,9 @@ export class CCPolicyInfoPage extends InsuranceBasePage {
|
|||
const stateAbbreviation = this.getStateAbbreviation(customerDetails.address.state);
|
||||
await this.state.selectOption({ value: stateAbbreviation });
|
||||
}
|
||||
if (claimDetails.lossLocation) {
|
||||
await this.lossLocation.selectOption(claimDetails.lossLocation);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error populating policy info page:', error);
|
||||
throw error;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export class OrderConfirmationPage extends BasePage {
|
|||
isPolicyFound, claimDetails, paymentDetails, isUseVehicleOnPolicy, paymentMethod, isPolicyUnverified } = testData;
|
||||
await this.serviceText.waitFor({ state: "visible" });
|
||||
|
||||
expect.soft((await this.getActualAppointmentSummary()).map(item => item.toLowerCase())).toEqual((await this.getExpectedAppointmentSummary(testData)).map(item => item.toLowerCase()));
|
||||
Soft.expect((await this.getActualAppointmentSummary()).map(item => item.toLowerCase())).toEqual((await this.getExpectedAppointmentSummary(testData)).map(item => item.toLowerCase()));
|
||||
|
||||
// Grab text
|
||||
const emailTextValue = await this.emailText.textContent();
|
||||
|
|
@ -63,15 +63,15 @@ export class OrderConfirmationPage extends BasePage {
|
|||
const servicePackageAmt = Number.parseFloat(servicePackageValue!.split('$')[1].replaceAll(',', ''));
|
||||
|
||||
// General Validations
|
||||
expect.soft(emailTextValue?.toLowerCase()).toContain(customerDetails!.email);
|
||||
Soft.expect(emailTextValue?.toLowerCase()).toContain(customerDetails!.email);
|
||||
|
||||
// Service package validations
|
||||
await expect.soft(this.cartServicePackageText).toContainText(`${servicePackage}`)
|
||||
await Soft.expect(servicePackageValue).toContain(`${servicePackage}`)
|
||||
if (servicePackage === ServicePackage.Premium || servicePackage === ServicePackage.Standard) {
|
||||
expect.soft(servicePackageValue).toContain('New wiper blades');
|
||||
Soft.expect(servicePackageValue).toContain('New wiper blades');
|
||||
}
|
||||
if (servicePackage === ServicePackage.Premium) {
|
||||
expect.soft(servicePackageValue).toContain('Rain Repel Treatment');
|
||||
Soft.expect(servicePackageValue).toContain('Rain Repel Treatment');
|
||||
}
|
||||
|
||||
// Promo Code Validation
|
||||
|
|
@ -90,21 +90,21 @@ export class OrderConfirmationPage extends BasePage {
|
|||
|
||||
|
||||
|
||||
expect.soft(subtotalAmt).toBeGreaterThan(0);
|
||||
// expect.soft(deductibleAmt).toEqual(0);
|
||||
Soft.expect(subtotalAmt).toBeGreaterThan(0);
|
||||
// Soft.expect(deductibleAmt).toEqual(0);
|
||||
|
||||
if ((paymentDetails!.paymentType === PaymentType.PayAtService || isCashInsuranceFlow) && (servicePackageAmt > 0)) {
|
||||
// Verify amount due > 0
|
||||
expect.soft(amountDueAmt).toBeGreaterThan(0);
|
||||
expect.soft(finalAmountDueAmt).toBeGreaterThan(0);
|
||||
Soft.expect(amountDueAmt).toBeGreaterThan(0);
|
||||
Soft.expect(finalAmountDueAmt).toBeGreaterThan(0);
|
||||
|
||||
if (isPolicyUnverified && PaymentType.PayWithInsurance){
|
||||
expect.soft(finalAmountDueAmt).toContain('Verifying coverage')
|
||||
Soft.expect(finalAmountDueAmt).toContain('Verifying coverage')
|
||||
}
|
||||
} else {
|
||||
// Verify amount due 0
|
||||
expect.soft(amountDueAmt).toEqual(0);
|
||||
expect.soft(finalAmountDueAmt).toEqual(0);
|
||||
Soft.expect(amountDueAmt).toEqual(0);
|
||||
Soft.expect(finalAmountDueAmt).toEqual(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,7 +92,13 @@ export class PaymentMethodPage extends BasePage {
|
|||
|
||||
// Wait for review table to be visible to ensure page is loaded
|
||||
await this.appointmentDetailsDropdown.waitFor({state: "visible"});
|
||||
await this.appointmentDetailsDropdown.click();
|
||||
await this.appointmentDetailsDropdown.click().then(
|
||||
async () => {
|
||||
await waitUntil(async () => {
|
||||
return (await this.page.locator('.review-toggle.expanded').evaluate(el => window.getComputedStyle(el, ':after').transform)) === 'matrix(-1, 0, 0, -1, 0, 0)';
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
let expectedAppointmentDetails = new Map<string, string[]>();
|
||||
expectedAppointmentDetails = await this.getExpectedVehicleDetails(testData, expectedAppointmentDetails);
|
||||
|
|
@ -105,7 +111,7 @@ export class PaymentMethodPage extends BasePage {
|
|||
let actualAppointmentDetails = await this.getActualAppointmentDetails();
|
||||
|
||||
for (const key in expectedAppointmentDetails) {
|
||||
expect.soft(actualAppointmentDetails[key]?.map(item => item.toLowerCase()))
|
||||
Soft.expect(actualAppointmentDetails[key]?.map(item => item.toLowerCase()))
|
||||
.toEqual(expectedAppointmentDetails[key].map(item => item.toLowerCase()));
|
||||
}
|
||||
|
||||
|
|
@ -126,11 +132,11 @@ export class PaymentMethodPage extends BasePage {
|
|||
const finalAmountDueAmount = this.extractAmount(finalAmountDueValue);
|
||||
|
||||
// Subtotal should be greater than 0
|
||||
expect.soft(subtotalAmount).toBeGreaterThan(0);
|
||||
Soft.expect(subtotalAmount).toBeGreaterThan(0);
|
||||
|
||||
// Final amount differs based on payment type
|
||||
if (paymentDetails?.paymentType === PaymentType.PayAtService) {
|
||||
expect.soft(finalAmountDueAmount).toBeGreaterThan(0);
|
||||
Soft.expect(finalAmountDueAmount).toBeGreaterThan(0);
|
||||
} else if (paymentDetails?.paymentType === PaymentType.Credit ||
|
||||
paymentDetails?.paymentType === PaymentType.Paypal ||
|
||||
paymentDetails?.paymentType === PaymentType.AfterPay) {
|
||||
|
|
@ -144,12 +150,12 @@ export class PaymentMethodPage extends BasePage {
|
|||
|
||||
// Service package validations
|
||||
const servicePackageValue = await this.cartPanelDetails.textContent();
|
||||
await expect.soft(this.cartPanelDetails).toContainText(`${servicePackage}`)
|
||||
await Soft.expect(servicePackageValue).toContain(`${servicePackage}`)
|
||||
if (servicePackage === ServicePackage.Premium || servicePackage === ServicePackage.Standard) {
|
||||
expect.soft(servicePackageValue).toContain('New wiper blades');
|
||||
Soft.expect(servicePackageValue).toContain('New wiper blades');
|
||||
}
|
||||
if (servicePackage === ServicePackage.Premium) {
|
||||
expect.soft(servicePackageValue).toContain('Rain Repel Treatment');
|
||||
Soft.expect(servicePackageValue).toContain('Rain Repel Treatment');
|
||||
}
|
||||
|
||||
// Promo Code Validation
|
||||
|
|
@ -160,7 +166,7 @@ export class PaymentMethodPage extends BasePage {
|
|||
// Early Bird line item validation
|
||||
if (appointmentDetails?.appointmentTimeSlot == AppointmentTimeslot.EarlyBird) {
|
||||
|
||||
expect.soft(servicePackageValue).toContain('Early bird');
|
||||
Soft.expect(servicePackageValue).toContain('Early bird');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import cashReplaceSwitchToInsuranceProgressiveNoCompTests from "./CashReplaceSwi
|
|||
import insuranceBigTruckVerifiedTests from "./InsuranceBigTruckVerified";
|
||||
import insuranceUnverifiedTests from "./InsuranceUnverified";
|
||||
import CashReplaceSplitWindshieldTests from "./CashReplaceSplitWindshield";
|
||||
import insuranceMeemicNearSchoolVerifiedTests from "./InsuranceMeemicNearSchoolVerified";
|
||||
|
||||
const test = getTestObject();
|
||||
|
||||
|
|
@ -84,6 +85,7 @@ const allStandardTests = [
|
|||
{name: "InsuranceUnverified", tests: insuranceUnverifiedTests},
|
||||
// {name: "InsuranceGeico", tests: insuranceGeicoTests},
|
||||
// {name: "InsuranceITACOptimizedPriceValidationAllState", tests: insuranceITACOptimizedPriceValidationAllStateTests}
|
||||
{name: "InsuranceMeemicNearSchoolVerified", tests: insuranceMeemicNearSchoolVerifiedTests},
|
||||
|
||||
];
|
||||
|
||||
|
|
|
|||
73
playwright-tests/tests/InsuranceMeemicNearSchoolVerified.ts
Normal file
73
playwright-tests/tests/InsuranceMeemicNearSchoolVerified.ts
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
//Imports here
|
||||
import { ITestData } from 'framework/TestData'
|
||||
import { ServiceLocation, DamageType, Flow, PartQuestionType } from 'safelite-playwright-core';
|
||||
import { PaymentMethod } from "framework/localTypes/Enums";
|
||||
import { ITestCase } from '../framework/Typedefs'
|
||||
import { VehicleLookupType } from 'safelite-playwright-core';
|
||||
import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core';
|
||||
|
||||
// Seed for consistent test data generation
|
||||
setFakerSeedFromTestName("InsuranceMeemicNearSchoolVerified");
|
||||
|
||||
// Now get the test data with the seeded faker
|
||||
const insuranceMeemicNearSchoolVerifiedData: Partial<ITestData> = {
|
||||
...getDefaultTestData(),
|
||||
|
||||
paymentMethod: PaymentMethod.Insurance,
|
||||
|
||||
isDuplicateClaim: false,
|
||||
isPolicyFound: true,
|
||||
isUseVehicleOnPolicy: true,
|
||||
isRecalVehicle: false,
|
||||
|
||||
customerDetails: {
|
||||
...getDefaultTestData().customerDetails!,
|
||||
address: {
|
||||
...getDefaultTestData().customerDetails!.address,
|
||||
postalCode: '48382'
|
||||
}
|
||||
},
|
||||
|
||||
claimDetails: {
|
||||
client: 'Meemic',
|
||||
policyNumber: 'Mock427352LD',
|
||||
policyDeductible: 0,
|
||||
damageDate: new Date().toLocaleDateString('en-US', {month: '2-digit', day: '2-digit', year: 'numeric'}),
|
||||
damageCause: DamageType.Rock,
|
||||
lossLocation: LossLocation.School
|
||||
},
|
||||
|
||||
vehicleDetails: {
|
||||
...getDefaultTestData().vehicleDetails!,
|
||||
year: '2015',
|
||||
make: 'Jeep',
|
||||
model: 'Wrangler',
|
||||
style: '4 door utility',
|
||||
vehicleLookupType: VehicleLookupType.Zip,
|
||||
},
|
||||
|
||||
appointmentDetails: {
|
||||
serviceLocation: ServiceLocation.InShop,
|
||||
appointmentDate: getDefaultTestData().appointmentDetails?.appointmentDate,
|
||||
shopAddress: "3451 Washtenaw Ave, Ann Arbor, MI 48104"
|
||||
},
|
||||
|
||||
partQuestions: [
|
||||
{
|
||||
partQuestionType: PartQuestionType.GeneralQuestion1,
|
||||
isOnPage: true,
|
||||
optionToSelect: 'No'
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
const insuranceMeemicNearSchoolVerifiedTests: ITestCase[] = [];
|
||||
|
||||
const tc = {
|
||||
name: `InsuranceMeemicNearSchoolVerified`,
|
||||
tags: ['@E2E', '@InsuranceMeemicNearSchool', '@test_report', '@Insurance'],
|
||||
testData: insuranceMeemicNearSchoolVerifiedData
|
||||
};
|
||||
insuranceMeemicNearSchoolVerifiedTests.push(tc);
|
||||
|
||||
export default insuranceMeemicNearSchoolVerifiedTests;
|
||||
Loading…
Reference in a new issue