CSR-762 button-question-focus-helper tests
This commit is contained in:
parent
b77aded229
commit
33faaac7bc
1 changed files with 251 additions and 0 deletions
251
src/helpers/button-question-focus-helper.spec.js
Normal file
251
src/helpers/button-question-focus-helper.spec.js
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
import {
|
||||
handleAnyComponentFocus,
|
||||
handleButtonComponentFocus,
|
||||
handleInputComponentBlur,
|
||||
} from "@/helpers/button-question-focus-helper";
|
||||
|
||||
describe("buttonQuestionFocusHelper", () => {
|
||||
let onButtonQuestionLostFocusCallbackOne = jest.fn();
|
||||
let onButtonQuestionLostFocusCallbackTwo = jest.fn();
|
||||
|
||||
let focusOnInputInGroupOne;
|
||||
let blurFromInputInGroupOne;
|
||||
let focusOnInputInGroupTwo;
|
||||
let blurFromInputInGroupTwo;
|
||||
|
||||
let focusOnNonRadioCheckboxElement;
|
||||
|
||||
beforeEach(() => {
|
||||
onButtonQuestionLostFocusCallbackOne = jest.fn();
|
||||
onButtonQuestionLostFocusCallbackTwo = jest.fn();
|
||||
|
||||
// Sanity check
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
focusOnInputInGroupOne = () => {
|
||||
handleButtonComponentFocus({
|
||||
groupName: "group1",
|
||||
});
|
||||
};
|
||||
|
||||
blurFromInputInGroupOne = () => {
|
||||
handleInputComponentBlur({
|
||||
groupName: "group1",
|
||||
onButtonQuestionLostFocusCallback: onButtonQuestionLostFocusCallbackOne,
|
||||
});
|
||||
};
|
||||
|
||||
focusOnInputInGroupTwo = () => {
|
||||
handleButtonComponentFocus({
|
||||
groupName: "group2",
|
||||
});
|
||||
};
|
||||
|
||||
blurFromInputInGroupTwo = () => {
|
||||
handleInputComponentBlur({
|
||||
groupName: "group2",
|
||||
onButtonQuestionLostFocusCallback: onButtonQuestionLostFocusCallbackTwo,
|
||||
});
|
||||
};
|
||||
|
||||
focusOnNonRadioCheckboxElement = () => {
|
||||
handleAnyComponentFocus({
|
||||
target: {
|
||||
type: "nonRadioCheckbox",
|
||||
},
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
test("focus on input => no callbacks were called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on input, then focus on input in same group => no callbacks are called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 1
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on non-radio/checkbox, focus on input => no callbacks are called", () => {
|
||||
// focus on non-radio/checkbox
|
||||
focusOnNonRadioCheckboxElement();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on input in group 1, then focus on input in different group => callback for group 1 is called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in different group
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupTwo();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on input in group 1, focus on input in same group, then focus on input in different group => callback for group 1 is called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in same group
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in different group
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupTwo();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on input in group 1, focus on non-radio/checkbox element => callback from group 1 is called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 2
|
||||
blurFromInputInGroupOne();
|
||||
focusOnNonRadioCheckboxElement();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("focus on input in group 1, focus on input in group 2, focus on non-radio/checkbox element => both callbacks are called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 2
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupTwo();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(0);
|
||||
|
||||
// focus on non-radio/checkbox
|
||||
blurFromInputInGroupTwo();
|
||||
focusOnNonRadioCheckboxElement();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test("focus on input in group 1, focus on input in group 2, focus on input in group 1 => both callbacks are called", () => {
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 2
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupTwo();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(0);
|
||||
|
||||
// focus on input in group 1
|
||||
blurFromInputInGroupTwo();
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test("go back and forth a lot => correct callbacks are called at the right time", () => {
|
||||
// Arrange/Act
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).not.toHaveBeenCalled();
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 2
|
||||
blurFromInputInGroupOne();
|
||||
focusOnInputInGroupTwo();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).not.toHaveBeenCalled();
|
||||
|
||||
// focus on input in group 1
|
||||
blurFromInputInGroupTwo();
|
||||
focusOnInputInGroupOne();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(1);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(1);
|
||||
|
||||
// focus on non-radio/checkbox element
|
||||
blurFromInputInGroupOne();
|
||||
focusOnNonRadioCheckboxElement();
|
||||
|
||||
// Assert
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(2);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(1);
|
||||
|
||||
// focus on input in group 1
|
||||
focusOnInputInGroupOne();
|
||||
expect(onButtonQuestionLostFocusCallbackOne).toHaveBeenCalledTimes(2);
|
||||
expect(onButtonQuestionLostFocusCallbackTwo).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue