271 lines
7.9 KiB
JavaScript
271 lines
7.9 KiB
JavaScript
|
import CloseReopenReportToggle from '~/close_reopen_report_toggle';
|
||
|
import DropLab from '~/droplab/drop_lab';
|
||
|
|
||
|
describe('CloseReopenReportToggle', () => {
|
||
|
describe('class constructor', () => {
|
||
|
const dropdownTrigger = {};
|
||
|
const dropdownList = {};
|
||
|
const button = {};
|
||
|
let commentTypeToggle;
|
||
|
|
||
|
beforeEach(function () {
|
||
|
commentTypeToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('sets .dropdownTrigger', function () {
|
||
|
expect(commentTypeToggle.dropdownTrigger).toBe(dropdownTrigger);
|
||
|
});
|
||
|
|
||
|
it('sets .dropdownList', function () {
|
||
|
expect(commentTypeToggle.dropdownList).toBe(dropdownList);
|
||
|
});
|
||
|
|
||
|
it('sets .button', function () {
|
||
|
expect(commentTypeToggle.button).toBe(button);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('initDroplab', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = jasmine.createSpyObj('dropdownList', ['querySelector']);
|
||
|
const dropdownTrigger = {};
|
||
|
const button = {};
|
||
|
const reopenItem = {};
|
||
|
const closeItem = {};
|
||
|
const config = {};
|
||
|
|
||
|
beforeEach(() => {
|
||
|
spyOn(DropLab.prototype, 'init');
|
||
|
dropdownList.querySelector.and.returnValues(reopenItem, closeItem);
|
||
|
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
|
||
|
spyOn(closeReopenReportToggle, 'setConfig').and.returnValue(config);
|
||
|
|
||
|
closeReopenReportToggle.initDroplab();
|
||
|
});
|
||
|
|
||
|
it('sets .reopenItem and .closeItem', () => {
|
||
|
expect(dropdownList.querySelector).toHaveBeenCalledWith('.reopen-item');
|
||
|
expect(dropdownList.querySelector).toHaveBeenCalledWith('.close-item');
|
||
|
expect(closeReopenReportToggle.reopenItem).toBe(reopenItem);
|
||
|
expect(closeReopenReportToggle.closeItem).toBe(closeItem);
|
||
|
});
|
||
|
|
||
|
it('sets .droplab', () => {
|
||
|
expect(closeReopenReportToggle.droplab).toEqual(jasmine.any(Object));
|
||
|
});
|
||
|
|
||
|
it('calls .setConfig', () => {
|
||
|
expect(closeReopenReportToggle.setConfig).toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
it('calls droplab.init', () => {
|
||
|
expect(DropLab.prototype.init).toHaveBeenCalledWith(
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
jasmine.any(Array),
|
||
|
config,
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('updateButton', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = {};
|
||
|
const dropdownTrigger = {};
|
||
|
const button = jasmine.createSpyObj('button', ['blur']);
|
||
|
const isClosed = true;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
|
||
|
spyOn(closeReopenReportToggle, 'toggleButtonType');
|
||
|
|
||
|
closeReopenReportToggle.updateButton(isClosed);
|
||
|
});
|
||
|
|
||
|
it('calls .toggleButtonType', () => {
|
||
|
expect(closeReopenReportToggle.toggleButtonType).toHaveBeenCalledWith(isClosed);
|
||
|
});
|
||
|
|
||
|
it('calls .button.blur', () => {
|
||
|
expect(closeReopenReportToggle.button.blur).toHaveBeenCalled();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('toggleButtonType', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = {};
|
||
|
const dropdownTrigger = {};
|
||
|
const button = {};
|
||
|
const isClosed = true;
|
||
|
const showItem = jasmine.createSpyObj('showItem', ['click']);
|
||
|
const hideItem = {};
|
||
|
showItem.classList = jasmine.createSpyObj('classList', ['add', 'remove']);
|
||
|
hideItem.classList = jasmine.createSpyObj('classList', ['add', 'remove']);
|
||
|
|
||
|
beforeEach(() => {
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
|
||
|
spyOn(closeReopenReportToggle, 'getButtonTypes').and.returnValue([showItem, hideItem]);
|
||
|
|
||
|
closeReopenReportToggle.toggleButtonType(isClosed);
|
||
|
});
|
||
|
|
||
|
it('calls .getButtonTypes', () => {
|
||
|
expect(closeReopenReportToggle.getButtonTypes).toHaveBeenCalledWith(isClosed);
|
||
|
});
|
||
|
|
||
|
it('removes hide class and add selected class to showItem, opposite for hideItem', () => {
|
||
|
expect(showItem.classList.remove).toHaveBeenCalledWith('hidden');
|
||
|
expect(showItem.classList.add).toHaveBeenCalledWith('droplab-item-selected');
|
||
|
expect(hideItem.classList.add).toHaveBeenCalledWith('hidden');
|
||
|
expect(hideItem.classList.remove).toHaveBeenCalledWith('droplab-item-selected');
|
||
|
});
|
||
|
|
||
|
it('clicks the showItem', () => {
|
||
|
expect(showItem.click).toHaveBeenCalled();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('getButtonTypes', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = {};
|
||
|
const dropdownTrigger = {};
|
||
|
const button = {};
|
||
|
const reopenItem = {};
|
||
|
const closeItem = {};
|
||
|
|
||
|
beforeEach(() => {
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
|
||
|
closeReopenReportToggle.reopenItem = reopenItem;
|
||
|
closeReopenReportToggle.closeItem = closeItem;
|
||
|
});
|
||
|
|
||
|
it('returns reopenItem, closeItem if isClosed is true', () => {
|
||
|
const buttonTypes = closeReopenReportToggle.getButtonTypes(true);
|
||
|
|
||
|
expect(buttonTypes).toEqual([reopenItem, closeItem]);
|
||
|
});
|
||
|
|
||
|
it('returns closeItem, reopenItem if isClosed is false', () => {
|
||
|
const buttonTypes = closeReopenReportToggle.getButtonTypes(false);
|
||
|
|
||
|
expect(buttonTypes).toEqual([closeItem, reopenItem]);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('setDisable', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = {};
|
||
|
const dropdownTrigger = jasmine.createSpyObj('button', ['setAttribute', 'removeAttribute']);
|
||
|
const button = jasmine.createSpyObj('button', ['setAttribute', 'removeAttribute']);
|
||
|
|
||
|
beforeEach(() => {
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('disable .button and .dropdownTrigger if shouldDisable is true', () => {
|
||
|
closeReopenReportToggle.setDisable(true);
|
||
|
|
||
|
expect(button.setAttribute).toHaveBeenCalledWith('disabled', 'true');
|
||
|
expect(dropdownTrigger.setAttribute).toHaveBeenCalledWith('disabled', 'true');
|
||
|
});
|
||
|
|
||
|
it('disable .button and .dropdownTrigger if shouldDisable is undefined', () => {
|
||
|
closeReopenReportToggle.setDisable();
|
||
|
|
||
|
expect(button.setAttribute).toHaveBeenCalledWith('disabled', 'true');
|
||
|
expect(dropdownTrigger.setAttribute).toHaveBeenCalledWith('disabled', 'true');
|
||
|
});
|
||
|
|
||
|
it('enable .button and .dropdownTrigger if shouldDisable is false', () => {
|
||
|
closeReopenReportToggle.setDisable(false);
|
||
|
|
||
|
expect(button.removeAttribute).toHaveBeenCalledWith('disabled');
|
||
|
expect(dropdownTrigger.removeAttribute).toHaveBeenCalledWith('disabled');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('setConfig', () => {
|
||
|
let closeReopenReportToggle;
|
||
|
const dropdownList = {};
|
||
|
const dropdownTrigger = {};
|
||
|
const button = {};
|
||
|
let config;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
closeReopenReportToggle = new CloseReopenReportToggle({
|
||
|
dropdownTrigger,
|
||
|
dropdownList,
|
||
|
button,
|
||
|
});
|
||
|
|
||
|
config = closeReopenReportToggle.setConfig();
|
||
|
});
|
||
|
|
||
|
it('returns a config object', () => {
|
||
|
expect(config).toEqual({
|
||
|
InputSetter: [
|
||
|
{
|
||
|
input: button,
|
||
|
valueAttribute: 'data-text',
|
||
|
inputAttribute: 'data-value',
|
||
|
},
|
||
|
{
|
||
|
input: button,
|
||
|
valueAttribute: 'data-text',
|
||
|
inputAttribute: 'title',
|
||
|
},
|
||
|
{
|
||
|
input: button,
|
||
|
valueAttribute: 'data-button-class',
|
||
|
inputAttribute: 'class',
|
||
|
},
|
||
|
{
|
||
|
input: dropdownTrigger,
|
||
|
valueAttribute: 'data-toggle-class',
|
||
|
inputAttribute: 'class',
|
||
|
},
|
||
|
{
|
||
|
input: button,
|
||
|
valueAttribute: 'data-url',
|
||
|
inputAttribute: 'href',
|
||
|
},
|
||
|
{
|
||
|
input: button,
|
||
|
valueAttribute: 'data-method',
|
||
|
inputAttribute: 'data-method',
|
||
|
},
|
||
|
],
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|