diff --git a/azure-pipelines-automated-testing.yml b/azure-pipelines-automated-testing.yml index df7663f6..bc2726ba 100644 --- a/azure-pipelines-automated-testing.yml +++ b/azure-pipelines-automated-testing.yml @@ -20,6 +20,7 @@ variables: # - group: Digital-Infrastructure # - group: ISS-BuildBranches - group: SafelitePlaywright + - group: ISSNextgenRegressionAutomationPlaywright - name: dockerImageName value: 'playwright-tests' - name: imageTag diff --git a/package-lock.json b/package-lock.json index 77a51eea..9314c677 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,13 @@ "version": "0.1.0", "dependencies": { "@adyen/adyen-web": "^6.31.1", - "axios": "^1.13.5", "axios-retry": "^3.5.0", "bootstrap": "^5.3", "iframe-resizer": "^4.3.9", "maska": "^2.1.1", "pinia": "^2.1.4", "pinia-plugin-persistedstate": "^2.2.0", - "uuid": "^9.0.1", + "uuid": "^14.0.0", "vee-validate": "^4.5.7", "vue": "^3.3.4", "vue-plugin-load-script": "^2.1.0", @@ -47,7 +46,7 @@ "@vue/test-utils": "^2.4.1", "@vue/vue3-jest": "^27.0.0-alpha.1", "axe-core": "^4.10.2", - "axios": "^1.13.5", + "axios": "^1.15.0", "axios-mock-adapter": "^1.21.5", "babel-jest": "^27.0.6", "concurrently": "^9.1.2", @@ -6567,13 +6566,15 @@ } }, "node_modules/axios": { - "version": "1.13.5", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" } }, "node_modules/axios-mock-adapter": { @@ -6618,6 +6619,16 @@ "is-retry-allowed": "^2.2.0" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/b4a": { "version": "1.6.7", "dev": true, @@ -20338,14 +20349,16 @@ } }, "node_modules/uuid": { - "version": "9.0.1", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/v8-to-istanbul": { diff --git a/package.json b/package.json index 43dabf71..b97d4e8b 100644 --- a/package.json +++ b/package.json @@ -21,14 +21,14 @@ }, "dependencies": { "@adyen/adyen-web": "^6.31.1", - "axios": "^1.13.5", + "axios": "^1.15.0", "axios-retry": "^3.5.0", "bootstrap": "^5.3", "iframe-resizer": "^4.3.9", "maska": "^2.1.1", "pinia": "^2.1.4", "pinia-plugin-persistedstate": "^2.2.0", - "uuid": "^9.0.1", + "uuid": "^14.0.0", "vee-validate": "^4.5.7", "vue": "^3.3.4", "vue-plugin-load-script": "^2.1.0", @@ -59,7 +59,7 @@ "@vue/test-utils": "^2.4.1", "@vue/vue3-jest": "^27.0.0-alpha.1", "axe-core": "^4.10.2", - "axios": "^1.13.5", + "axios": "^1.15.0", "axios-mock-adapter": "^1.21.5", "babel-jest": "^27.0.6", "concurrently": "^9.1.2", diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 5c056587..8bb745d4 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -14,7 +14,7 @@ import { useMainStore } from '@/store'; import { getPriceOfLineItems } from '@/helpers/price-calculator.js'; import coverageStatuses from '@/constants/coverage-statuses'; import coverageType from '@/constants/coverage-type'; -import { containsRecalParts } from '@/helpers/recal-helper'; +import { isRecalOrder } from '@/helpers/recal-helper'; jest.mock('@/helpers/layout-helper.js', () => jest.fn()); jest.mock('@/helpers/price-calculator.js', () => ({ @@ -34,7 +34,7 @@ jest.mock('@/helpers/text-helper', () => ({ })); jest.mock('@/helpers/recal-helper.js', () => ({ - containsRecalParts: jest.fn() + isRecalOrder: jest.fn() })); const SAFELITE_PROVIDER = 'Safelite'; @@ -345,7 +345,7 @@ describe('coverageStatement.vue', () => { }); test('returns true when a part in glassParts requires recalibration and recalibration has been added to order', () => { // Arrange - containsRecalParts.mockReturnValue(true); + isRecalOrder.mockReturnValue(true); const mainInitialState = { order: { lineItems: { diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index b4bf1614..51595359 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -149,7 +149,7 @@ import { getAvailableLineItems } from '@/helpers/cart-helper'; import coverageStatuses from '@/constants/coverage-statuses'; import coverageType from '@/constants/coverage-type'; import oemEndorsementModal from '@/layouts/coverage-statement/oem-endorsement-modal/oem-endorsement-modal.vue'; -import { containsRecalParts } from '@/helpers/recal-helper'; +import { isRecalOrder } from '@/helpers/recal-helper'; const RECAL_MODAL_REF_NAME = 'RecalModal'; const CANCEL_CLAIM_REF_NAME = 'CancelClaimModal'; @@ -308,13 +308,7 @@ export default { return this.mainStore.isUnverified; }, isADAS() { - const { glassParts } = useMainStore().order.lineItems; - const orderContainsRecalPart = containsRecalParts(glassParts); - return ( - glassParts !== null - && !!glassParts.find((part) => part.requiresRecalibration) - && orderContainsRecalPart - ); + return isRecalOrder(this.mainStore.order.lineItems); }, totalServicePrice() { return getPriceOfLineItems(this.baseServiceLineItems); diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index 3f34efd4..93cb9a38 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -294,7 +294,7 @@ export default { } else { glassList = getGlassList(glassPieces); workType = 'replacement'; - if (this.hasRecalibrationPart) { + if (this.hasRecalibrationPart && containsRecalParts(this.submittedOrder.lineItems)) { if (glassList === 'windshield') { workType = 'replacement and recalibration'; } @@ -630,8 +630,9 @@ export default { const repairOrReplace = this.submittedOrder.isRepair ? 'repair' : 'replace'; this.pushEventToGA('confirmation', 'safelite', `${mobileOrInshop}_${repairOrReplace}_${verifiedOrNotVerified}`, true); + const paymentMethodForAnalytics = analyticsPaymentTypeMap.get(this.payment.paymentMethod) ?? 'UNKNOWN'; + this.pushEventToGA('order_confirmed', 'payment_type_submitted', paymentMethodForAnalytics, true); if (this.payment.isPayInAdvance) { - const paymentMethodForAnalytics = analyticsPaymentTypeMap.get(this.payment.paymentMethod); this.pushEventToGA('payment_page', 'pia_successful', paymentMethodForAnalytics, true); } diff --git a/src/layouts/payment-method/review-dropdown/review-sections/vehicle-review/vehicle-review.vue b/src/layouts/payment-method/review-dropdown/review-sections/vehicle-review/vehicle-review.vue index b0500009..dcabe8df 100644 --- a/src/layouts/payment-method/review-dropdown/review-sections/vehicle-review/vehicle-review.vue +++ b/src/layouts/payment-method/review-dropdown/review-sections/vehicle-review/vehicle-review.vue @@ -8,6 +8,7 @@