Merge branch 'develop' into feature/CASH-1042_QA

This commit is contained in:
kpatel8hs4io 2025-09-08 13:46:19 -04:00
commit f1f35c627f
18 changed files with 42 additions and 37 deletions

View file

@ -51,16 +51,7 @@ stages:
displayName: Run Prettier check displayName: Run Prettier check
- stage: TestPr - stage: TestPr
displayName: Run Unit Tests For PullRequest displayName: Run 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
jobs: jobs:
- template: temp/playwright-test.yml - template: temp/playwright-test.yml
parameters: parameters:
@ -76,6 +67,12 @@ stages:
secrets: secrets:
CCIS_API_AUTH: $(CCIS_API_AUTH) CCIS_API_AUTH: $(CCIS_API_AUTH)
JIRA_API_KEY: $(JIRA_API_KEY) 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 }}: - ${{ else }}:
# Dev Build/Deploy # Dev Build/Deploy
- stage: Dev - stage: Dev

View file

@ -260,7 +260,6 @@ ADMIN_SERVICE_API_URL= <br>
SAUCE_USERNAME= <br> SAUCE_USERNAME= <br>
SAUCE_ACCESS_KEY= <br> SAUCE_ACCESS_KEY= <br>
## CI/CD Integration ## CI/CD Integration
The project uses Azure Pipelines for continuous integration with configurations defined in azure-pipelines.yml. The project uses Azure Pipelines for continuous integration with configurations defined in azure-pipelines.yml.

View file

@ -291,7 +291,6 @@ async function runWorkflow(page: Page, testCase: TestCase) {
// let serviceLocationPage = testCase.pages.serviceLocationPage; // let serviceLocationPage = testCase.pages.serviceLocationPage;
// await serviceLocationPage.handleServiceLocationPage(testCase.testData); // await serviceLocationPage.handleServiceLocationPage(testCase.testData);
// Schedule appointment // Schedule appointment
let schedulePage = testCase.pages.schedulePage; let schedulePage = testCase.pages.schedulePage;
await schedulePage.handleSchedulePage(testCase.testData); await schedulePage.handleSchedulePage(testCase.testData);

View file

@ -32,7 +32,7 @@
<div class="modal-footer"> <div class="modal-footer">
<slot name="modal-footer-slot"></slot> <slot name="modal-footer-slot"></slot>
<modalButtonMain <modalButtonMain
isPrimary :isPrimary="isFooterButtonPrimary"
class="w-100 modal-footer-button" class="w-100 modal-footer-button"
:id="modalId + '-modalbtn'" :id="modalId + '-modalbtn'"
ref="modalButtonMain" ref="modalButtonMain"
@ -65,6 +65,7 @@ export default {
suppressPageScroll: Boolean, suppressPageScroll: Boolean,
staticBackdrop: Boolean, staticBackdrop: Boolean,
footerButtonDisabled: Boolean, footerButtonDisabled: Boolean,
isFooterButtonPrimary: Boolean,
onModalOpenedCallback: { onModalOpenedCallback: {
type: Function, type: Function,
}, },

View file

@ -115,14 +115,16 @@ export default {
&.btn-secondary { &.btn-secondary {
position: relative; position: relative;
background: transparent; background: transparent;
border: 1px solid $red; border: 1px solid $blue;
color: $blue; color: $blue;
font-weight: 500; font-weight: 500;
transition: all 150ms linear; transition: all 150ms linear;
height: 3rem; height: 3rem;
&:hover { &:hover,
&:active {
color: $white; color: $white;
@include blue-gradient; background: $blue;
border: none;
} }
&:focus, // Mouse, touch, stylus focus &:focus, // Mouse, touch, stylus focus
&:focus-visible { &:focus-visible {
@ -130,16 +132,18 @@ export default {
outline: none; outline: none;
box-shadow: box-shadow:
0 0 0 3px $white, 0 0 0 3px $white,
0 0 0 5.5px $red; 0 0 0 5.5px $blue;
color: $white; color: $blue;
@include blue-gradient; &:active {
color: $white;
}
} }
&:disabled { &:disabled {
background: transparent; background: transparent;
color: $gray-550 !important; color: $gray-550 !important;
font-weight: 400; font-weight: 400;
height: 48px; height: 48px;
border: 1px solid $red; border: 1px solid $blue;
cursor: pointer; cursor: pointer;
pointer-events: all; pointer-events: all;
} }

View file

@ -16,6 +16,7 @@
suppressPageScroll suppressPageScroll
:onModalClosedCallback="onModalClosed" :onModalClosedCallback="onModalClosed"
:footerButtonText="modalButtonText" :footerButtonText="modalButtonText"
:isFooterButtonPrimary="true"
@footer-button-event="saveProgress"> @footer-button-event="saveProgress">
<p class="modal-body-inner" v-html="modalBodyText"></p> <p class="modal-body-inner" v-html="modalBodyText"></p>
<saveProgressQuestion <saveProgressQuestion

View file

@ -6,6 +6,7 @@
suppressPageScroll suppressPageScroll
:onModalClosedCallback="onModalClosed" :onModalClosedCallback="onModalClosed"
:footerButtonText="modalButtonText" :footerButtonText="modalButtonText"
:isFooterButtonPrimary="true"
@footer-button-event="saveProgress"> @footer-button-event="saveProgress">
<p class="modal-body-inner">{{ modalBodyText }}</p> <p class="modal-body-inner">{{ modalBodyText }}</p>
<saveProgressQuestion <saveProgressQuestion

View file

@ -757,7 +757,7 @@ function setupMocks({
wrapper.vm.$refs.navbar.removeLoader = jest.fn(); wrapper.vm.$refs.navbar.removeLoader = jest.fn();
const closestShops = { const closestShops = {
data: { data: {
providers: [ inShopProviders: [
{ id: 1, name: "Shop 1" }, { id: 1, name: "Shop 1" },
{ id: 2, name: "Shop 2" }, { id: 2, name: "Shop 2" },
], ],

View file

@ -308,7 +308,7 @@ export default {
this.serviceZipCode, this.serviceZipCode,
this.carId this.carId
); );
this.displayNoServiceAlert = !closestShops?.data?.providers?.length; this.displayNoServiceAlert = !closestShops?.data?.inShopProviders?.length;
if (this.displayNoServiceAlert) { if (this.displayNoServiceAlert) {
return this.$refs.navbar.removeLoader(); return this.$refs.navbar.removeLoader();
} }

View file

@ -265,6 +265,9 @@ export default {
.vinlookupquestion p { .vinlookupquestion p {
font-size: 1.25rem; font-size: 1.25rem;
} }
.header-sub-copy {
font-size: 0.875rem;
}
.funnel-sub-header { .funnel-sub-header {
padding-bottom: 0; padding-bottom: 0;
h5.dark-header { h5.dark-header {

View file

@ -722,7 +722,7 @@ function setupMocks({
wrapper.vm.$refs.navbar.removeLoader = jest.fn(); wrapper.vm.$refs.navbar.removeLoader = jest.fn();
const closestShops = { const closestShops = {
data: { data: {
providers: [ inShopProviders: [
{ id: 1, name: "Shop 1" }, { id: 1, name: "Shop 1" },
{ id: 2, name: "Shop 2" }, { id: 2, name: "Shop 2" },
], ],

View file

@ -274,7 +274,7 @@ export default {
this.serviceZipCode, this.serviceZipCode,
this.carId this.carId
); );
this.displayNoServiceAlert = !closestShops?.data?.providers?.length; this.displayNoServiceAlert = !closestShops?.data?.inShopProviders?.length;
if (this.displayNoServiceAlert) { if (this.displayNoServiceAlert) {
return this.$refs.navbar.removeLoader(); return this.$refs.navbar.removeLoader();
} }

View file

@ -904,7 +904,7 @@ export default {
:deep(.nav-bar) { :deep(.nav-bar) {
position: initial; position: initial;
button.btn { button {
width: 100%; width: 100%;
justify-content: center; justify-content: center;
} }

View file

@ -178,7 +178,7 @@ export default {
"service-location" "service-location"
); );
if (!closestShops || closestShops.providers?.length === 0) { if (!closestShops || closestShops.inShopProviders?.length === 0) {
this.displayNoServiceAlert = true; this.displayNoServiceAlert = true;
this.focusOnZipInput(); this.focusOnZipInput();
this.resetModalButtonStyle(); this.resetModalButtonStyle();

View file

@ -265,7 +265,7 @@ export default {
this.serviceZipCode, this.serviceZipCode,
this.carId this.carId
); );
this.displayNoServiceAlert = !closestShops?.data?.providers?.length; this.displayNoServiceAlert = !closestShops?.data?.inShopProviders?.length;
if (this.displayNoServiceAlert) { if (this.displayNoServiceAlert) {
return this.$refs.navbar.removeLoader(); return this.$refs.navbar.removeLoader();
} }

View file

@ -341,7 +341,7 @@ export default {
this.serviceZipCode, this.serviceZipCode,
this.carId this.carId
); );
this.displayNoServiceAlert = !closestShops?.data?.providers?.length; this.displayNoServiceAlert = !closestShops?.data?.inShopProviders?.length;
if (this.displayNoServiceAlert) { if (this.displayNoServiceAlert) {
return this.$refs.navbar.removeLoader(); return this.$refs.navbar.removeLoader();
} }

View file

@ -123,8 +123,8 @@ $body-color: $gray-600;
//Fonts //Fonts
$font-family-sans-serif: UrbanistRegular, Arial, Helvetica, sans-serif; $font-family-sans-serif: UrbanistRegular, Arial, Helvetica, sans-serif;
$font-family-monospace: UrbanistRegular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", $font-family-monospace:
monospace; UrbanistRegular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
// stylelint-enable value-keyword-case // stylelint-enable value-keyword-case
$font-family-base: $font-family-sans-serif; $font-family-base: $font-family-sans-serif;
$font-family-code: $font-family-monospace; $font-family-code: $font-family-monospace;

View file

@ -63,9 +63,6 @@ export default {
<style lang="scss"> <style lang="scss">
.btn { .btn {
&:first-child:active {
background-color: $red;
}
&.btn-primary { &.btn-primary {
position: relative; position: relative;
background: $red; background: $red;
@ -117,8 +114,8 @@ export default {
&.btn-secondary { &.btn-secondary {
position: relative; position: relative;
background: transparent; background: transparent;
border: 1px solid $red; border: 1px solid $blue;
color: $red; color: $blue;
font-weight: 500; font-weight: 500;
transition: all 150ms linear; transition: all 150ms linear;
height: 3rem; height: 3rem;
@ -131,8 +128,11 @@ export default {
outline: none; outline: none;
box-shadow: box-shadow:
0 0 0 3px $white, 0 0 0 3px $white,
0 0 0 5.5px $red; 0 0 0 5.5px $blue;
color: $white; color: $blue;
&:hover {
color: $white;
}
} }
&:disabled { &:disabled {
background: transparent; background: transparent;