From c6055d569cb19e6cdbcbfe0dff3800dfa42b977d Mon Sep 17 00:00:00 2001 From: Jeremy Zimmerman Date: Thu, 17 Nov 2022 14:23:05 -0500 Subject: [PATCH] Experiment updates. --- src/mixins/experiment-mixin.js | 6 +- src/mixins/experiment-mixin.spec.js | 155 ++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 3 deletions(-) create mode 100644 src/mixins/experiment-mixin.spec.js diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js index 61561239..acf1b23e 100644 --- a/src/mixins/experiment-mixin.js +++ b/src/mixins/experiment-mixin.js @@ -3,14 +3,14 @@ import { useMainStore } from "@/store"; export default { methods: { hasSettingEqualTo(settingName, settingValue) { - return useMainStore.experimentSettings[settingName] == settingValue; + return useMainStore().experimentSettings[settingName] == settingValue; }, hasSetting(settingName) { - return Object.hasOwn( useMainStore.experimentSettings, settingName); + return Object.hasOwn( useMainStore().experimentSettings, settingName); }, getSettingValue(settingName) { return this.hasSetting(settingName) - ? useMainStore.experimentSettings[settingName] + ? useMainStore().experimentSettings[settingName] : null; }, }, diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js new file mode 100644 index 00000000..6267a3e4 --- /dev/null +++ b/src/mixins/experiment-mixin.spec.js @@ -0,0 +1,155 @@ +import experimentMixin from "@/mixins/experiment-mixin"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { useMainStore } from "@/store"; + +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 store = useMainStore(); + const mocks = getMountOptions({}); + + const testExperimentSettings = { + Setting1: "Value1", + Setting2: "Value2", + Setting3: "Value3", + Setting4: "Value1", + Setting5: "Value2", + Setting6: "Value3", + }; + + const mockExperimentData = [ + { + settings: experimentSettings ?? testExperimentSettings, + variationName: "test", + universeName: "testUniverse", + }, + ]; + + store.applicationUser.experiments = mockExperimentData; + + const mockComponent = { + template: "
", + mixins: [experimentMixin], + }; + + const wrapper = shallowMount(mockComponent, mocks); + + return { wrapper }; +}