diff --git a/package-lock.json b/package-lock.json index 2b541b385..00fc7673a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@iframe-resizer/child": "^5.3.3", + "axios": "^0.23.0", "bootstrap": "^5.3.3", "core-js": "^3.38.1", "http-status-codes": "^2.3.0", @@ -37,9 +38,6 @@ "@vue/eslint-config-prettier": "^9.0.0", "@vue/test-utils": "^2.4.6", "@vue/vue3-jest": "^27.0.0", - "axios": "^1.8.4", - "axios-mock-adapter": "^2.1.0", - "axios-retry": "^4.5.0", "dotenv-safe": "^9.1.0", "eslint": "8.57", "eslint-plugin-prettier": "^5.2.1", @@ -5414,82 +5412,12 @@ } }, "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", - "dev": true, + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", + "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios-mock-adapter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-2.1.0.tgz", - "integrity": "sha512-AZUe4OjECGCNNssH8SOdtneiQELsqTsat3SQQCWLPjN436/H+L9AjWfV7bF+Zg/YL9cgbhrz5671hoh+Tbn98w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - }, - "peerDependencies": { - "axios": ">= 0.17.0" - } - }, - "node_modules/axios-mock-adapter/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/axios-retry": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz", - "integrity": "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "is-retry-allowed": "^2.2.0" - }, - "peerDependencies": { - "axios": "0.x || 1.x" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "follow-redirects": "^1.14.4" } }, "node_modules/babel-jest": { @@ -8077,22 +8005,6 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -9315,7 +9227,6 @@ "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, "funding": [ { "type": "individual", @@ -9783,22 +9694,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -10614,19 +10509,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-retry-allowed": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", - "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -16365,13 +16247,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", diff --git a/package.json b/package.json index fb65152d5..c63d8b5e8 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,6 @@ "prettier": "^3.3.3", "sass": "^1.77.8", "sass-loader": "^8.0.2", - "sqlite": "^5.1.1", - "sqlite3": "^5.1.7", "typescript": "^4.9.5" }, "eslintConfig": { diff --git a/playwright-tests/pages/ServicePackagesPage.ts b/playwright-tests/pages/ServicePackagesPage.ts index 3f8bb0d68..35872828b 100644 --- a/playwright-tests/pages/ServicePackagesPage.ts +++ b/playwright-tests/pages/ServicePackagesPage.ts @@ -80,7 +80,6 @@ export class ServicePackagesPage extends BasePage { } await this.page.waitForTimeout(3000); await this.closeButton.click(); - } else { await this.skipQuoteEmailButton.click(); } diff --git a/playwright-tests/tests/0000__M.test.ts b/playwright-tests/tests/0000__M.test.ts index d3022f67c..b51c8dd5e 100644 --- a/playwright-tests/tests/0000__M.test.ts +++ b/playwright-tests/tests/0000__M.test.ts @@ -169,8 +169,7 @@ async function runWorkflow(page: Page, testCase: TestCase) { //============================= TEST WORKFLOW STEPS ============================= // Use Environment Variable to decide whether or not we want to skip content site aka home page - - if (process.env.SKIP_CONTENT_SITE == "false") { + if (process.env.SKIP_CONTENT_SITE == "false") { await test.step('HomePage >> Lets Get Started', async () => { let homePage = testCase.pages.homePage; console.log(`Customer for this test: ${customerDetails?.firstName} ${customerDetails?.lastName}`); diff --git a/src/digital-components/salesforce-webchat/salesforce-helper-qa.js b/src/digital-components/salesforce-webchat/salesforce-helper-qa.js index ef08d42de..46ae49359 100644 --- a/src/digital-components/salesforce-webchat/salesforce-helper-qa.js +++ b/src/digital-components/salesforce-webchat/salesforce-helper-qa.js @@ -52,6 +52,7 @@ export function initializeSalesforceWebchatForQa() { }; if (!window.embedded_svc) { + console.log("no embedded svc found"); var s = document.createElement("script"); s.setAttribute( "src", @@ -62,6 +63,7 @@ export function initializeSalesforceWebchatForQa() { }; document.body.appendChild(s); } else { + console.log("embedded svc found"); initESW("https://service.force.com"); } } diff --git a/src/digital-components/salesforce-webchat/salesforce-helper.spec.js b/src/digital-components/salesforce-webchat/salesforce-helper.spec.js new file mode 100644 index 000000000..aac2869f1 --- /dev/null +++ b/src/digital-components/salesforce-webchat/salesforce-helper.spec.js @@ -0,0 +1,43 @@ +import * as salesforceWebchatHelperdev from "./salesforce-helper-dev"; +import * as salesforceWebchatHelperqa from "./salesforce-helper-qa"; +import * as salesforceWebchatHelperprod from "./salesforce-helper-prod"; + +const mockEmbeddedSvc = { + settings: {}, + init: jest.fn(), + testFlag: true, +}; + +describe("Salesforce Webchat Helper Tests", () => { + describe("Files and exposed methods exist", () => { + it("exposes initialization methods", () => { + expect(typeof salesforceWebchatHelperdev.initializeSalesforceWebchatForDev).toBe( + "function" + ); + expect(typeof salesforceWebchatHelperqa.initializeSalesforceWebchatForQa).toBe( + "function" + ); + expect(typeof salesforceWebchatHelperprod.initializeSalesforceWebchatForProd).toBe( + "function" + ); + }); + }), + describe("Custom code added correctly", () => { + it("defines a local variable 'embedded_svc' in the initESW method", () => { + mockEmbeddedSvc.testFlag = "dev"; + window.embedded_svc = mockEmbeddedSvc; + salesforceWebchatHelperdev.initializeSalesforceWebchatForDev(); + expect(embedded_svc.testFlag).toBe("dev"); + + mockEmbeddedSvc.testFlag = "qa"; + window.embedded_svc = mockEmbeddedSvc; + salesforceWebchatHelperqa.initializeSalesforceWebchatForQa(); + expect(embedded_svc.testFlag).toBe("qa"); + + mockEmbeddedSvc.testFlag = "prod"; + window.embedded_svc = mockEmbeddedSvc; + salesforceWebchatHelperprod.initializeSalesforceWebchatForProd(); + expect(embedded_svc.testFlag).toBe("prod"); + }); + }); +}); diff --git a/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js b/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js new file mode 100644 index 000000000..178e431cc --- /dev/null +++ b/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js @@ -0,0 +1,42 @@ +import { shallowMount } from "@vue/test-utils"; +import salesforceWebchat from "./salesforce-webchat.vue"; +import * as devHelper from "./salesforce-helper-dev"; +import * as qaHelper from "./salesforce-helper-qa"; +import * as prodHelper from "./salesforce-helper-prod"; + +describe("salesforceWebchat.vue", () => { + it("renders correctly", () => { + const wrapper = shallowMount(salesforceWebchat); + expect(wrapper.exists()).toBe(true); + }); + + it("has the correct default data", () => { + const wrapper = shallowMount(salesforceWebchat); + expect(wrapper.vm.$data).toEqual({}); + }); + + it("has the correct default props", () => { + const wrapper = shallowMount(salesforceWebchat); + expect(wrapper.props().hideSalesforceWebchatLaunchButton).toBe(false); + }); + + it("calls the correct initialization function based on environment", () => { + process.env.VUE_APP_CURRENT_ENVIRONMENT = "Prod"; + let wrapper = shallowMount(salesforceWebchat); + mockProd = jest.spyOn(prodHelper, "initializeSalesforceWebchatForProd"); + wrapper.vm.initializeSalesforceWebchat(); + expect(mockProd).toHaveBeenCalled(); + + process.env.VUE_APP_CURRENT_ENVIRONMENT = "QA"; + wrapper = shallowMount(salesforceWebchat); + mockQa = jest.spyOn(qaHelper, "initializeSalesforceWebchatForQa"); + wrapper.vm.initializeSalesforceWebchat(); + expect(mockQa).toHaveBeenCalled(); + + process.env.VUE_APP_CURRENT_ENVIRONMENT = "Dev"; + wrapper = shallowMount(salesforceWebchat); + mockDev = jest.spyOn(devHelper, "initializeSalesforceWebchatForDev"); + wrapper.vm.initializeSalesforceWebchat(); + expect(mockDev).toHaveBeenCalled(); + }); +}); diff --git a/src/digital-components/salesforce-webchat/salesforce-webchat.vue b/src/digital-components/salesforce-webchat/salesforce-webchat.vue index 58da503fa..95c1348eb 100644 --- a/src/digital-components/salesforce-webchat/salesforce-webchat.vue +++ b/src/digital-components/salesforce-webchat/salesforce-webchat.vue @@ -23,24 +23,33 @@ export default { // Load in script from salesforce CDN const script = document.createElement("script"); script.src = "https://service.force.com/embeddedservice/5.0/esw.min.js"; - script.onload = () => { + script.onload = this.initializeSalesforceWebchat; + document.body.appendChild(script); + }, + methods: { + initializeSalesforceWebchat() { + console.log( + "process.env.VUE_APP_CURRENT_ENVIRONMENT", + process.env.VUE_APP_CURRENT_ENVIRONMENT + ); switch (process.env.VUE_APP_CURRENT_ENVIRONMENT) { case "Prod": + console.log("Prod"); initializeSalesforceWebchatForProd(); break; case "QA": case "SysTest": + console.log("QA"); initializeSalesforceWebchatForQa(); break; case "Dev": case "Localhost": + console.log("Dev"); initializeSalesforceWebchatForDev(); break; } - }; - document.body.appendChild(script); + }, }, - methods: {}, computed: {}, components: {}, }; diff --git a/src/fmg-components/funnel-header/funnel-header.vue b/src/fmg-components/funnel-header/funnel-header.vue index 716ce29d9..bf4f17ec1 100644 --- a/src/fmg-components/funnel-header/funnel-header.vue +++ b/src/fmg-components/funnel-header/funnel-header.vue @@ -70,8 +70,8 @@ export default { components: { alert, menuModal, - progressBar, salesforceWebchat, + progressBar, }, mounted() { // Check if alert event is on the bus diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 1b57ee068..14a87bf45 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -341,7 +341,7 @@ export default { false ); if (this.isHeavyTruck) { - closestShops = await this.findClosestApplicableShops( + const closestShops = await this.findClosestApplicableShops( this.serviceZipCode, this.carId );