diff --git a/azure-pipelines-automated-testing.yml b/azure-pipelines-automated-testing.yml
index a44bb192d..caa1b5c8a 100644
--- a/azure-pipelines-automated-testing.yml
+++ b/azure-pipelines-automated-testing.yml
@@ -33,6 +33,7 @@ stages:
# TODO: Change to ADO Playwright template
- template: temp/playwright-test.yml
parameters:
+ applicationType: 'vue'
totalShards: ${{ variables.totalShards }}
targetUrl: $(BASE_URL)
dockerFileName: 'Dockerfile.playwright'
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index c433fdb17..0a8122121 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -51,19 +51,11 @@ stages:
displayName: Run Prettier check
- stage: TestPr
- displayName: Run Unit Tests For PullRequest
- jobs:
- - template: templates/digital/vue-jest-run-unit-tests.yml@AzureDevOps
- parameters:
- nodeContainer: node
- npmLocation: $(Build.SourcesDirectory)
- testResultsFile: junit.xml
- summaryFileLocation: $(Build.SourcesDirectory)/coverage/cobertura-coverage.xml
- - stage: TestPrPlaywright
- displayName: Run Playwright Tests For PullRequest
+ displayName: Run Tests For PullRequest
jobs:
- template: temp/playwright-test.yml
parameters:
+ applicationType: 'vue'
totalShards: 2
targetUrl: $(BASE_URL)
dockerFileName: 'Dockerfile.playwright'
@@ -75,6 +67,12 @@ stages:
secrets:
CCIS_API_AUTH: $(CCIS_API_AUTH)
JIRA_API_KEY: $(JIRA_API_KEY)
+ - template: templates/digital/vue-jest-run-unit-tests.yml@AzureDevOps
+ parameters:
+ nodeContainer: node
+ npmLocation: $(Build.SourcesDirectory)
+ testResultsFile: junit.xml
+ summaryFileLocation: $(Build.SourcesDirectory)/coverage/cobertura-coverage.xml
- ${{ else }}:
# Dev Build/Deploy
- stage: Dev
diff --git a/playwright-tests/.env b/playwright-tests/.env
index 5f37c7ddf..3429bc864 100644
--- a/playwright-tests/.env
+++ b/playwright-tests/.env
@@ -2,7 +2,7 @@
# Environment configuration
# Environment type
-NODE_ENV="qa"
+PLAYWRIGHT_ENV="qa"
# Skip content site
SKIP_CONTENT_SITE=false
diff --git a/playwright-tests/.env.dev b/playwright-tests/.env.dev
index 00c66dc6c..1dad92994 100644
--- a/playwright-tests/.env.dev
+++ b/playwright-tests/.env.dev
@@ -2,7 +2,7 @@
# Environment configuration
# Environment type
-NODE_ENV="qa"
+PLAYWRIGHT_ENV="qa"
# Skip content site
SKIP_CONTENT_SITE=false
diff --git a/playwright-tests/.env.example b/playwright-tests/.env.example
index 5f37c7ddf..3429bc864 100644
--- a/playwright-tests/.env.example
+++ b/playwright-tests/.env.example
@@ -2,7 +2,7 @@
# Environment configuration
# Environment type
-NODE_ENV="qa"
+PLAYWRIGHT_ENV="qa"
# Skip content site
SKIP_CONTENT_SITE=false
diff --git a/playwright-tests/README.md b/playwright-tests/README.md
index b9124727e..d0ca74081 100644
--- a/playwright-tests/README.md
+++ b/playwright-tests/README.md
@@ -260,7 +260,6 @@ ADMIN_SERVICE_API_URL=
SAUCE_USERNAME=
SAUCE_ACCESS_KEY=
-
## CI/CD Integration
The project uses Azure Pipelines for continuous integration with configurations defined in azure-pipelines.yml.
diff --git a/playwright-tests/framework/localTypes/Enums.ts b/playwright-tests/framework/localTypes/Enums.ts
index 0ab2796b5..978f92bb2 100644
--- a/playwright-tests/framework/localTypes/Enums.ts
+++ b/playwright-tests/framework/localTypes/Enums.ts
@@ -5,23 +5,23 @@ export enum PaymentMethod {
}
export enum ProgressBarPercentages {
- VehicleSelectionPage = '4%',
- VehicleDamagePage = '16%',
- EstimatePage = '28%',
- ServiceZipPage = '32%',
- VehicleLookupAddressPage = '32%',
- VehicleLookupLicensePage = '32%',
- VinLookupPage = '32%',
- PartQuestionsPage = '40%',
- MoldingQuestionsPage = '40%',
- CapabilityQuestionsPage = '40%',
- VehiclePartsPage = '40%',
- ServicePackagePage = '48%',
+ VehicleSelectionPage = '8%',
+ VehicleDamagePage = '11%',
+ EstimatePage = '18%',
+ ServiceZipPage = '22%',
+ VehicleLookupAddressPage = '22%',
+ VehicleLookupLicensePage = '22%',
+ VinLookupPage = '22%',
+ PartQuestionsPage = '30%',
+ MoldingQuestionsPage = '30%',
+ CapabilityQuestionsPage = '30%',
+ VehiclePartsPage = '30%',
+ ServicePackagePage = '62%',
InsuranceCompanyPage = '52%',
- ServiceLocationPage = '60%',
- SchedulePage = '64%',
+ ServiceLocationPage = '76%',
+ SchedulePage = '76%',
MobileDetailsPage = '76%',
ContactDetailsPage = '84%',
- PaymentMethodPage = '92%',
+ PaymentMethodPage = '97%',
OrderConfirmationPage = '100%'
}
\ No newline at end of file
diff --git a/playwright-tests/package-lock.json b/playwright-tests/package-lock.json
index 72efb6878..588266c72 100644
--- a/playwright-tests/package-lock.json
+++ b/playwright-tests/package-lock.json
@@ -22,7 +22,7 @@
"eslint": "^9.28.0",
"luxon": "^3.6.1",
"ortoni-report": "^3.0.2",
- "playwright-jira-reporter": "^1.0.4",
+ "playwright-jira-reporter": "^1.0.9",
"safelite-playwright-core": "^1.0.26",
"typescript": "^5.8.3"
}
@@ -3006,9 +3006,9 @@
}
},
"node_modules/playwright-jira-reporter": {
- "version": "1.0.4",
- "resolved": "https://pkgs.dev.azure.com/Safelite/Digital/_packaging/DigitalQA/npm/registry/playwright-jira-reporter/-/playwright-jira-reporter-1.0.4.tgz",
- "integrity": "sha1-uwnLFtj3Pnq5XXMFotlfHItucAw=",
+ "version": "1.0.9",
+ "resolved": "https://pkgs.dev.azure.com/Safelite/Digital/_packaging/DigitalQA/npm/registry/playwright-jira-reporter/-/playwright-jira-reporter-1.0.9.tgz",
+ "integrity": "sha1-o6+EHQlQ/jY4BtWKA6gSJ5mwK6A=",
"dev": true,
"license": "ISC",
"dependencies": {
diff --git a/playwright-tests/package.json b/playwright-tests/package.json
index 2c9c47d00..325c44b2d 100644
--- a/playwright-tests/package.json
+++ b/playwright-tests/package.json
@@ -30,7 +30,7 @@
"eslint": "^9.28.0",
"luxon": "^3.6.1",
"ortoni-report": "^3.0.2",
- "playwright-jira-reporter": "^1.0.4",
+ "playwright-jira-reporter": "^1.0.9",
"safelite-playwright-core": "^1.0.26",
"typescript": "^5.8.3"
},
diff --git a/playwright-tests/pages/AfterpayPage.ts b/playwright-tests/pages/AfterpayPage.ts
index 7f54fe336..75f0ca352 100644
--- a/playwright-tests/pages/AfterpayPage.ts
+++ b/playwright-tests/pages/AfterpayPage.ts
@@ -10,6 +10,8 @@ export class AfterpayPage extends BasePage {
readonly passwordTextBox: Locator;
// Card details
+ readonly paymentOptionsButton: Locator;
+ readonly continueButtonAfterpay: Locator;
readonly cardholderNameTextBox: Locator;
readonly cardNumberTextBox: Locator;
readonly expirationDateTextBox: Locator;
@@ -23,6 +25,8 @@ export class AfterpayPage extends BasePage {
this.passwordTextBox = page.getByTestId('login-password-input');
this.submitButton = page.getByRole('button', { name: 'Continue' });
+ this.paymentOptionsButton = page.locator('div:has(>input[id*=\'payment-types\']) label').nth(1);
+ this.continueButtonAfterpay = page.getByRole('button').filter({hasText: 'Continue'});
this.cardholderNameTextBox = page.getByTestId('payment-method-cardHolderName-input');
this.cardNumberTextBox = page.getByTestId('payment-method-cardNumber-input');
this.expirationDateTextBox = page.getByTestId('payment-method-cardExpiry-input');
@@ -46,7 +50,12 @@ export class AfterpayPage extends BasePage {
async executeAfterpayPayment(paymentDetails: IPaymentDetails) {
await this.login(paymentDetails.password!);
-
+ await this.page.locator('div[data-testid=\'loading-icon-svg\']').filter({ visible: true}).first().waitFor({ state: 'hidden' });
+ if (await this.paymentOptionsButton.isVisible())
+ {
+ await this.paymentOptionsButton.click();
+ await this.continueButtonAfterpay.click();
+ }
await this.confirmButton.click();
}
diff --git a/playwright-tests/pages/BasePage.ts b/playwright-tests/pages/BasePage.ts
index 30df48447..7c79dfed7 100644
--- a/playwright-tests/pages/BasePage.ts
+++ b/playwright-tests/pages/BasePage.ts
@@ -25,7 +25,7 @@ export class BasePage {
this.pageSpinner = page.getByRole('status');
this.buttonLoadSpin = page.getByRole('alert');
this.hamburgerMenu = this.page.getByRole('button', { name: 'Hamburger Menu (modal window)' });
- this.progressBar = this.page.locator('.progress-bar-inner');
+ this.progressBar = this.page.locator('.progress-bar-outer.progress-bar-inner');
}
async nextPage() {
@@ -104,7 +104,7 @@ export class BasePage {
async mockScheduleResponseForEarlyBird(customerDetails: ICustomerDetails) {
- const apiUrl = `https://digitalapi.${process.env['NODE_ENV']!.replace('sys', 'test').toLowerCase()}.safelite.io/schedule/api/v1/schedule/mobile-time-slots`;
+ const apiUrl = `https://digitalapi.${process.env['PLAYWRIGHT_ENV']!.replace('sys', 'test').toLowerCase()}.safelite.io/schedule/api/v1/schedule/mobile-time-slots`;
await this.page.route(apiUrl, async (route) => {
const currentDate = new Date().toISOString().split('T')[0]; // e.g., "2025-07-23"
if(route.request().postDataJSON().startDate === currentDate) {
diff --git a/playwright-tests/pages/PaymentMethodPage.ts b/playwright-tests/pages/PaymentMethodPage.ts
index 2ba68dcc3..7bb4a6fcc 100644
--- a/playwright-tests/pages/PaymentMethodPage.ts
+++ b/playwright-tests/pages/PaymentMethodPage.ts
@@ -56,7 +56,7 @@ export class PaymentMethodPage extends BasePage {
this.payNowButton = this.page.locator('[buttonlabel="Pay now"]');
this.payInFourButton = this.page.locator('[buttonlabel="Pay in 4 installments"]');
this.submitButton = this.page.locator('[data-test-id="nav-bar-main-button"]');
- this.recalibrationCheckbox = this.page.getByLabel('I understand after windshield');
+ this.recalibrationCheckbox = this.page.locator('label:has(>input[name=\'recalAckOptIn\'])');
// this.creditCardButton = page.locator('div').filter({ hasText: /^Credit or Debit$/ }).nth(1);
this.paymentPage = new PaymentPage(page);
this.paypalPage = new PaypalPage(page);
@@ -101,7 +101,7 @@ export class PaymentMethodPage extends BasePage {
let expectedAppointmentDetails = new Map();
expectedAppointmentDetails = await this.getExpectedVehicleDetails(testData, expectedAppointmentDetails);
expectedAppointmentDetails = await this.getExpectedVehicleDamage(testData, expectedAppointmentDetails);
- expectedAppointmentDetails = await this.expectedServicePackageDetails(testData, expectedAppointmentDetails);
+ // expectedAppointmentDetails = await this.expectedServicePackageDetails(testData, expectedAppointmentDetails);
expectedAppointmentDetails = await this.getExpectedServiceLocation(testData, expectedAppointmentDetails);
expectedAppointmentDetails = await this.getExpectedAppointmentDate(testData, expectedAppointmentDetails);
expectedAppointmentDetails = await this.getExpectedCustomerDetails(testData, expectedAppointmentDetails);
@@ -403,7 +403,7 @@ l
const { appointmentDetails } = testData;
let serviceLocationTitle = appointmentDetails?.serviceLocation == ServiceLocation.Mobile
? "We're coming to you"
- : "You're going to a Safelite shop";
+ : "You're coming to us";
let serviceLocation: string[] = [];
serviceLocation.push(
@@ -443,7 +443,7 @@ l
customerDetails?.apptDuration ? "Estimated appointment length: " + customerDetails.apptDuration : ""
);
- expectedServicePackageDetails["Appointment date + time"] = appointmentDateText;
+ expectedServicePackageDetails["Appointment Date + Time"] = appointmentDateText;
return expectedServicePackageDetails;
}
@@ -452,7 +452,7 @@ l
let customerDetailsText: string[] = [];
customerDetailsText.push(
- customerDetails?.firstName.toUpperCase() + " " + customerDetails?.lastName.toUpperCase(),
+ // customerDetails?.firstName.toUpperCase() + " " + customerDetails?.lastName.toUpperCase(),
customerDetails?.email ? customerDetails?.email.toUpperCase() : "",
customerDetails?.phoneNumber ? customerDetails?.phoneNumber : "",
"Opted out of text message updates"
diff --git a/playwright-tests/pages/PaypalPage.ts b/playwright-tests/pages/PaypalPage.ts
index 07e2cd1e6..ff2bbd548 100644
--- a/playwright-tests/pages/PaypalPage.ts
+++ b/playwright-tests/pages/PaypalPage.ts
@@ -24,8 +24,8 @@ export class PaypalPage extends BasePage {
this.passwordTextBox = page.getByPlaceholder('Password');
this.paypalLoginButton = page.getByRole('button', { name: 'Log In', exact: true });
this.completePurchaseButton = page.getByTestId('submit-button-initial')
- this.payWithRadioButton = page.locator('.py-4').first();
- this.payButton = page.getByRole('button', { name: 'Pay $' });
+ this.payWithRadioButton = page.getByRole('button').filter({ hasText: 'Pay with' });
+ this.payButton = page.locator('#one-time-cta');
}
async completePaypalPurchase(paymentDetails: IPaymentDetails){
@@ -45,7 +45,8 @@ export class PaypalPage extends BasePage {
await this.passwordTextBox.fill(paymentDetails.password!);
await this.paypalLoginButton.click();
await this.payWithRadioButton.click();
- await this.payButton.click();
+ await this.page.waitForTimeout(2000); // wait for 2 seconds to ensure the Pay button is clickable
+ await this.payButton.dblclick();
}
}
}
diff --git a/playwright-tests/pages/SchedulePage.ts b/playwright-tests/pages/SchedulePage.ts
index 368993d5f..a8f01b03a 100644
--- a/playwright-tests/pages/SchedulePage.ts
+++ b/playwright-tests/pages/SchedulePage.ts
@@ -17,8 +17,11 @@ export class SchedulePage extends BasePage {
readonly militaryWarningMessage: Locator;
readonly changeZipButton: Locator;
readonly updateZipTextBox: Locator;
+ readonly safeliteShopsList: Locator;
+ readonly searchButton: Locator;
+ readonly storeAddressText: Locator;
readonly saveLocationButton: Locator;
- readonly changeShopLocationLink: Locator;
+ readonly moreLocationsButton: Locator;
readonly selectAShopOptions: Locator;
readonly yourSafeliteShop: Locator;
@@ -44,12 +47,15 @@ export class SchedulePage extends BasePage {
this.militaryWarningMessage = this.page.locator('[class*="widget-name-AlertMilitaryBaseZipWidget"]');
this.changeZipButton = this.page.locator('a:has(span.sr-only:has-text("edit zip code"))');
this.updateZipTextBox = this.page.locator('#serviceZipCode').filter({ visible: true });
+ this.safeliteShopsList = this.page.locator('fieldset:has(#chooseShop) label');
+ this.searchButton = this.page.locator('.search-icon-button');
+ this.storeAddressText = this.page.locator('#shop-location label:not(:first-child)');
this.saveLocationButton = this.page.getByText('Save location', { exact: true });
- this.changeShopLocationLink = this.page.locator(".shop-question a").filter({ hasText: "Change shop location " });
+ this.moreLocationsButton = this.page.locator(".shop-question a").filter({ hasText: "More locations " });
this.selectAShopOptions = this.page.locator('[class="shop-question"]');
this.yourSafeliteShop = this.page.locator("fieldset:has(#chooseShop) label");
- this.allDayDropOffButton = this.page.locator("label[buttonlabel='Drop off all day']");
+ this.allDayDropOffButton = this.page.locator("label[buttonlabel*='Drop']");
this.pickATimeButton = this.page.locator("label[buttonlabel='Pick a time']");
this.firstAvailableDate = this.page.locator('.selectable-day').filter({ visible: true}).locator('nth=0');
this.firstAvailableTime = this.page.locator('label').filter({ hasText: /AM|PM/ }).locator('div').locator('nth=0');
@@ -58,7 +64,7 @@ export class SchedulePage extends BasePage {
this.dateText = this.page.locator('label.modal-title');
this.viewMoreDatesLink = this.page.getByText(/View more dates/).first();
this.appointmentDuration = this.page.locator('.duration-text-block');
- this.timeSlots = this.page.locator('fieldset[aria-labelledby=\'chooseTimeSlot\'] label');
+ this.timeSlots = this.page.locator('fieldset:has(>legend#chooseTimeSlot) label').filter({ visible: true});
}
async selectLocation(testData: Partial) {
@@ -76,25 +82,36 @@ export class SchedulePage extends BasePage {
}
async scheduleInShop(appointmentDetails?: IAppointmentDetails) {
- await this.inShopButton.click();
+
+ await this.inShopButton.isVisible() ? await this.inShopButton.click() : null;
if (appointmentDetails && appointmentDetails.shopAddress) {
const zipCodeMatch = appointmentDetails.shopAddress.match(/\b\d{5}$/);
if (zipCodeMatch) {
const zipCode = zipCodeMatch[0];
// Enter the ZIP code into the updateZipTextBox
- await this.changeShopLocationLink.click();
+ await this.moreLocationsButton.click();
await this.page.waitForTimeout(500);
await this.updateZipTextBox.fill(zipCode);
+ await this.searchButton.click().then( async() => await this.page.locator('loader-wrapper').waitFor({state: 'hidden'}));
+ await this.safeliteShopsList.first().click();
// Click the save location button
await this.saveLocationButton.click();
}
- await this.inShopButton.click();
+ // await this.inShopButton.click();
// await this.selectAShopOptions.locator(`[buttonbodycopy="${appointmentDetails.shopAddress}"]`).scrollIntoViewIfNeeded().then(() => this.selectAShopOptions.locator(`[buttonbodycopy="${appointmentDetails.shopAddress}"]`).click());
}
if (appointmentDetails && (appointmentDetails.shopAddress === "" || appointmentDetails.shopAddress === undefined )) {
- appointmentDetails.shopAddress = await this.yourSafeliteShop.getAttribute("buttonbodycopy") || "";
+ appointmentDetails.shopAddress = '';
+ await this.storeAddressText.first().waitFor({ state: 'visible' });
+ const elements = await this.storeAddressText.all();
+
+ for (let element of elements) {
+ let addressLine = await element.textContent() || "";
+ appointmentDetails.shopAddress += addressLine + ", "
+ };
+ appointmentDetails.shopAddress = appointmentDetails.shopAddress?.slice(0, -2);
}
}
@@ -146,6 +163,7 @@ export class SchedulePage extends BasePage {
const inshopAvailableDates = this.page.locator('.selectable-day').filter({ visible: true}).all();
for (const inshopAvailableDate of await inshopAvailableDates) {
await inshopAvailableDate.click();
+ await this.page.waitForTimeout(500);
if (await this.allDayDropOffButton.isVisible()) {
customerDetails!.apptDate = `${await inshopAvailableDate.getAttribute("id")}`;
break;
@@ -186,13 +204,13 @@ export class SchedulePage extends BasePage {
}
// appointmentmentDetails.serviceLocation === ServiceLocation.DropOff ? await this.dropOffButton.click() : await this.firstAvailableTime.click();
- customerDetails!.apptDuration = (await this.appointmentDuration.innerText()).replace("Duration: ", "");
+ customerDetails!.apptDuration = (await this.appointmentDuration.innerText()).replace("Your service will take approximately ", "").replace("Duration: ", "");
}
- async getFormattedTimeSlot(timeSlot: Locator) {
+ async getFormattedTimeSlot(timeSlot: Locator) {
const selectedTimeSlot = await timeSlot.innerText();
let formattedTimeSlot: string = "";
- if (selectedTimeSlot.toLowerCase().includes("drop off"))
+ if (selectedTimeSlot.toLowerCase().includes("drop"))
{
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";
}
diff --git a/playwright-tests/pages/ServicePackagesPage.ts b/playwright-tests/pages/ServicePackagesPage.ts
index 34818f285..95e31a746 100644
--- a/playwright-tests/pages/ServicePackagesPage.ts
+++ b/playwright-tests/pages/ServicePackagesPage.ts
@@ -37,7 +37,7 @@ export class ServicePackagesPage extends BasePage {
this.iHavePromoCodeButton = this.page.getByRole('link', { name: 'I have a promo code' });
this.skipQuoteEmailButton = this.page.getByRole('button', { name: 'Skip' });
this.emailInput = this.page.getByRole('textbox', { name: 'Enter your email address' });
- this.getMyQuoteButton = this.page.getByRole('button', { name: 'Get my quote' });
+ this.getMyQuoteButton = this.page.getByRole('button', { name: 'Send' });
this.closeButton = this.page. getByRole('dialog').locator('button').filter({ hasText: 'Close' });
this.promoCodeTextbox = this.page.getByLabel('Enter a promo code');
this.applyPromoButton = this.page.getByRole('button', { name: 'Apply promo code' });
diff --git a/playwright-tests/pages/VehicleDamagePage.ts b/playwright-tests/pages/VehicleDamagePage.ts
index 5de6cb1d4..465df289d 100644
--- a/playwright-tests/pages/VehicleDamagePage.ts
+++ b/playwright-tests/pages/VehicleDamagePage.ts
@@ -39,9 +39,9 @@ export class VehicleDamagePage extends BasePage {
super(page);
this.page = page;
this.windshieldChkBox = this.page.locator('[buttonlabel="Windshield"]');
- this.crackButton = this.page.locator('[buttonlabel="Crack"]');
- this.chipButton = this.page.locator('[buttonlabel="Chip(s)"]');
- this.sideDoorButton = this.page.locator('[buttonlabel="Side door"]');
+ this.crackButton = this.page.locator('[buttonlabelsubcopy="Replace my windshield"]');
+ this.chipButton = this.page.locator('[buttonlabelsubcopy="Repair my windshield"]');
+ this.sideDoorButton = this.page.locator('[buttonlabel="Side window"]');
this.driverSideButton = this.page.locator('[buttonlabel="Driver side"]');
this.passengerSideButton = this.page.locator('[buttonlabel="Passenger side"]');
this.driverQuarterPanelChkBox = this.page.locator('[aria-labelledby="driverSideOptions"]').locator('[buttonlabel="Quarter panel"]');
diff --git a/playwright-tests/playwright.config.ts b/playwright-tests/playwright.config.ts
index 2fe027426..40b1ddb01 100644
--- a/playwright-tests/playwright.config.ts
+++ b/playwright-tests/playwright.config.ts
@@ -9,7 +9,7 @@ if (!process.env.CI) {
// Environment variables are present in CI environment, no need to read from file
const basePath = __dirname; // This gets the directory where the config file is located
- if (process.env.NODE_ENV == 'undefined' || process.env.NODE_ENV == null) {
+ if (process.env.PLAYWRIGHT_ENV == 'undefined' || process.env.PLAYWRIGHT_ENV == null) {
dotenv.config({
path: path.join(basePath, '.env.dev'),
example: path.join(basePath, '.env.example')
@@ -17,7 +17,7 @@ if (!process.env.CI) {
}
else {
dotenv.config({
- path: path.join(basePath, `.env.${process.env.NODE_ENV}`),
+ path: path.join(basePath, `.env.${process.env.PLAYWRIGHT_ENV}`),
example: path.join(basePath, '.env.example')
});
}
@@ -42,7 +42,7 @@ const ortoniReportConfig: OrtoniReportConfig = {
filename: `ortoni_report_${formatDateForFilename(new Date())}.html`,
showProject: false,
projectName: "FMG-Nextgen-Playwright-Report",
- testType: `E2E- Environment: ${process.env.NODE_ENV} `,
+ testType: `E2E- Environment: ${process.env.PLAYWRIGHT_ENV} `,
preferredTheme: "light",
base64Image: true,
}
diff --git a/playwright-tests/tests/0000__M.test.ts b/playwright-tests/tests/0000__M.test.ts
index 204648276..c8788b04a 100644
--- a/playwright-tests/tests/0000__M.test.ts
+++ b/playwright-tests/tests/0000__M.test.ts
@@ -291,7 +291,6 @@ async function runWorkflow(page: Page, testCase: TestCase) {
// let serviceLocationPage = testCase.pages.serviceLocationPage;
// await serviceLocationPage.handleServiceLocationPage(testCase.testData);
-
// Schedule appointment
let schedulePage = testCase.pages.schedulePage;
await schedulePage.handleSchedulePage(testCase.testData);
diff --git a/playwright-tests/tests/CashRepairMobileCreditCard.ts b/playwright-tests/tests/CashRepairMobileCreditCard.ts
index b776f7fa5..8e38129e8 100644
--- a/playwright-tests/tests/CashRepairMobileCreditCard.ts
+++ b/playwright-tests/tests/CashRepairMobileCreditCard.ts
@@ -55,7 +55,7 @@ const cashRepairMobileCCTests: ITestCase[] = [];
const tc = {
name: `CashRepairMobileCreditCard`,
- tags: ['@E2E','@CashRepairMobileCreditCard', '@test_report', '@CASH'],
+ tags: ['@E2E','@CashRepairMobileCreditCard', '@test_report', '@CASH', '@CASH-848'],
testData: cashRepairMobileCCData
};
cashRepairMobileCCTests.push(tc);
diff --git a/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts b/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts
index cfc273c1b..43660fe21 100644
--- a/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts
+++ b/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts
@@ -42,14 +42,6 @@ const cashReplaceGlassAddressLookupInshopAfterPayData: Partial = {
vehicleLookupType: VehicleLookupType.Address
},
- // No need to override vehicleDamage as it already defaults to WindshieldCrack
-
- // Override appointment details
- appointmentDetails: {
- ...getDefaultTestData().appointmentDetails!,
- shopAddress: "6826 Sawmill Rd, Columbus, OH 43235"
- },
-
// Override payment details
paymentDetails: ClientData.getDefaultAfterpayDetails()
}
@@ -58,7 +50,7 @@ const cashReplaceGlassAddressLookupInshopAfterPayTests: ITestCase[] = [];
const tc = {
name: `CashReplaceGlassAddressLookupInshopAfterPay`,
- tags: ['@E2E','@CashReplaceGlassAddressLookupInshopAfterPay', '@test_report', '@CASH'],
+ tags: ['@E2E','@CashReplaceGlassAddressLookupInshopAfterPay', '@test_report', '@CASH', '@CASH-848'],
testData: cashReplaceGlassAddressLookupInshopAfterPayData
};
cashReplaceGlassAddressLookupInshopAfterPayTests.push(tc);
diff --git a/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts b/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts
index 2da4c6f5e..f488a3555 100644
--- a/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts
+++ b/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts
@@ -35,7 +35,7 @@ const cashReplaceMultiSlidingGlassDropoffData: Partial = {
appointmentDetails: {
serviceLocation: ServiceLocation.DropOff,
appointmentDate: getDefaultTestData().appointmentDetails?.appointmentDate,
- shopAddress: "6826 Sawmill Rd, Columbus, OH 43235"
+ shopAddress: "6826 sawmill rd, Columbus, OH 43235"
},
// Override vehicle details
diff --git a/playwright-tests/tests/CashReplaceSplitWindshield.ts b/playwright-tests/tests/CashReplaceSplitWindshield.ts
index d1f12fef4..4a8d72509 100644
--- a/playwright-tests/tests/CashReplaceSplitWindshield.ts
+++ b/playwright-tests/tests/CashReplaceSplitWindshield.ts
@@ -66,7 +66,7 @@ const CashReplaceSplitWindshieldTests: ITestCase[] = [];
const tc = {
name: `CashReplaceSplitWindshield`,
- tags: ['@E2E','@CashReplaceSplitWindshield', '@test_report', '@CASH'],
+ tags: ['@E2E','@CashReplaceSplitWindshield', '@test_report', '@CASH', '@CASH-848'],
testData: CashReplaceSplitWindshieldData
};
CashReplaceSplitWindshieldTests.push(tc);
diff --git a/playwright-tests/tests/CashReplaceWiperDropoff.ts b/playwright-tests/tests/CashReplaceWiperDropoff.ts
index 8080603f6..09083fcd2 100644
--- a/playwright-tests/tests/CashReplaceWiperDropoff.ts
+++ b/playwright-tests/tests/CashReplaceWiperDropoff.ts
@@ -20,7 +20,7 @@ const cashReplaceWiperDropoffData: Partial = {
servicePackage: ServicePackage.Standard,
// Special flags
- isSkipEstimatePage: true,
+ isSkipEstimatePage: false,
isRecalVehicle: true,
// Override customer postal code
@@ -28,7 +28,7 @@ const cashReplaceWiperDropoffData: Partial = {
...getDefaultTestData().customerDetails!,
address: {
...getDefaultTestData().customerDetails!.address,
- postalCode: '43085'
+ postalCode: '43235'
}
},
diff --git a/playwright-tests/tests/InsuranceAcuityPaypal.ts b/playwright-tests/tests/InsuranceAcuityPaypal.ts
index 0a97fc794..5cd3c0a40 100644
--- a/playwright-tests/tests/InsuranceAcuityPaypal.ts
+++ b/playwright-tests/tests/InsuranceAcuityPaypal.ts
@@ -90,7 +90,7 @@ const insuranceAcuityPaypalTests: ITestCase[] = [];
const tc = {
name: `InsuranceAcuityPaypal`,
- tags: ['@E2E','@InsuranceAcuityPaypal', '@test_report', '@Insurance', '@CASH-1187'],
+ tags: ['@E2E','@InsuranceAcuityPaypal', '@test_report', '@Insurance', '@CASH-1187', '@CASH-848'],
testData: insuranceAcuityPaypalData
};
insuranceAcuityPaypalTests.push(tc);
diff --git a/public/css/hop-styling.css b/public/css/hop-styling.css
index da2f3ef22..d46039051 100644
--- a/public/css/hop-styling.css
+++ b/public/css/hop-styling.css
@@ -53,6 +53,7 @@ body select {
background-color: #fff;
font-family: Urbanist, Arial, Helvetica, sans-serif;
font-weight: 400;
+ box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.2);
}
body input:focus, body input:focus-visible,
body select:focus,
diff --git a/public/scss/hop-styling.scss b/public/scss/hop-styling.scss
index d3afaf985..9f6711f1c 100644
--- a/public/scss/hop-styling.scss
+++ b/public/scss/hop-styling.scss
@@ -63,6 +63,7 @@ body {
background-color: #fff;
font-family: Urbanist, Arial, Helvetica, sans-serif;
font-weight: 400;
+ box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.2);
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2.5px #1574a1;
diff --git a/src/constants/damage-locations-selected.js b/src/constants/damage-locations-selected.js
index 7ede615cb..848491223 100644
--- a/src/constants/damage-locations-selected.js
+++ b/src/constants/damage-locations-selected.js
@@ -16,6 +16,8 @@ const damageLocationsSelected = {
PASSENGERSIDE: "PassengerSide",
STATIONARY: "Stationary",
SLIDER: "Slider",
+ DOOR: "Door",
+ GLASS: "Glass",
};
export { damageLocationsSelected };
diff --git a/src/digital-components/date-picker/date-picker.vue b/src/digital-components/date-picker/date-picker.vue
index 1a3080286..cbaba9193 100644
--- a/src/digital-components/date-picker/date-picker.vue
+++ b/src/digital-components/date-picker/date-picker.vue
@@ -2,16 +2,6 @@
-
-