Merge pull request #2867 from Safelite/feature/CASH-1123
Feature/cash 1123
This commit is contained in:
commit
1f668526b0
5 changed files with 81 additions and 86 deletions
|
|
@ -4,4 +4,5 @@ import { PaymentMethod } from './localTypes/Enums'
|
||||||
export interface ITestData extends base {
|
export interface ITestData extends base {
|
||||||
// Put any project-specific data here. Anything useful to other Safelite projects should be submitted as a pull request to safelite-playwright-core.
|
// Put any project-specific data here. Anything useful to other Safelite projects should be submitted as a pull request to safelite-playwright-core.
|
||||||
paymentMethod: PaymentMethod
|
paymentMethod: PaymentMethod
|
||||||
|
isOptedInForTextMessages: boolean
|
||||||
}
|
}
|
||||||
|
|
@ -14,7 +14,7 @@ export class ContactDetailsPage extends BasePage {
|
||||||
readonly lastNameTextBox: Locator;
|
readonly lastNameTextBox: Locator;
|
||||||
readonly emailAddressTextBox: Locator;
|
readonly emailAddressTextBox: Locator;
|
||||||
readonly phoneNumberTextBox: Locator;
|
readonly phoneNumberTextBox: Locator;
|
||||||
readonly notesTextBox: Locator;
|
readonly textOptInBox: Locator;
|
||||||
|
|
||||||
constructor(page: Page) {
|
constructor(page: Page) {
|
||||||
super(page);
|
super(page);
|
||||||
|
|
@ -25,7 +25,7 @@ export class ContactDetailsPage extends BasePage {
|
||||||
this.lastNameTextBox = this.page.getByRole('textbox', { name: 'Last name' });
|
this.lastNameTextBox = this.page.getByRole('textbox', { name: 'Last name' });
|
||||||
this.emailAddressTextBox = this.page.getByRole('textbox', { name: 'Email address' });
|
this.emailAddressTextBox = this.page.getByRole('textbox', { name: 'Email address' });
|
||||||
this.phoneNumberTextBox = this.page.getByRole('textbox', { name: 'Phone number' });
|
this.phoneNumberTextBox = this.page.getByRole('textbox', { name: 'Phone number' });
|
||||||
this.notesTextBox = this.page.getByRole('textbox', { name: 'Notes' });
|
this.textOptInBox = this.page.getByRole('checkbox', { name: 'Text me updates about my appointment*' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -36,10 +36,8 @@ export class ContactDetailsPage extends BasePage {
|
||||||
await this.phoneNumberTextBox.fill(customerDetails.phoneNumber);
|
await this.phoneNumberTextBox.fill(customerDetails.phoneNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fillNotes(notes?: string) {
|
async checkTextMeUpdates(customerDetails: ICustomerDetails) {
|
||||||
if (notes) {
|
await this.textOptInBox.check();
|
||||||
await this.notesTextBox.fill(notes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@step("ContactDetailsPage >> Enter contact details: ")
|
@step("ContactDetailsPage >> Enter contact details: ")
|
||||||
|
|
@ -48,6 +46,11 @@ export class ContactDetailsPage extends BasePage {
|
||||||
|
|
||||||
await this.validateProgressBar(ProgressBarPercentages.ContactDetailsPage);
|
await this.validateProgressBar(ProgressBarPercentages.ContactDetailsPage);
|
||||||
await this.enterContactDetails(customerDetails!);
|
await this.enterContactDetails(customerDetails!);
|
||||||
|
|
||||||
|
if (testData.isOptedInForTextMessages) {
|
||||||
|
await this.checkTextMeUpdates(customerDetails!);
|
||||||
|
}
|
||||||
|
|
||||||
await this.nextPage();
|
await this.nextPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { expect, type Locator, type Page } from '@playwright/test';
|
import { expect, type Locator, type Page } from '@playwright/test';
|
||||||
import { BasePage } from './BasePage';
|
import { BasePage } from './BasePage';
|
||||||
import { IPaymentDetails, Soft, waitUntil } from 'safelite-playwright-core';
|
import { IPaymentDetails, Soft, waitUntil } from 'safelite-playwright-core';
|
||||||
import { AppointmentTimeslot, ServiceLocation, PaymentType, ServicePackage, VehicleDamage } from 'safelite-playwright-core';
|
import { AppointmentTimeslot, ServiceLocation, PaymentType, ServicePackage, VehicleDamage, } from 'safelite-playwright-core';
|
||||||
import { PaymentMethod, ProgressBarPercentages } from 'framework/localTypes/Enums';
|
import { PaymentMethod, ProgressBarPercentages } from 'framework/localTypes/Enums';
|
||||||
import { PaymentPage } from './PaymentPage';
|
import { PaymentPage } from './PaymentPage';
|
||||||
import { AfterpayPage } from './AfterpayPage';
|
import { AfterpayPage } from './AfterpayPage';
|
||||||
|
|
@ -29,11 +29,9 @@ export class PaymentMethodPage extends BasePage {
|
||||||
|
|
||||||
// Payment detail page validation locators
|
// Payment detail page validation locators
|
||||||
readonly reviewTable: Locator;
|
readonly reviewTable: Locator;
|
||||||
readonly vehicleSection: Locator;
|
|
||||||
readonly damageSection: Locator;
|
|
||||||
readonly serviceDetailsSection: Locator;
|
readonly serviceDetailsSection: Locator;
|
||||||
readonly serviceLocationSection: Locator;
|
readonly serviceLocationDateandTimeSection: Locator;
|
||||||
readonly appointmentDateSection: Locator;
|
readonly vehicleDamageLocationsSection: Locator;
|
||||||
readonly contactDetailsSection: Locator;
|
readonly contactDetailsSection: Locator;
|
||||||
readonly cartPanelDetails: Locator;
|
readonly cartPanelDetails: Locator;
|
||||||
readonly subtotalText: Locator;
|
readonly subtotalText: Locator;
|
||||||
|
|
@ -65,11 +63,8 @@ export class PaymentMethodPage extends BasePage {
|
||||||
this.reviewTable = this.page.locator('div.review-table');
|
this.reviewTable = this.page.locator('div.review-table');
|
||||||
|
|
||||||
// Section locators - find by heading text
|
// Section locators - find by heading text
|
||||||
this.vehicleSection = this.page.locator('.review-table').locator('div', { hasText: 'Vehicle' }).first();
|
this.serviceLocationDateandTimeSection = this.page.locator('.review-table').locator('div .service-location');
|
||||||
this.damageSection = this.page.locator('.review-table').locator('div', { hasText: 'Damage' }).first();
|
this.vehicleDamageLocationsSection= this.page.locator('.review-table').locator('div.py-3[damagelocationswidgetname="DamageLocationsWidget"]');
|
||||||
this.serviceDetailsSection = this.page.locator('.review-table').locator('div', { hasText: 'Glass service only' }).first();
|
|
||||||
this.serviceLocationSection = this.page.locator('.review-table').locator('div', { hasText: "We're coming to you" }).first();
|
|
||||||
this.appointmentDateSection = this.page.locator('.review-table').locator('div', { hasText: 'Appointment date + time' }).first();
|
|
||||||
this.contactDetailsSection = this.page.locator('.review-table').locator('div', { hasText: 'Contact details' }).first();
|
this.contactDetailsSection = this.page.locator('.review-table').locator('div', { hasText: 'Contact details' }).first();
|
||||||
|
|
||||||
// Cart panel elements
|
// Cart panel elements
|
||||||
|
|
@ -99,15 +94,12 @@ export class PaymentMethodPage extends BasePage {
|
||||||
);
|
);
|
||||||
|
|
||||||
let expectedAppointmentDetails = new Map<string, string[]>();
|
let expectedAppointmentDetails = new Map<string, string[]>();
|
||||||
expectedAppointmentDetails = await this.getExpectedVehicleDetails(testData, expectedAppointmentDetails);
|
expectedAppointmentDetails = await this.getExpectedServiceLocationDateAndTimeSection(testData, expectedAppointmentDetails);
|
||||||
expectedAppointmentDetails = await this.getExpectedVehicleDamage(testData, expectedAppointmentDetails);
|
expectedAppointmentDetails = await this.getExpectedVehicleDamageAndVehicle(testData, expectedAppointmentDetails);
|
||||||
// expectedAppointmentDetails = await this.expectedServicePackageDetails(testData, expectedAppointmentDetails);
|
expectedAppointmentDetails = await this.getExpectedContactDetails(testData, expectedAppointmentDetails);
|
||||||
expectedAppointmentDetails = await this.getExpectedServiceLocation(testData, expectedAppointmentDetails);
|
expectedAppointmentDetails = await this.getExpectedTextServiceUpdatesOptInOrOut(testData, expectedAppointmentDetails);
|
||||||
expectedAppointmentDetails = await this.getExpectedAppointmentDate(testData, expectedAppointmentDetails);
|
|
||||||
expectedAppointmentDetails = await this.getExpectedCustomerDetails(testData, expectedAppointmentDetails);
|
|
||||||
|
|
||||||
let actualAppointmentDetails = await this.getActualAppointmentDetails();
|
let actualAppointmentDetails = await this.getActualAppointmentDetails();
|
||||||
|
|
||||||
for (const key in expectedAppointmentDetails) {
|
for (const key in expectedAppointmentDetails) {
|
||||||
Soft.expect(actualAppointmentDetails[key]?.map(item => item.toLowerCase()))
|
Soft.expect(actualAppointmentDetails[key]?.map(item => item.toLowerCase()))
|
||||||
.toEqual(expectedAppointmentDetails[key].map(item => item.toLowerCase()));
|
.toEqual(expectedAppointmentDetails[key].map(item => item.toLowerCase()));
|
||||||
|
|
@ -288,64 +280,66 @@ l
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getExpectedVehicleDamage(testdata: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
async getExpectedVehicleDamageAndVehicle(testdata: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
||||||
|
|
||||||
const {vehicleDamage} = testdata;
|
const {vehicleDetails, vehicleDamage} = testdata;
|
||||||
|
|
||||||
let vehicleDamageText: string[] = [];
|
let vehicleDamageText: string= '';
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldOneChip)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldOneChip || item == VehicleDamage.WindshieldTwoChips || item == VehicleDamage.WindshieldThreeChips)) {
|
||||||
vehicleDamageText.push("Windshield repair - 1 chip");
|
vehicleDamageText = "Repair the windshield of your";
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldTwoChips)) {
|
|
||||||
vehicleDamageText.push("Windshield repair - 2 chips");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldThreeChips)) {
|
|
||||||
vehicleDamageText.push("Windshield repair - 3 chips");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldCrack)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldCrack)) {
|
||||||
vehicleDamageText.push("Windshield crack");
|
vehicleDamageText = vehicleDamage?.length > 1 ? "Replace the Windshield" : "Replace the windshield";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverVentGlass)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverVentGlass) && !vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldCrack)) {
|
||||||
vehicleDamageText.includes("Side door - Driver side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nVent glass" : vehicleDamageText.push("Side door - Driver side", "Vent glass");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Driver Vent Glass" : "Replace the Driver Vent Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverFrontDoor)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverFrontDoor)) {
|
||||||
vehicleDamageText.includes("Side door - Driver side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nFront door" : vehicleDamageText.push("Side door - Driver side", "Front door");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Driver Front Glass" : "Replace the Driver Front Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverRearDoor)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverRearDoor)) {
|
||||||
vehicleDamageText.includes("Side door - Driver side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nBack door" : vehicleDamageText.push("Side door - Driver side", "Back door");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Driver Back Glass" : "Replace the Driver Back Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverVentGlass) && vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.WindshieldCrack)) {
|
||||||
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Driver Vent Glass" : "Replace the Driver Vent Glass";
|
||||||
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverQuarterPanel)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.DriverQuarterPanel)) {
|
||||||
vehicleDamageText.includes("Side door - Driver side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nQuarter panel" : vehicleDamageText.push("Side door - Driver side", "Quarter panel");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Driver Quarter Glass" : "Replace the Driver Quarter Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerVentGlass)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerVentGlass)) {
|
||||||
vehicleDamageText.includes("Side door - Passenger side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nVent glass" : vehicleDamageText.push("Side door - Passenger side", "Vent glass");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Passenger Vent Glass" : "Replace the Passenger Vent Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerFrontDoor)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerFrontDoor)) {
|
||||||
vehicleDamageText.includes("Side door - Passenger side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nFront door" : vehicleDamageText.push("Side door - Passenger side", "Front door");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Passenger Front Glass" : "Replace the Passenger Front Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerRearDoor)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerRearDoor)) {
|
||||||
vehicleDamageText.includes("Side door - Passenger side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nBack door" : vehicleDamageText.push("Side door - Passenger side", "Back door");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Passenger Back Glass" : "Replace the Passenger Back Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerQuarterPanel)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.PassengerQuarterPanel)) {
|
||||||
vehicleDamageText.includes("Side door - Passenger side") ? vehicleDamageText[vehicleDamageText.length - 1 ] += "\nQuarter panel" : vehicleDamageText.push("Side door - Passenger side", "Quarter panel");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Passenger Quarter Glass" : "Replace the Passenger Quarter Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.RearWindow || item == VehicleDamage.RearSliding)) {
|
if (vehicleDamage?.find((item: VehicleDamage) => item == VehicleDamage.RearWindow || item == VehicleDamage.RearSliding)) {
|
||||||
vehicleDamageText.push("Rear window");
|
vehicleDamageText.includes("Replace") ? vehicleDamageText += ", Back Glass" : "Replace the Back Glass";
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedServicePackageDetails["Damage"] = vehicleDamageText;
|
// Replace last comma with " and" if there are multiple damages
|
||||||
|
if (vehicleDamageText.includes(",") && vehicleDamageText !== "Replace the windshield")
|
||||||
|
{
|
||||||
|
vehicleDamageText = vehicleDamageText.replace(/,([^,]*)$/, " and$1") + " of your";
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedServicePackageDetails[vehicleDamageText] = [vehicleDetails?.year + " " + vehicleDetails?.make + " " + vehicleDetails?.model];
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -399,55 +393,39 @@ l
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getExpectedServiceLocation(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
async getExpectedServiceLocationDateAndTimeSection(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
||||||
const { appointmentDetails } = testData;
|
const { customerDetails, appointmentDetails } = testData;
|
||||||
let serviceLocationTitle = appointmentDetails?.serviceLocation == ServiceLocation.Mobile
|
let serviceLocationTitle = appointmentDetails?.serviceLocation == ServiceLocation.Mobile
|
||||||
? "We're coming to you"
|
? "We're coming to you"
|
||||||
: "You're coming to us";
|
: "You're coming to us";
|
||||||
let serviceLocation: string[] = [];
|
let serviceLocationText = appointmentDetails?.serviceLocation == ServiceLocation.Mobile
|
||||||
|
|
||||||
serviceLocation.push(
|
|
||||||
appointmentDetails?.serviceLocation == ServiceLocation.Mobile
|
|
||||||
? appointmentDetails?.serviceAddress
|
? appointmentDetails?.serviceAddress
|
||||||
? appointmentDetails.serviceAddress.street + ", " + appointmentDetails.serviceAddress.city + ", " + appointmentDetails.serviceAddress.state + " " + appointmentDetails.serviceAddress.postalCode
|
? appointmentDetails.serviceAddress.street + ", " + appointmentDetails.serviceAddress.city + ", " + appointmentDetails.serviceAddress.state + " " + appointmentDetails.serviceAddress.postalCode
|
||||||
: ""
|
: ""
|
||||||
: appointmentDetails?.shopAddress
|
: appointmentDetails?.shopAddress
|
||||||
? appointmentDetails.shopAddress
|
? appointmentDetails.shopAddress
|
||||||
: ""
|
: "";
|
||||||
);
|
serviceLocationText += " on "
|
||||||
|
serviceLocationText += customerDetails?.apptDate ? await this.getFormattedAppointmentDate(customerDetails.apptDate) + " " + customerDetails?.apptTime?.replace("-", "—") : "";
|
||||||
|
|
||||||
expectedServicePackageDetails[serviceLocationTitle] = serviceLocation;
|
expectedServicePackageDetails[serviceLocationTitle] = [serviceLocationText];
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getExpectedAppointmentDate(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
async getExpectedVehicleDamageLocations(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
||||||
const { customerDetails, appointmentDetails } = testData;
|
const { customerDetails } = testData;
|
||||||
let appointmentDateText: string[] = [];
|
let VehicleDamageLocationsText: string[] = [];
|
||||||
const isMobileAppointment = appointmentDetails?.serviceLocation == ServiceLocation.Mobile
|
if (VehicleDamage.WindshieldCrack) {
|
||||||
if (isMobileAppointment) {
|
let VehicleDamageLocationsText: string[] = [];
|
||||||
let localStorage= JSON.parse(await this.page.evaluate('localStorage.getItem(\'vuex\')'));
|
VehicleDamageLocationsText.push("Replace the windshield");
|
||||||
let jobMinMinutes = localStorage.order.schedule.jobMinMinutes as number;
|
};
|
||||||
let jobMaxMinutes = localStorage.order.schedule.jobMaxMinutes as number;
|
|
||||||
|
|
||||||
if (jobMinMinutes < 60) {
|
expectedServicePackageDetails["VehicleDamageLocationsText"] = VehicleDamageLocationsText;
|
||||||
customerDetails!.apptDuration = `${jobMinMinutes} - ${jobMaxMinutes} minutes`;
|
|
||||||
} else {
|
|
||||||
const minHours = Math.floor(jobMinMinutes / 60);
|
|
||||||
const maxHours = Math.floor(jobMaxMinutes / 60);
|
|
||||||
customerDetails!.apptDuration = `${minHours} - ${maxHours} hours`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
appointmentDateText.push(
|
|
||||||
customerDetails?.apptDate ? await this.getFormattedAppointmentDate(customerDetails.apptDate) + " " + customerDetails?.apptTime?.replace("-", "—") : "",
|
|
||||||
customerDetails?.apptDuration ? "Estimated appointment length: " + customerDetails.apptDuration : ""
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedServicePackageDetails["Appointment Date + Time"] = appointmentDateText;
|
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getExpectedCustomerDetails(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
async getExpectedContactDetails(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
||||||
const { customerDetails } = testData;
|
const { customerDetails } = testData;
|
||||||
let customerDetailsText: string[] = [];
|
let customerDetailsText: string[] = [];
|
||||||
|
|
||||||
|
|
@ -455,10 +433,21 @@ l
|
||||||
// customerDetails?.firstName.toUpperCase() + " " + customerDetails?.lastName.toUpperCase(),
|
// customerDetails?.firstName.toUpperCase() + " " + customerDetails?.lastName.toUpperCase(),
|
||||||
customerDetails?.email ? customerDetails?.email.toUpperCase() : "",
|
customerDetails?.email ? customerDetails?.email.toUpperCase() : "",
|
||||||
customerDetails?.phoneNumber ? customerDetails?.phoneNumber : "",
|
customerDetails?.phoneNumber ? customerDetails?.phoneNumber : "",
|
||||||
"Opted out of text message updates"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
expectedServicePackageDetails["Contact details"] = customerDetailsText;
|
expectedServicePackageDetails["Contact details"] = customerDetailsText
|
||||||
|
return expectedServicePackageDetails;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getExpectedTextServiceUpdatesOptInOrOut(testData: Partial<ITestData>, expectedServicePackageDetails: Map<string, string[]>): Promise<any> {
|
||||||
|
const { customerDetails } = testData;
|
||||||
|
|
||||||
|
let isOptedInForTextMessages = testData.isOptedInForTextMessages ?? false;
|
||||||
|
|
||||||
|
let expectedText = isOptedInForTextMessages ? customerDetails?.phoneNumber : "Not opted in";
|
||||||
|
|
||||||
|
|
||||||
|
expectedServicePackageDetails["We’ll text service updates to"] = [expectedText];
|
||||||
return expectedServicePackageDetails;
|
return expectedServicePackageDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ export class SchedulePage extends BasePage {
|
||||||
{
|
{
|
||||||
formattedTimeSlot = selectedTimeSlot.includes("overnight") ? "drop off by 5:30 pm on the night of your scheduled appointment. Pick-up time dependent on shop schedule" : "drop off before 9:30 AM";
|
formattedTimeSlot = selectedTimeSlot.includes("overnight") ? "drop off by 5:30 pm on the night of your scheduled appointment. Pick-up time dependent on shop schedule" : "drop off before 9:30 AM";
|
||||||
}
|
}
|
||||||
else if (selectedTimeSlot.includes("-") || selectedTimeSlot.includes("Earlybird"))
|
else if (selectedTimeSlot.includes("-") || selectedTimeSlot.includes("Earlybird")) // - means Mobile time slot where service time is between 8:00 AM - 12:00 PM
|
||||||
{
|
{
|
||||||
formattedTimeSlot = selectedTimeSlot.includes("Earlybird") ? "arriving between 8:00 AM - 12:00 PM" : `arriving between ${selectedTimeSlot}`;
|
formattedTimeSlot = selectedTimeSlot.includes("Earlybird") ? "arriving between 8:00 AM - 12:00 PM" : `arriving between ${selectedTimeSlot}`;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import { ITestCase } from '../framework/Typedefs'
|
||||||
import { VehicleLookupType } from 'safelite-playwright-core';
|
import { VehicleLookupType } from 'safelite-playwright-core';
|
||||||
import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core';
|
import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core';
|
||||||
import { PaymentMethod } from 'framework/localTypes/Enums';
|
import { PaymentMethod } from 'framework/localTypes/Enums';
|
||||||
|
|
||||||
// Set the seed before generating any data
|
// Set the seed before generating any data
|
||||||
setFakerSeedFromTestName("CashReplaceGlassPromoInshop");
|
setFakerSeedFromTestName("CashReplaceGlassPromoInshop");
|
||||||
|
|
||||||
|
|
@ -47,6 +46,9 @@ const cashReplaceGlassPromoInshopData: Partial<ITestData> = {
|
||||||
...getDefaultTestData().appointmentDetails!,
|
...getDefaultTestData().appointmentDetails!,
|
||||||
shopAddress: "6826 Sawmill Rd, Columbus, OH 43235"
|
shopAddress: "6826 Sawmill Rd, Columbus, OH 43235"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Flag for opting in for text message appt updates
|
||||||
|
isOptedInForTextMessages: true,
|
||||||
|
|
||||||
// Override payment details
|
// Override payment details
|
||||||
paymentDetails: {
|
paymentDetails: {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue