diff --git a/.prettierrc b/.prettierrc
index 21209f49e..548cc94c4 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,4 +1,5 @@
{
"tabWidth": 4,
- "bracketSameLine": true
+ "bracketSameLine": true,
+ "printWidth": 100
}
\ No newline at end of file
diff --git a/jest.config.js b/jest.config.js
index 4af0d88cc..ded486df9 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -28,7 +28,7 @@ module.exports = {
testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"],
coverageThreshold: {
global: {
- statements: 80,
+ statements: 85,
// Got the go ahead from Mark to temporarily lower this. Taking out initialize component made the year,make,model and style coverage drop a bit. Once unit tests for license plate lookup, vin lookup and address lookup are in the coverage should go back up to 90
},
},
diff --git a/src/common-components/base-input-button/base-input-button.spec.js b/src/common-components/base-input-button/base-input-button.spec.js
index 3269c9b5a..646e271a2 100644
--- a/src/common-components/base-input-button/base-input-button.spec.js
+++ b/src/common-components/base-input-button/base-input-button.spec.js
@@ -1,9 +1,6 @@
import { shallowMount, mount } from "@vue/test-utils";
-import { EXPECTATION_FAILED } from "http-status-codes";
-import inputButtonWrapperMixin from "../../mixins/input-button-wrapper-mixin";
import baseInputButton from "./base-input-button";
-// TODO KO
describe("baseInputButton.vue", () => {
describe("general", () => {
describe("checkbox", () => {
@@ -63,25 +60,107 @@ describe("baseInputButton.vue", () => {
describe("mouse clicks", () => {
describe("checkbox", () => {
- test("clicked => correct event and value are emitted", async () => {
- // Arrange
- const { wrapper } = setupMocks({
- mockData: {
- propsData: {
- isMultiSelect: true,
- value: "X",
+ describe("clicked once", () => {
+ test("correct event and value are emitted", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "X",
+ },
},
- },
+ });
+
+ // Act
+ await wrapper.trigger("click");
+
+ // Assert
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(["X"]);
});
- // Act
- // await wrapper.trigger("mousedown.left");
- await wrapper.trigger("click");
+ test("input is checked", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "X",
+ },
+ },
+ });
+ const input = wrapper.find("input");
- // Assert
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual([
- "X",
- ]);
+ // Act
+ await wrapper.trigger("click");
+
+ // Assert
+ expect(input.element.checked).toBe(true);
+ });
+ });
+
+ describe("clicked twice", () => {
+ test("input is unchecked", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "X",
+ },
+ },
+ });
+ const input = wrapper.find("input");
+
+ // Act
+ await wrapper.trigger("click");
+ await wrapper.trigger("click");
+
+ // Assert
+ expect(input.element.checked).toBe(false);
+ });
+ });
+
+ describe("is initially checked, click once", () => {
+ test("input is unchecked", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "X",
+ modelValue: ["X"],
+ },
+ },
+ });
+ const input = wrapper.find("input");
+
+ // Act
+ await wrapper.trigger("click");
+
+ // Assert
+ expect(input.element.checked).toBe(false);
+ });
+
+ test("input is unchecked", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "X",
+ modelValue: ["X"],
+ },
+ },
+ });
+ const input = wrapper.find("input");
+
+ // Act
+ await wrapper.trigger("click");
+
+ // Assert
+ expect(input.element.checked).toBe(false);
+ });
});
});
@@ -102,24 +181,14 @@ describe("baseInputButton.vue", () => {
await wrapper.trigger("click");
// Assert
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(
- "X"
- );
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual("X");
});
});
});
- describe("keyboard navigation and events", () => {
+ describe("events", () => {
describe("checkbox", () => {
- test.todo(
- "focus on a checkbox => inputButtonClicked is not emitted"
- );
-
- test.todo(
- "blur from a checkbox => inputButtonClicked is not emitted"
- );
-
- test("change event fired from checkbox => inputButtonClicked is emitted with correct value", async () => {
+ test("change event fired from checkbox => update:modelValue is emitted with correct value", async () => {
// Arrange
const { wrapper } = setupMocks({
mockData: {
@@ -136,12 +205,10 @@ describe("baseInputButton.vue", () => {
await input.trigger("change");
// Assert
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual([
- "Hi",
- ]);
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(["Hi"]);
});
- test("focus and click space on a checkbox => inputButtonClicked is not emitted", async () => {
+ test("focus and click space on a checkbox => update:modelValue is not emitted", async () => {
// Arrange
const { wrapper } = setupMocks({
mockData: {
@@ -158,12 +225,10 @@ describe("baseInputButton.vue", () => {
await input.trigger("keypress", { key: "space" });
// Assert
- expect(wrapper.emitted()).not.toHaveProperty(
- "update:modelValue"
- );
+ expect(wrapper.emitted()).not.toHaveProperty("update:modelValue");
});
- test("focus and click enter on a checkbox => inputButtonClicked is emitted with correct value", async () => {
+ test("focus and click enter on a checkbox => update:modelValue is emitted with correct value", async () => {
// Arrange
const { wrapper } = setupMocks({
mockData: {
@@ -180,22 +245,12 @@ describe("baseInputButton.vue", () => {
await input.trigger("keypress", { key: "enter" });
// Assert
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual([
- "Hi",
- ]);
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(["Hi"]);
});
});
describe("radio", () => {
- test.todo(
- "focus on a radio button => inputButtonClicked is not emitted"
- );
-
- test.todo(
- "blur from a radio button => inputButtonClicked is not emitted"
- );
-
- test("focus and click space on a radio button => inputButtonClicked is emitted with correct value", async () => {
+ test("focus and click space on a radio button => update:modelValue is emitted with correct value", async () => {
// Arrange
const { wrapper } = setupMocks({
mockData: {
@@ -213,12 +268,10 @@ describe("baseInputButton.vue", () => {
// Assert
expect(wrapper.emitted()).toHaveProperty("update:modelValue");
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(
- "Hi"
- );
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual("Hi");
});
- test("focus and click enter on a radio button => inputButtonClicked is emitted with correct value", async () => {
+ test("focus and click enter on a radio button => update:modelValue is emitted with correct value", async () => {
// Arrange
const { wrapper } = setupMocks({
mockData: {
@@ -236,44 +289,751 @@ describe("baseInputButton.vue", () => {
// Assert
expect(wrapper.emitted()).toHaveProperty("update:modelValue");
- expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual(
- "Hi"
- );
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual("Hi");
});
});
});
describe("methods", () => {
- describe("handleEventAction", () => {});
+ describe("handleEventAction", () => {
+ describe("isMultiSelect", () => {
+ test("eventType === eventTypes.CLICK => do nothing", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("click", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).not.toHaveBeenCalled();
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ expect(wrapper.vm.handlePushClickEventToGACheck).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.ENTER => call handleClick and handlePushClickEventToGACheck", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("enter", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).toHaveBeenCalledWith("click");
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.CHANGE => call handleClick and handlePushClickEventToGACheck", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("change", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).toHaveBeenCalledWith("click");
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.MOUNT => do nothing", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("mount", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).not.toHaveBeenCalled();
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ expect(wrapper.vm.handlePushClickEventToGACheck).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.SPACE => do nothing", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("space", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).not.toHaveBeenCalled();
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ expect(wrapper.vm.handlePushClickEventToGACheck).not.toHaveBeenCalled();
+ });
+ });
+
+ describe("!isMultiSelect", () => {
+ test("eventType === eventTypes.CLICK => call correct methods", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("click", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).toHaveBeenCalledWith("click");
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.ENTER => call correct methods", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("enter", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).toHaveBeenCalledWith("click");
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.SPACE => call correct methods", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("space", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).toHaveBeenCalledWith("click");
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.CHANGE && !selectingInitiatesLoad => call correct methods", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("change", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleSelectionChange).not.toHaveBeenCalled();
+ expect(wrapper.vm.handleClick).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handlePushClickEventToGACheck).not.toHaveBeenCalled();
+ });
+
+ test("eventType === eventTypes.CHANGE && selectingInitiatesLoad => call correct methods", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ selectingInitiatesLoad: true,
+ },
+ },
+ });
+ wrapper.vm.handleClick = jest.fn();
+ wrapper.vm.handlePushClickEventToGACheck = jest.fn();
+ wrapper.vm.handleSelectionChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleEventAction("change", { myEvent: "test" });
+
+ // Assert
+ expect(wrapper.vm.handleSelectionChange).toHaveBeenCalledWith({
+ myEvent: "test",
+ });
+ expect(wrapper.vm.handleClick).not.toHaveBeenCalled();
+ expect(wrapper.vm.handlePushClickEventToGACheck).not.toHaveBeenCalled();
+ });
+ });
+ });
describe("handleSelectionChange", () => {
- test.todo("handleChange is called with valueToEmit");
+ const isCheckbox = [
+ [true, ["Hi"]],
+ [false, "Hi"],
+ ];
+ test.each(isCheckbox)(
+ "handleChange is called with valueToEmit",
+ (isMultiSelect, resultingValueToEmit) => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: isMultiSelect,
+ value: "Hi",
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(resultingValueToEmit);
+ }
+ );
describe("checkbox", () => {
- test.todo("modelValue is null => valueToEmit is correct value");
+ test("modelValue is null => valueToEmit is correct value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "Bello",
+ modelValue: null,
+ },
+ },
+ });
- test.todo(
- "modelValue is undefined => valueToEmit is correct value"
- );
- test.todo(
- "modelValue is empty => valueToEmit is correct value"
- );
+ wrapper.vm.handleChange = jest.fn();
- test.todo(
- "modelValue is not empty and does not contain this button's value => valueToEmit is correct value"
- );
- test.todo(
- "modelValue is not empty and does contain this button's value => valueToEmit is correct value"
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual(["Bello"]);
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(["Bello"]);
+ });
+
+ test("modelValue is undefined => valueToEmit is correct value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "Bello",
+ modelValue: undefined,
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual(["Bello"]);
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(["Bello"]);
+ });
+
+ test("modelValue is empty => valueToEmit is correct value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "Bello",
+ modelValue: [],
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual(["Bello"]);
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(["Bello"]);
+ });
+
+ test("modelValue is not empty and does not contain this button's value => valueToEmit is correct value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "Bello",
+ modelValue: ["Hello"],
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual(["Hello", "Bello"]);
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(["Hello", "Bello"]);
+ });
+
+ // testing when value is at start/middle/end of modelValue
+ const modelValues = [
+ [["Bello", "Hello", "Mello"]],
+ [["Hello", "Bello", "Mello"]],
+ [["Hello", "Mello", "Bello"]],
+ ];
+ test.each(modelValues)(
+ "modelValue is not empty and does contain this button's value => valueToEmit is correct value",
+ (modelValue) => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ value: "Bello",
+ modelValue: modelValue,
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual(["Hello", "Mello"]);
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith(["Hello", "Mello"]);
+ }
);
});
- describe("radio", () => {});
+ describe("radio", () => {
+ const modelValues = [null, undefined, "Bello", "Hello"];
+ test.each(modelValues)(
+ "regardless of modelValue, set valueToEmit to correct value",
+ (modelValue) => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ value: "Bello",
+ modelValue: modelValue,
+ },
+ },
+ });
+
+ wrapper.vm.handleChange = jest.fn();
+
+ // Act
+ wrapper.vm.handleSelectionChange({ myEvent: "TEST" });
+
+ // Assert
+ expect(wrapper.vm.valueToEmit).toEqual("Bello");
+ expect(wrapper.vm.handleChange).toHaveBeenCalledWith("Bello");
+ }
+ );
+ });
});
describe("handleClick", () => {
- test.todo("handleSelectChange is also called");
+ const isCheckbox = [[true], [false]];
+ test.each(isCheckbox)("handleSelectionChange is also called", async (isMultiSelect) => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: isMultiSelect,
+ value: "Bello",
+ },
+ },
+ });
- test.todo("inputButtonClicked is emitted with valueToEmit");
+ wrapper.vm.handleSelectionChange = jest.fn();
+ await wrapper.setData({ valueToEmit: "HELLO WORLD" });
+
+ // Act
+ wrapper.vm.handleClick({ myEvent: "Test" });
+
+ // Assert
+ expect(wrapper.vm.handleSelectionChange).toHaveBeenCalledWith({ myEvent: "Test" });
+ });
+
+ test.each(isCheckbox)(
+ "update:modelValue is emitted with valueToEmit",
+ async (isMultiSelect) => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: isMultiSelect,
+ value: "Bello",
+ },
+ },
+ });
+
+ wrapper.vm.handleSelectionChange = jest.fn();
+ await wrapper.setData({ valueToEmit: "HELLO WORLD" });
+
+ // Act
+ wrapper.vm.handleClick({ myEvent: "Test" });
+
+ // Assert
+ expect(wrapper.emitted()["update:modelValue"][0][0]).toEqual("HELLO WORLD");
+ }
+ );
+ });
+
+ describe("handlePushClickEventToGACheck", () => {
+ test("called from click or click-like event => call pushClickEventToGA", () => {
+ // Arrange
+ const { wrapper } = setupMocks({});
+ wrapper.vm.pushEventToGA = jest.fn();
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck("click");
+
+ // Assert
+ expect(wrapper.vm.pushEventToGA).toHaveBeenCalledTimes(1);
+ });
+
+ describe("called from keyboard navigation/button-question-focus-helper", () => {
+ test("valueToEmit is not null, is a checked radio without selectingInitiatesLoad, and the last value pushed to GA was not this input button's value => pushClickEventToGA is called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ modelValue: "value2",
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(true);
+ expect(wrapper.find("input").attributes().type).toBe("radio")
+ expect(wrapper.vm.pushEventToGA).toHaveBeenCalled();
+ });
+
+ test("valueToEmit is not null, is a checked radio with selectingInitiatesLoad, and the last value pushed to GA was not this input button's value => pushClickEventToGA is called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ modelValue: "value2",
+ value: "value2",
+ selectingInitiatesLoad: true,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(true);
+ expect(wrapper.find("input").attributes().type).toBe("radio")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+
+ test("valueToEmit is not null, is a checkbox that's checked, and the last value pushed to GA was not this input button's value => pushClickEventToGA is not called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ modelValue: ["value2"],
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(true);
+ expect(wrapper.find("input").attributes().type).toBe("checkbox")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+
+ test("valueToEmit is null => pushClickEventToGA not called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ modelValue: "value2",
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: null,
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(true);
+ expect(wrapper.find("input").attributes().type).toBe("radio")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+
+ test("valueToEmit is not null, is an unchecked checkbox, and the last value pushed to GA was not this input button's value => pushClickEventToGA is not called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: true,
+ modelValue: ["value1"],
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(false);
+ expect(wrapper.find("input").attributes().type).toBe("checkbox")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+
+ test("is an unchecked radio => pushClickEventToGA not called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ modelValue: "value1",
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value1",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(false);
+ expect(wrapper.find("input").attributes().type).toBe("radio")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+
+ test("lastValuePushedToGa is the same as this input button's value => pushClickEventToGA not called", async () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ isMultiSelect: false,
+ modelValue: "value2",
+ value: "value2",
+ selectingInitiatesLoad: false,
+ },
+ },
+ });
+ wrapper.vm.pushEventToGA = jest.fn();
+ await wrapper.setData({
+ valueToEmit: "value2",
+ lastValuePushedToGa: "value2",
+ });
+
+ // Act
+ wrapper.vm.handlePushClickEventToGACheck();
+
+ // Assert
+ expect(wrapper.vm.isChecked).toBe(true);
+ expect(wrapper.find("input").attributes().type).toBe("radio")
+ expect(wrapper.vm.pushEventToGA).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe("pushClickEventToGA", () => {
+ test("pushEventToGA is called correctly", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ value: "Bello",
+ setLastValuePushedToGa: jest.fn(),
+ },
+ },
+ });
+
+ wrapper.setData({
+ GaActions: {
+ CLICKED: "Clicked",
+ },
+ });
+
+ // Act
+ wrapper.vm.pushClickEventToGA();
+
+ // Assert
+ expect(wrapper.vm.pushEventToGA).toHaveBeenCalledWith(
+ "myPage",
+ "Clicked",
+ "Bello",
+ true,
+ undefined
+ );
+ expect(wrapper.vm.setLastValuePushedToGa).toHaveBeenCalledWith("Bello");
+ });
+
+ test("pass in a value => setLastValuePushedToGa is called with value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ setLastValuePushedToGa: jest.fn()
+ }
+ }
+ });
+
+ // Act
+ wrapper.vm.pushClickEventToGA("hi there");
+
+ // Assert
+ expect(wrapper.vm.setLastValuePushedToGa).toHaveBeenCalledWith("hi there")
+ });
+
+ test("don't pass in a value => setLastValuePushedToGa is called with input button's value", () => {
+ // Arrange
+ const { wrapper } = setupMocks({
+ mockData: {
+ propsData: {
+ value: "hello there",
+ setLastValuePushedToGa: jest.fn()
+ }
+ }
+ });
+
+ // Act
+ wrapper.vm.pushClickEventToGA();
+
+ // Assert
+ expect(wrapper.vm.setLastValuePushedToGa).toHaveBeenCalledWith("hello there")
+ });
});
});
@@ -416,9 +1176,7 @@ describe("baseInputButton.vue", () => {
// Assert
const inputElement = wrapper.find("input");
expect(wrapper.vm.buttonId).toBe("my-test-name-Aaa-BBB-CcC");
- expect(inputElement.attributes().id).toBe(
- "my-test-name-Aaa-BBB-CcC"
- );
+ expect(inputElement.attributes().id).toBe("my-test-name-Aaa-BBB-CcC");
});
test("groupName and value combo yield correct id for input button with number value", () => {
@@ -473,189 +1231,9 @@ describe("baseInputButton.vue", () => {
});
});
});
-
- describe("integration testing", () => {
- describe("checkbox", () => {
- test("click on both => both are selected", async () => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: true,
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
- expect(inputButtonOne.vm.isMultiSelect).toBe(true);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(true);
- expect(wrapper.vm.value).toEqual([]);
-
- await inputButtonOne.find("input").trigger("click");
- await inputButtonTwo.find("input").trigger("click");
-
- // Assert
- expect(wrapper.vm.value).toEqual(["value1", "value2"]);
- });
-
- test("click input 1, 2, 1 => only input 2 selected", async () => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: true,
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
- expect(inputButtonOne.vm.isMultiSelect).toBe(true);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(true);
- expect(wrapper.vm.value).toEqual([]);
-
- await inputButtonOne.find("input").trigger("click");
- await inputButtonTwo.find("input").trigger("click");
- await inputButtonOne.find("input").trigger("click");
-
- // Assert
- expect(wrapper.vm.value).toEqual(["value2"]);
- });
-
- const defaultCheckedCases = [
- [["value2"], false, true],
- [["value1", "value2"], true, true],
- [["value1"], true, false],
- [[], false, false]
- ]
- test.each(defaultCheckedCases)("initial value is %s => correct input buttons are selected", async (modelValue, isInputButtonOneChecked, isInputButtonTwoChecked) => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: true,
- initialValue: modelValue
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputs = wrapper.findAll("input");
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
-
- // Assert
- expect(inputButtonOne.vm.isMultiSelect).toBe(true);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(true);
- expect(inputs[0].element.checked).toBe(isInputButtonOneChecked);
- expect(inputs[1].element.checked).toBe(isInputButtonTwoChecked);
- expect(wrapper.vm.value).toEqual(modelValue);
- });
- });
-
- describe("radio", () => {
- test("click on both => last clicked is selected", async () => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: false,
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
- expect(inputButtonOne.vm.isMultiSelect).toBe(false);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(false);
- expect(wrapper.vm.value).toEqual("");
-
- await inputButtonOne.find("input").trigger("click");
- await inputButtonTwo.find("input").trigger("click");
-
- // Assert
- expect(wrapper.vm.value).toEqual("value2");
- });
-
- test("click input 1, 2, 1 => input 1 is selected", async () => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: false,
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
- expect(inputButtonOne.vm.isMultiSelect).toBe(false);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(false);
- expect(wrapper.vm.value).toEqual("");
-
- await inputButtonOne.find("input").trigger("click");
- await inputButtonTwo.find("input").trigger("click");
- await inputButtonOne.find("input").trigger("click");
-
- // Assert
- expect(wrapper.vm.value).toEqual("value1");
- });
-
- const defaultCheckedCases = [
- ["", false, false],
- ["value1", true, false],
- ["value2", false, true],
- [[], false, false]
- ]
- test.each(defaultCheckedCases)("initial value is %s => correct input buttons are selected", async (modelValue, isInputButtonOneChecked, isInputButtonTwoChecked) => {
- // Arrange
- const { wrapper } = setupBaseInputButtonWrapper({
- mockData: {
- isMultiSelect: false,
- initialValue: modelValue
- },
- });
-
- // Act
- const buttonWrappers = wrapper.findAllComponents({
- name: "baseInputButtonWrapper",
- });
- const inputs = wrapper.findAll("input");
- const inputButtonOne = buttonWrappers.at(0);
- const inputButtonTwo = buttonWrappers.at(1);
-
- // Assert
- expect(inputButtonOne.vm.isMultiSelect).toBe(false);
- expect(inputButtonTwo.vm.isMultiSelect).toBe(false);
- expect(inputs[0].element.checked).toBe(isInputButtonOneChecked);
- expect(inputs[1].element.checked).toBe(isInputButtonTwoChecked);
- expect(wrapper.vm.value).toEqual(modelValue);
- });
- })
- });
});
function setupMocks({ mockData = {}, shouldShallowMount = true }) {
- const baseInputButtonWrapper = {
- components: { baseInputButton },
- template: '