From 453d086a1dffd0f983bb56d3dcf4c7c797d08563 Mon Sep 17 00:00:00 2001 From: Katie Date: Fri, 15 Jul 2022 12:14:39 -0400 Subject: [PATCH 1/4] CSR-666 Add experiment-mixin --- src/mixins/experiment-mixin.js | 13 +++++++++++++ src/mixins/experiment-mixin.spec.js | 0 2 files changed, 13 insertions(+) create mode 100644 src/mixins/experiment-mixin.js create mode 100644 src/mixins/experiment-mixin.spec.js diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js new file mode 100644 index 000000000..de6edd79c --- /dev/null +++ b/src/mixins/experiment-mixin.js @@ -0,0 +1,13 @@ +export default { + methods: { + hasSettingEqualTo(settingName, settingValue) { + + }, + hasSetting(settingName) { + + }, + getSettingValue(settingName) { + + } + }, +} \ No newline at end of file diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js new file mode 100644 index 000000000..e69de29bb From 0fdda5b4a2af62fee96b5080ea0c92017bcc6253 Mon Sep 17 00:00:00 2001 From: Katie Date: Mon, 18 Jul 2022 11:28:34 -0400 Subject: [PATCH 2/4] CSR-666 Add methods to experiment-mixin --- src/mixins/experiment-mixin.js | 6 +- src/mixins/experiment-mixin.spec.js | 154 ++++++++++++++++++++++++++++ src/store/index.js | 2 + 3 files changed, 159 insertions(+), 3 deletions(-) diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js index de6edd79c..bc35c765e 100644 --- a/src/mixins/experiment-mixin.js +++ b/src/mixins/experiment-mixin.js @@ -1,13 +1,13 @@ export default { methods: { hasSettingEqualTo(settingName, settingValue) { - + return this.$store.getters.experimentSettings[settingName] === settingValue; }, hasSetting(settingName) { - + return this.$store.getters.experimentSettings.hasOwnProperty(settingName); }, getSettingValue(settingName) { - + return this.hasSetting(settingName) ? this.$store.getters.experimentSettings[settingName] : null; } }, } \ No newline at end of file diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index e69de29bb..f36ce3cba 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -0,0 +1,154 @@ +import experimentMixin from "@/mixins/experiment-mixin"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import store from "@/store"; + +jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ + navigateToHeritageFunnel: jest.fn() +})); + +describe("experiment-mixin", () => { + describe("hasSettingEqualTo", () => { + test("setting exists and value matches => return true", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.hasSettingEqualTo("Setting2", "Value2"); + + // Assert + expect(result).toEqual(true); + }); + + test("setting exists and value does not match => return false", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.hasSettingEqualTo("Setting2", "Value3"); + + // Assert + expect(result).toEqual(false); + }); + + test("setting does not exist => return false", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.hasSettingEqualTo("SettingBoogly", "Woogly"); + + // Assert + expect(result).toEqual(false); + }); + + test("there are no settings => return false", () => { + // Arrange + const { wrapper } = setupMocks({ experimentSettings: {} }); + + // Act + const result = wrapper.vm.hasSettingEqualTo("Setting2", "Value3"); + + // Assert + expect(result).toEqual(false); + }); + }); + + describe("hasSetting", () => { + test("has setting => return true", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.hasSetting("Setting4"); + + // Assert + expect(result).toEqual(true); + }); + + test("does not have setting => return false", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.hasSetting("BooglyWoogly"); + + // Assert + expect(result).toEqual(false); + }); + + test("experimentSettings is empty => return false", () => { + // Arrange + const { wrapper } = setupMocks({ experimentSettings: {} }); + + // Act + const result = wrapper.vm.hasSetting("Setting4"); + + // Assert + expect(result).toEqual(false); + }); + }); + + describe("getSettingValue", () => { + test("has setting => return correct value", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.getSettingValue("Setting3"); + + // Assert + expect(result).toEqual("Value3") + }); + + test("does not have setting => return null", () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const result = wrapper.vm.getSettingValue("Hello"); + + // Assert + expect(result).toBeNull(); + }); + + test("experimentSettings is empty => return null", () => { + // Arrange + const { wrapper } = setupMocks({ experimentSettings: {} }); + + // Act + const result = wrapper.vm.getSettingValue("Hello"); + + // Assert + expect(result).toBeNull(); + }); + }); +}); + +function setupMocks({ experimentSettings }) { + const defaultExperimentSettings = experimentSettings ?? { + "Setting1": "Value1", + "Setting2": "Value2", + "Setting3": "Value3", + "Setting4": "Value1", + "Setting5": "Value2", + "Setting6": "Value3" + } + + const mocks = getMountOptions({ + store: { + getters: { + experimentSettings: defaultExperimentSettings + } + }, + }); + + const mockComponent = { + template: "
", + mixins: [experimentMixin] + }; + + const wrapper = shallowMount(mockComponent, mocks); + + return { wrapper }; +} \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index bac95e3cf..90932c8bb 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -69,6 +69,7 @@ const getDefaultState = () => { saveQuoteId: null, crmCustomerId: null, lastPageVisited: null, + experiments: [] }, } }; @@ -333,6 +334,7 @@ export const getters = { applicationUser: (state) => state.applicationUser, order: (state) => state.order, payment: (state) => state.order.payment, + experimentSettings: (state) => state.applicationUser.experiments.map(x => x.settings).reduce((r, c) => Object.assign(r, c), {}) } // Export Actions From fd9267593b1285c32b68223057af8038c263c6ab Mon Sep 17 00:00:00 2001 From: Katie Date: Mon, 18 Jul 2022 11:30:16 -0400 Subject: [PATCH 3/4] CSR-666 Cleanup --- src/mixins/experiment-mixin.spec.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index f36ce3cba..6ca0bb7fc 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -1,11 +1,6 @@ import experimentMixin from "@/mixins/experiment-mixin"; import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; -import store from "@/store"; - -jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ - navigateToHeritageFunnel: jest.fn() -})); describe("experiment-mixin", () => { describe("hasSettingEqualTo", () => { From 79072bb3b5db86d2225337f3a04a3254765b986c Mon Sep 17 00:00:00 2001 From: Katie Date: Mon, 18 Jul 2022 12:08:07 -0400 Subject: [PATCH 4/4] CSR-666 Import store, cleanup --- src/mixins/experiment-mixin.js | 8 +++++--- src/mixins/experiment-mixin.spec.js | 17 ++++++++--------- src/mixins/vin-pages-mixin.spec.js | 9 --------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js index bc35c765e..8816b1f0b 100644 --- a/src/mixins/experiment-mixin.js +++ b/src/mixins/experiment-mixin.js @@ -1,13 +1,15 @@ +import store from "@/store"; + export default { methods: { hasSettingEqualTo(settingName, settingValue) { - return this.$store.getters.experimentSettings[settingName] === settingValue; + return store.getters.experimentSettings[settingName] === settingValue; }, hasSetting(settingName) { - return this.$store.getters.experimentSettings.hasOwnProperty(settingName); + return store.getters.experimentSettings.hasOwnProperty(settingName); }, getSettingValue(settingName) { - return this.hasSetting(settingName) ? this.$store.getters.experimentSettings[settingName] : null; + return this.hasSetting(settingName) ? store.getters.experimentSettings[settingName] : null; } }, } \ No newline at end of file diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index 6ca0bb7fc..b3d68d1b6 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -1,6 +1,7 @@ import experimentMixin from "@/mixins/experiment-mixin"; import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import store from "@/store"; describe("experiment-mixin", () => { describe("hasSettingEqualTo", () => { @@ -121,22 +122,20 @@ describe("experiment-mixin", () => { }); function setupMocks({ experimentSettings }) { - const defaultExperimentSettings = experimentSettings ?? { + const mocks = getMountOptions({}); + + const testExperimentSettings = { "Setting1": "Value1", "Setting2": "Value2", "Setting3": "Value3", "Setting4": "Value1", "Setting5": "Value2", "Setting6": "Value3" - } + }; - const mocks = getMountOptions({ - store: { - getters: { - experimentSettings: defaultExperimentSettings - } - }, - }); + store.getters = { + experimentSettings: experimentSettings ?? testExperimentSettings + }; const mockComponent = { template: "
", diff --git a/src/mixins/vin-pages-mixin.spec.js b/src/mixins/vin-pages-mixin.spec.js index 62d03971b..0ef66226f 100644 --- a/src/mixins/vin-pages-mixin.spec.js +++ b/src/mixins/vin-pages-mixin.spec.js @@ -895,23 +895,14 @@ function setupMocks({ partsOrQuestions = [] }) { router: { navigate: jest.fn() }, - }); const mockVinComponent = { components: { loadingModal }, template: '', - // render() { - // return '
' - // }, mixins: [vinPagesMixin, baseMixin.baseMixin] }; - // const mockVinComponent = Vue.component("mockcomponent", { - // template: '', - // mixins: [vinPagesMixin, baseMixin.baseMixin] - // }) - const wrapper = shallowMount(mockVinComponent, mocks); wrapper.vm.$refs.loadingModal.showModal = jest.fn();