From 0fdda5b4a2af62fee96b5080ea0c92017bcc6253 Mon Sep 17 00:00:00 2001 From: Katie Date: Mon, 18 Jul 2022 11:28:34 -0400 Subject: [PATCH] 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