import {SidebarElement} from '../src';
describe('Actions', () => {
const isVisibleClassName = 'sidebarjs--is-visible';
beforeEach(() => {
document.body.innerHTML = '';
});
describe('Open', () => {
test('Should add sidebarjs--is-visible class to [sidebarjs] component', () => {
document.body.innerHTML = '
';
const sidebarjs = new SidebarElement();
const componentClassList = sidebarjs.component.classList;
expect(componentClassList.contains(isVisibleClassName)).toBe(false);
sidebarjs.open();
expect(componentClassList.contains(isVisibleClassName)).toBe(true);
});
test('Should make sidebarjs visible', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
expect(sidebarjs.isVisible()).toBe(false);
sidebarjs.open();
expect(sidebarjs.isVisible()).toBe(true);
});
test('Should open sidebarjs from element with [sidebarjs-open]', () => {
document.body.innerHTML = 'open
';
const sidebarjs = new SidebarElement();
const elementOpen = document.querySelector('[sidebarjs-open]') as HTMLElement;
expect(sidebarjs.isVisible()).toBe(false);
elementOpen.click();
expect(sidebarjs.isVisible()).toBe(true);
});
});
describe('Close', () => {
test('Should remove sidebarjs--is-visible class to [sidebarjs] component', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
const componentClassList = sidebarjs.component.classList;
expect(componentClassList.contains(isVisibleClassName)).toBe(false);
sidebarjs.open();
expect(componentClassList.contains(isVisibleClassName)).toBe(true);
sidebarjs.close();
expect(componentClassList.contains(isVisibleClassName)).toBe(false);
});
test('Should make sidebarjs invisible', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
sidebarjs.open();
expect(sidebarjs.isVisible()).toBe(true);
sidebarjs.close();
expect(sidebarjs.isVisible()).toBe(false);
});
test('Should open sidebarjs from element with [sidebarjs-open]', () => {
document.body.innerHTML = 'open
';
const sidebarjs = new SidebarElement();
const elementClose = document.querySelector('[sidebarjs-close]') as HTMLElement;
sidebarjs.open();
expect(sidebarjs.isVisible()).toBe(true);
elementClose.click();
expect(sidebarjs.isVisible()).toBe(false);
});
});
describe('Toggle', () => {
test('Should toggle sidebarjs--is-visible class to [sidebarjs] component', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
const componentClassList = sidebarjs.component.classList;
sidebarjs.toggle();
expect(componentClassList.contains(isVisibleClassName)).toBe(true);
sidebarjs.toggle();
expect(componentClassList.contains(isVisibleClassName)).toBe(false);
sidebarjs.open();
expect(componentClassList.contains(isVisibleClassName)).toBe(true);
sidebarjs.toggle();
expect(componentClassList.contains(isVisibleClassName)).toBe(false);
});
test('Should make sidebarjs visible/invisible', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
sidebarjs.toggle();
expect(sidebarjs.isVisible()).toBe(true);
sidebarjs.toggle();
expect(sidebarjs.isVisible()).toBe(false);
});
test('Should open sidebarjs from element with [sidebarjs-open]', () => {
document.body.innerHTML = 'open
';
const sidebarjs = new SidebarElement();
const elementToggle = document.querySelector('[sidebarjs-toggle]') as HTMLElement;
elementToggle.click();
expect(sidebarjs.isVisible()).toBe(true);
elementToggle.click();
expect(sidebarjs.isVisible()).toBe(false);
});
});
describe('isVisible', () => {
test('Should return a boolean value that describe the visibility of sidebar', () => {
document.body.innerHTML = '';
const sidebarjs = new SidebarElement();
expect(sidebarjs.isVisible()).toBe(false);
sidebarjs.open();
expect(sidebarjs.isVisible()).toBe(true);
sidebarjs.close();
expect(sidebarjs.isVisible()).toBe(false);
});
});
describe('destroy', () => {
test('Should destroy sidebarjs', () => {
document.body.innerHTML = 'foo
';
const sidebarjs = new SidebarElement();
expect(sidebarjs.component).toBeInstanceOf(HTMLDivElement);
expect(sidebarjs.container).toBeInstanceOf(HTMLDivElement);
expect(sidebarjs.backdrop).toBeInstanceOf(HTMLDivElement);
expect(sidebarjs.component.hasAttribute('sidebarjs')).toBe(true);
expect(sidebarjs.container.hasAttribute('sidebarjs-container')).toBe(true);
expect(sidebarjs.backdrop.hasAttribute('sidebarjs-backdrop')).toBe(true);
sidebarjs.destroy();
expect(sidebarjs.component).toBeNull();
expect(sidebarjs.container).toBeNull();
expect(sidebarjs.backdrop).toBeNull();
});
});
});