DigitalConsumer.FixMyGlass/playwright-tests/tests/alert-validation/alert0006_InvalidZip.ts
maguire-arman 404dda6556 Adds Playwright test framework for FMG
Initial commit of the Playwright test framework, including:
- Configuration files for Playwright, Docker, and Sauce Labs
- Test case structure and page object models
- CI/CD pipeline configuration
- Utilities and business logic implementations

This framework will be used for end-to-end testing of the FMG application.
2025-04-07 15:40:31 -04:00

134 lines
No EOL
3.7 KiB
TypeScript

// Imports here
import { ITestData } from "@business-logic/types/ITestData";
import { VehicleDamage, AppointmentType, VehicleLookupType } from "@business-logic/types/Enums";
import TestCase from "@business-logic/types/TestCase";
import { getNextWeekday } from "@impl/utils/DateUtils";
import { faker } from "@faker-js/faker";
import { defaultTestData } from "@business-logic/constants/DefaultTestData";
// Invalid zip (alert) - Combined test cases for all lookup types
const nextWeekday = getNextWeekday();
const baseInvalidZipData: Partial<ITestData> = {
...defaultTestData, // Start with all defaults
// Override specific fields with test-specific data
customerDetails: {
...defaultTestData.customerDetails!,
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
address: {
street: faker.location.streetAddress(),
city: 'Saco',
state: 'Montana',
postalCode: '99999',
country: 'United States'
}
},
vehicleDamage: [
VehicleDamage.WindshieldCrack
],
appointmentDetails: {
serviceLocation: AppointmentType.DropOff,
appointmentDate: nextWeekday
},
alertFlags: {
isInvalidZip: true
}
};
interface LookupTestCase {
type: VehicleLookupType;
vehicleDetails: {
year: string;
make: string;
model: string;
style: string;
licensePlateNumber?: string;
licensePlateState?: string;
vin?: string;
};
enterFunnelWithZip?: boolean;
customerDetails?: {
address: {
street: string;
city: string;
state: string;
postalCode: string;
country: string;
};
};
tag: string;
displayName: string;
}
const lookupTypesToTest: LookupTestCase[] = [
{
type: VehicleLookupType.Zip,
displayName: 'Zip',
tag: 'Zip',
vehicleDetails: {
year: '2020',
make: 'Acura',
model: 'ILX',
style: '4 door sedan'
}
},
{
type: VehicleLookupType.LicensePlateNumber,
displayName: 'License Plate',
tag: 'Plate',
vehicleDetails: {
year: '2013',
make: 'Hyundai',
model: 'Sonata',
style: '4 door sedan',
licensePlateNumber: 'FTY 7776',
licensePlateState: 'Texas'
}
},
{
type: VehicleLookupType.Vin,
displayName: 'VIN',
tag: 'Vin',
vehicleDetails: {
year: '2019',
make: 'Toyota',
model: 'C-HR',
style: '4 door hatchback',
vin: 'NMTKHMBX5KR086519'
}
}
];
const invalidZipTests: TestCase[] = [];
// Generate test cases for each lookup type
lookupTypesToTest.forEach((lookupType) => {
const testData = {
...baseInvalidZipData,
vehicleDetails: {
...lookupType.vehicleDetails,
vehicleLookupType: lookupType.type
},
enterFunnelWithZip: lookupType.enterFunnelWithZip
};
// Handle special case for Address lookup which has different customer details
if (lookupType.type === VehicleLookupType.Address && lookupType.customerDetails) {
testData.customerDetails = {
...baseInvalidZipData.customerDetails!,
address: lookupType.customerDetails.address
};
}
const tc = new TestCase({
name: `alert0006 ${lookupType.displayName} Lookup Invalid zip`,
tags: ['@Alert', `@InvalidZip_${lookupType.tag}`, '@test_report'],
testData: testData
}, undefined, `InvalidZip_${lookupType.tag}`);
invalidZipTests.push(tc);
});
export default invalidZipTests;