Merge pull request #2721 from Safelite/feature/CASH-1182

Feature/cash 1182
This commit is contained in:
Johnny Shultz 2025-08-01 15:08:01 -04:00 committed by GitHub
commit ba737c4bcd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 48 additions and 37 deletions

View file

@ -27,4 +27,3 @@ ADMIN_SERVICE_API_URL="https://issadminapi.dev.sagaws.net/iss-admin/api/v1/"
# API authentication (replace with actual value when running tests) # API authentication (replace with actual value when running tests)
CCIS_API_AUTH="undefined" CCIS_API_AUTH="undefined"

View file

@ -131,24 +131,24 @@ export class BasePage {
} }
async validateProgressBar(progressPercentage: string, timeout: number = 60000) { async validateProgressBar(progressPercentage: string, timeout: number = 60000) {
// This section has been commented out until progress bar work is completed for parity.
// await waitUntil(async () => {
await waitUntil(async () => { // let loaderElements = await this.page.locator('button .loader, .buy-loader, timeout, .modal-loader').all();
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));
return !(await Promise.any(loaderElements.map(el => el.isVisible())).catch(() => false)); // });
});
// Take a screenshot of the page before validating the progress bar // // Take a screenshot of the page before validating the progress bar
await this.page.screenshot({ path: `test-results\\ortoni-data\\progress-bar-${Date.now()}.png`, fullPage: true }); // await this.page.screenshot({ path: `test-results\\ortoni-data\\progress-bar-${Date.now()}.png`, fullPage: true });
// Wait until the progress bar element is attached and visible // // Wait until the progress bar element is attached and visible
const actualProgressPercentage = await this.progressBar.evaluate( // const actualProgressPercentage = await this.progressBar.evaluate(
async (element) => { // async (element) => {
await new Promise(resolve => setTimeout(resolve, 200)); // await new Promise(resolve => setTimeout(resolve, 200));
return element.style.width || "Not Found"; // return element.style.width || "Not Found";
} // }
); // );
Soft.expect(actualProgressPercentage).toBe(progressPercentage); // Soft.expect(actualProgressPercentage).toBe(progressPercentage);
console.log(`Progress Bar Percentage: Actual - ${actualProgressPercentage} vs Expected - ${progressPercentage}`); // console.log(`Progress Bar Percentage: Actual - ${actualProgressPercentage} vs Expected - ${progressPercentage}`);
} }
} }

View file

@ -95,7 +95,7 @@ const cashReplaceMultiGlassMobileTests: ITestCase[] = [];
const tc = { const tc = {
name: `CashReplaceMultiGlassMobile`, name: `CashReplaceMultiGlassMobile`,
tags: ['@E2E','@CashReplaceMultiGlassMobile', '@test_report', '@CASH'], tags: ['@E2E','@CashReplaceMultiGlassMobile', '@test_report', '@CASH', '@CASH-1182'],
testData: cashReplaceMultiGlassMobileData testData: cashReplaceMultiGlassMobileData
}; };
cashReplaceMultiGlassMobileTests.push(tc); cashReplaceMultiGlassMobileTests.push(tc);

View file

@ -77,7 +77,7 @@ const cashReplaceSafeliteCanNotRecalMobileTests: ITestCase[] = [];
const tc = { const tc = {
name: `CashReplaceSafeliteCanNotRecalMobile`, name: `CashReplaceSafeliteCanNotRecalMobile`,
tags: ['@E2E','@CashReplaceSafeliteCanNotRecalMobile', '@test_report', '@CASH'], tags: ['@E2E','@CashReplaceSafeliteCanNotRecalMobile', '@test_report', '@CASH', '@CASH-1182'],
testData: cashReplaceSafeliteCanNotRecalMobileData testData: cashReplaceSafeliteCanNotRecalMobileData
}; };
cashReplaceSafeliteCanNotRecalMobileTests.push(tc); cashReplaceSafeliteCanNotRecalMobileTests.push(tc);

View file

@ -66,7 +66,7 @@ const cashReplaceVinMobileTests: ITestCase[] = [];
const tc = { const tc = {
name: `CashReplaceVinMobile`, name: `CashReplaceVinMobile`,
tags: ['@E2E','@CashReplaceVinMobile', '@test_report', '@CASH'], tags: ['@E2E','@CashReplaceVinMobile', '@test_report', '@CASH', '@CASH-1182'],
testData: cashReplaceVinMobileData testData: cashReplaceVinMobileData
}; };
cashReplaceVinMobileTests.push(tc); cashReplaceVinMobileTests.push(tc);

View file

@ -1025,6 +1025,8 @@ export default {
flex-grow: 0; flex-grow: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start;
text-align: left;
.duration-text-block { .duration-text-block {
text-align: left; text-align: left;
@ -1108,7 +1110,7 @@ export default {
grid-area: 1 / 1 / 2 / 5; grid-area: 1 / 1 / 2 / 5;
font-family: UrbanistBold; font-family: UrbanistBold;
color: $black; color: $black;
justify-content: center; justify-content: left;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.legend { .legend {

View file

@ -5,22 +5,6 @@
<div class="container page-container-grouped-styles"> <div class="container page-container-grouped-styles">
<div class="row"> <div class="row">
<div class="col-12 col-md-10 col-lg-8 col-xl-7"> <div class="col-12 col-md-10 col-lg-8 col-xl-7">
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" class="mt-4" />
<serviceZipModalQuestion
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
v-model="serviceZipCodeQuestion"
ref="serviceZipCodeQuestion"
:carId="carId"
:isVehicleHeavyTruck="isVehicleHeavyTruck"
:mobileFeePart="mobileFeePart"
@updated-mobile-fee-part="setMobileFeePart"
@updated-recycle-fee-part="setRecycleFeePart"
@updated-serviceability="setServiceabilityDetails"
@updated-contains-military-base="setContainsMilitaryBase"
@updated-bill-to-account-number="setBillToAccountNumber"
@service-zip-changed-from-modal="onServiceZipChanged"
linkWidgetName="ServiceZipLinkWidget"
modalWidgetName="ServiceZipModalWidget" />
<alert <alert
ref="alertMilitaryBaseZip" ref="alertMilitaryBaseZip"
class="my-5" class="my-5"
@ -62,6 +46,7 @@
</div> </div>
<div class="row appointment-type"> <div class="row appointment-type">
<div class="col-12 col-md-10 col-lg-8 col-xl-7"> <div class="col-12 col-md-10 col-lg-8 col-xl-7">
<funnelSubHeader cmsWidgetName="ScheduleYourServiceWidget" class="mt-4" />
<appointmentTypeQuestion <appointmentTypeQuestion
v-model="appointmentTypeFromAppointmentTypeQuestion" v-model="appointmentTypeFromAppointmentTypeQuestion"
v-show="isAppointmentTypeDisplayed" v-show="isAppointmentTypeDisplayed"
@ -77,6 +62,26 @@
labelBold="true" /> labelBold="true" />
</div> </div>
</div> </div>
<div
v-if="appointmentType && appointmentType === appointmentTypeStrings.MOBILE"
class="col-12 col-md-10 col-lg-8 col-xl-7">
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" class="mt-4" />
<serviceZipModalQuestion
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
v-model="serviceZipCodeQuestion"
ref="serviceZipCodeQuestion"
:carId="carId"
:isVehicleHeavyTruck="isVehicleHeavyTruck"
:mobileFeePart="mobileFeePart"
@updated-mobile-fee-part="setMobileFeePart"
@updated-recycle-fee-part="setRecycleFeePart"
@updated-serviceability="setServiceabilityDetails"
@updated-contains-military-base="setContainsMilitaryBase"
@updated-bill-to-account-number="setBillToAccountNumber"
@service-zip-changed-from-modal="onServiceZipChanged"
linkWidgetName="ServiceZipLinkWidget"
modalWidgetName="ServiceZipModalWidget" />
</div>
<div <div
class="row your-shop-location" class="row your-shop-location"
v-if="appointmentType && appointmentType !== appointmentTypeStrings.MOBILE"> v-if="appointmentType && appointmentType !== appointmentTypeStrings.MOBILE">
@ -1793,4 +1798,9 @@ export default {
background: $blue-100; background: $blue-100;
box-shadow: 0 0 0 1px $primary; box-shadow: 0 0 0 1px $primary;
} }
.container .row .col-12 .alert-success .alert-heading {
color: $black;
font-weight: 600;
}
</style> </style>