Merge remote-tracking branch 'origin/release/2025.08.21' into feature/CASH-1182
This commit is contained in:
commit
ad4c1000ed
7 changed files with 159 additions and 65 deletions
|
|
@ -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)
|
||||
CCIS_API_AUTH="undefined"
|
||||
|
||||
|
|
|
|||
|
|
@ -131,24 +131,24 @@ export class BasePage {
|
|||
}
|
||||
|
||||
async validateProgressBar(progressPercentage: string, timeout: number = 60000) {
|
||||
// This section has been commented out until progress bar work is completed for parity.
|
||||
|
||||
|
||||
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));
|
||||
});
|
||||
// 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));
|
||||
// });
|
||||
|
||||
// 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 });
|
||||
// Wait until the progress bar element is attached and visible
|
||||
// // 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 });
|
||||
// // Wait until the progress bar element is attached and visible
|
||||
|
||||
const actualProgressPercentage = await this.progressBar.evaluate(
|
||||
async (element) => {
|
||||
await new Promise(resolve => setTimeout(resolve, 200));
|
||||
return element.style.width || "Not Found";
|
||||
}
|
||||
);
|
||||
Soft.expect(actualProgressPercentage).toBe(progressPercentage);
|
||||
console.log(`Progress Bar Percentage: Actual - ${actualProgressPercentage} vs Expected - ${progressPercentage}`);
|
||||
// const actualProgressPercentage = await this.progressBar.evaluate(
|
||||
// async (element) => {
|
||||
// await new Promise(resolve => setTimeout(resolve, 200));
|
||||
// return element.style.width || "Not Found";
|
||||
// }
|
||||
// );
|
||||
// Soft.expect(actualProgressPercentage).toBe(progressPercentage);
|
||||
// console.log(`Progress Bar Percentage: Actual - ${actualProgressPercentage} vs Expected - ${progressPercentage}`);
|
||||
}
|
||||
}
|
||||
|
|
@ -1470,19 +1470,8 @@ export default {
|
|||
display: flex;
|
||||
max-width: 100%;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 0.5rem;
|
||||
|
||||
& > div {
|
||||
flex: 0 0 calc(50% - 0.25rem);
|
||||
}
|
||||
}
|
||||
:deep(.button-question.is-mobile-appointment) {
|
||||
.button-inner-wrapper > div {
|
||||
flex: 0 0 100%;
|
||||
}
|
||||
}
|
||||
:deep(.button-question.is-drop-off-appointment) {
|
||||
.button-inner-wrapper > div {
|
||||
flex: 0 0 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,17 +86,19 @@
|
|||
class="row your-shop-location"
|
||||
v-if="appointmentType && appointmentType !== appointmentTypeStrings.MOBILE">
|
||||
<div class="col-12 col-md-10 col-lg-8 col-xl-7">
|
||||
<button-question
|
||||
class="shop-question-button"
|
||||
ref="buttonQuestion"
|
||||
:answers="selectedShopAnswer"
|
||||
:modelValue="selectedProvider?.providerNumber"
|
||||
:isMultiSelect="false"
|
||||
:readonly="true"
|
||||
:questionText="questionText"
|
||||
buttonTypeString="shopListButton"
|
||||
:buttonTypeObject="shopListButton"
|
||||
groupName="chooseShop" />
|
||||
<div>
|
||||
<shopLocation
|
||||
v-if="
|
||||
appointmentType && appointmentType !== appointmentTypeStrings.MOBILE
|
||||
"
|
||||
:selectedShop="selectedShopAnswer"
|
||||
:selectedProviderNumberFromParent="selectedProvider?.providerNumber"
|
||||
:shopProviderDataFromParent="shopProviderData"
|
||||
:zipCodeFromParent="zipCode"
|
||||
:isShopQuestionDisplayed="isShopQuestionDisplayed"
|
||||
@shop-selected="onShopSelected"
|
||||
@updated-serviceability="setServiceabilityDetails" />
|
||||
</div>
|
||||
<div>
|
||||
<textBlock
|
||||
v-if="mobileFeeApplies && isMobileSelected"
|
||||
|
|
@ -105,14 +107,6 @@
|
|||
typeStyle="caption"
|
||||
class="ps-4 pe-4 mt-4" />
|
||||
</div>
|
||||
<shopQuestionPopup
|
||||
v-if="isShopQuestionDisplayed"
|
||||
:selectedProviderNumberFromParent="selectedProvider?.providerNumber"
|
||||
:shopProviderDataFromParent="shopProviderData"
|
||||
@shop-selected="onShopSelected"
|
||||
@updated-serviceability="setServiceabilityDetails"
|
||||
:zipCodeFromParent="zipCode"
|
||||
cmsWidgetName="YourSafeliteShopWidget" />
|
||||
|
||||
<contentGroupModal ref="RecalModal" cmsWidgetName="RecalModal" />
|
||||
</div>
|
||||
|
|
@ -163,9 +157,8 @@ import alert from "@/ux-components/alert/alert";
|
|||
import serviceZipModalQuestion from "@/layouts/service-location/service-zip-modal-question/service-zip-modal-question";
|
||||
import appointmentTypeQuestion from "@/layouts/service-location/appointment-type-question/appointment-type-question";
|
||||
import shopQuestion from "@/layouts/service-location/shop-question/shop-question";
|
||||
import shopQuestionPopup from "@/layouts/service-location/shop-question/shop-question-popup";
|
||||
import buttonQuestion from "@/digital-components/button-question/button-question.vue";
|
||||
import shopListButton from "@/layouts/service-location/shop-question/shop-list-button/shop-list-button";
|
||||
import shopLocation from "@/layouts/schedule/shop-location/shop-location";
|
||||
|
||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||
|
|
@ -774,21 +767,15 @@ export default {
|
|||
const zipCode = this.selectedProvider.address.zipCode;
|
||||
const distanceInMiles = provider ? Math.round(provider.distanceInMiles * 2) / 2 : 0;
|
||||
|
||||
return [
|
||||
{
|
||||
buttonLabel: `${city}`,
|
||||
buttonLabelSubCopy: `${distanceInMiles} mi`,
|
||||
buttonBodyCopy: `${streetAddress}, ${city}, ${state} ${zipCode}`,
|
||||
additionalButtonData: this.additionalButtonData,
|
||||
value: this.selectedProvider.providerNumber,
|
||||
},
|
||||
];
|
||||
return {
|
||||
city: `${city}`,
|
||||
distance: `${distanceInMiles} mi`,
|
||||
address1: `${streetAddress}`,
|
||||
address2: `${city}, ${state} ${zipCode}`,
|
||||
};
|
||||
}
|
||||
return [];
|
||||
},
|
||||
questionText() {
|
||||
return this.getCmsContent("YourSafeliteShopWidget", "QuestionText");
|
||||
},
|
||||
appointmentTypeStrings() {
|
||||
return AppointmentTypeStrings;
|
||||
},
|
||||
|
|
@ -1745,8 +1732,7 @@ export default {
|
|||
serviceZipModalQuestion,
|
||||
appointmentTypeQuestion,
|
||||
contentGroupModal,
|
||||
shopQuestionPopup,
|
||||
buttonQuestion,
|
||||
shopLocation,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
|||
120
src/layouts/schedule/shop-location/shop-location.vue
Normal file
120
src/layouts/schedule/shop-location/shop-location.vue
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
<template>
|
||||
<div id="shop-location">
|
||||
<textBlock :customText="questionText" typeStyle="button-question" />
|
||||
<div>
|
||||
<div>
|
||||
<label v-for="addressItem in addressDetails" :key="addressItem">
|
||||
{{ addressItem }}
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>{{ selectedShop.distance }}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<shopQuestionPopup
|
||||
v-if="isShopQuestionDisplayed"
|
||||
:selectedProviderNumberFromParent="selectedProviderNumberFromParent"
|
||||
:shopProviderDataFromParent="shopProviderDataFromParent"
|
||||
:zipCodeFromParent="zipCodeFromParent"
|
||||
@shop-selected="onShopSelected"
|
||||
@updated-serviceability="setServiceabilityDetails"
|
||||
cmsWidgetName="YourSafeliteShopWidget" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import textBlock from "@/digital-components/text-block/text-block";
|
||||
import shopQuestionPopup from "@/layouts/service-location/shop-question/shop-question-popup";
|
||||
|
||||
export default {
|
||||
name: "shopLocation",
|
||||
props: {
|
||||
selectedShop: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
city: null,
|
||||
distance: null,
|
||||
address1: null,
|
||||
address2: null,
|
||||
}),
|
||||
},
|
||||
isShopQuestionDisplayed: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
selectedProviderNumberFromParent: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
shopProviderDataFromParent: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
zipCodeFromParent: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
questionText() {
|
||||
return this.getCmsContent("YourSafeliteShopWidget", "QuestionText");
|
||||
},
|
||||
addressDetails() {
|
||||
const { distance, ...addressDetails } = this.selectedShop;
|
||||
return addressDetails;
|
||||
},
|
||||
},
|
||||
components: {
|
||||
textBlock,
|
||||
shopQuestionPopup,
|
||||
},
|
||||
methods: {
|
||||
onShopSelected(shopQuestionPopUpData) {
|
||||
this.$emit("shop-selected", shopQuestionPopUpData);
|
||||
},
|
||||
setServiceabilityDetails(serviceabilityDetails) {
|
||||
this.$emit("updated-serviceability", serviceabilityDetails);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#shop-location {
|
||||
& > div {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
label {
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > div.shop-question {
|
||||
width: 172px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
#shop-location {
|
||||
& > div.shop-question {
|
||||
width: fit-content;
|
||||
background-color: $blue;
|
||||
border-radius: $border-radius-pill;
|
||||
padding: 0.75rem 3rem;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: $white;
|
||||
font-weight: $font-weight-600;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -90,7 +90,7 @@ export default {
|
|||
position: relative;
|
||||
background: $white;
|
||||
transition: all 150ms linear;
|
||||
border-radius: $border-radius-lg;
|
||||
border-radius: $border-radius-pill;
|
||||
border: 1px solid $gray-500;
|
||||
width: 100%;
|
||||
outline: none;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
position: relative;
|
||||
z-index: 5;
|
||||
@include box-shadow-hover($blue-300);
|
||||
border-radius: 0.5rem;
|
||||
border-radius: $border-radius-pill;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue