const { $, describe, beforeEach, afterEach, it, expect } = window;
describe('Bootstrap Switch:', () => {
beforeEach(() => {
$.support.transition = false;
$.fx.off = true;
});
afterEach(() => {
$(`.${$.fn.bootstrapSwitch.defaults.baseClass}`).bootstrapSwitch('destroy');
});
function createCheckbox() {
return $('', {
type: 'checkbox',
class: 'switch',
}).appendTo('body');
}
function createRadio() {
return $('', {
type: 'radio',
name: 'name',
class: 'switch',
}).appendTo('body');
}
function getOptions($element) {
return $element.data('bootstrap-switch').options;
}
it('should set the default options as element options, except state', () => {
const $switch = createCheckbox().prop('checked', true).bootstrapSwitch();
expect(getOptions($switch)).toEqual($.fn.bootstrapSwitch.defaults);
});
it('should override default options with initialization ones', () => {
const $switch = createCheckbox().prop('checked', false).bootstrapSwitch();
const $switch2 = createCheckbox().bootstrapSwitch({ state: false });
expect(getOptions($switch).state).toBe(false);
expect(getOptions($switch2).state).toBe(false);
});
it('should something', () => {
const $switch = createCheckbox().bootstrapSwitch();
let eventDoc = 0;
let eventElement = 0;
$(document).on('switchChange.bootstrapSwitch', ':checkbox', () => { eventDoc += 1; });
$(':checkbox').on('switchChange.bootstrapSwitch', () => { eventElement += 1; });
$switch.click();
expect(eventElement).toEqual(eventDoc);
expect(eventElement).toEqual(1);
});
describe('The Checkbox Bootstrap Switch', () => {
it('should conserve its state if onSwitchChange returns false', () => {
const $switch = createCheckbox().bootstrapSwitch({
onSwitchChange(event, state) {
expect(state).toEqual(true);
return false;
},
});
const $indeterminateSwitch = createCheckbox().data('indeterminate', true).bootstrapSwitch({
onSwitchChange(event, state) {
expect(state).toEqual(true);
return false;
},
});
$switch.click();
$indeterminateSwitch.click();
expect($switch.bootstrapSwitch('state')).toEqual(false);
expect($indeterminateSwitch.bootstrapSwitch('state')).toEqual(false);
});
it('should change its state if onSwitchChange does not return false', () => {
const $switch = createCheckbox().bootstrapSwitch({
onSwitchChange(event, state) {
expect(state).toEqual(true);
},
});
$switch.click();
expect($switch.bootstrapSwitch('state')).toEqual(true);
});
});
describe('The Radio Bootstrap Switch', () => {
it('should conserve its state if onSwitchChange returns false', () => {
const $radio1 = createRadio().prop('checked', true);
const $radio2 = createRadio().prop('checked', false);
const $radio3 = createRadio().prop('checked', false);
$('[name="name"]').bootstrapSwitch({
onSwitchChange(e, s) {
expect(s).toEqual(true);
return false;
},
});
$radio2.click();
expect($radio1.bootstrapSwitch('state')).toEqual(true);
expect($radio2.bootstrapSwitch('state')).toEqual(false);
expect($radio3.bootstrapSwitch('state')).toEqual(false);
});
it('should change its state if onSwitchChange not returns false', () => {
const $radio1 = createRadio().prop('checked', true);
const $radio2 = createRadio().prop('checked', false);
const $radio3 = createRadio().prop('checked', false);
$('[name="name"]').bootstrapSwitch({
onSwitchChange(e, s) {
expect(s).toEqual(true);
},
});
$radio2.click();
expect($radio1.bootstrapSwitch('state')).toEqual(false);
expect($radio2.bootstrapSwitch('state')).toEqual(true);
expect($radio3.bootstrapSwitch('state')).toEqual(false);
});
});
});