1
0
mirror of https://github.com/webslides/WebSlides.git synced 2025-08-18 19:02:00 +02:00

Refactor Slide test

This commit is contained in:
Antonio Laguna
2017-06-06 17:25:25 +02:00
parent bad0ef5551
commit 3e64e33ed7

View File

@@ -1,72 +1,142 @@
import Slide from '../../src/js/modules/slide'; import Slide from '../../src/js/modules/slide';
beforeAll(() => { describe('Slide module', () => {
const slides = '<section class="slide"><div class="content">Content</section>' test('Candidate', () => {
.repeat(5); const valid = document.createElement('section');
document.body.innerHTML = `<div id="webslides">${slides}</div>`; const invalid = document.createElement('p');
});
test('Slide utility', () => { expect(Slide.isCandidate(valid)).toBe(true);
const ws = document.getElementById('webslides'); expect(Slide.isCandidate(invalid)).toBe(false);
const slides = ws.querySelectorAll('.slide'); });
describe('Instance behaviour', () => {
let ws;
let slides;
beforeEach(() => {
const template =
'<section><div class="content">Content</div></section>'
.repeat(5);
document.body.innerHTML = `<div id="webslides">${template}</div>`;
const el = document.getElementById('webslides');
slides = [];
el.querySelectorAll('section').forEach((el, i) => {
slides.push(new Slide(el, i));
});
ws = {
el,
slides
};
});
afterEach(() => {
document.body.innerHTML = '';
});
test('Slides should have some properties', () => {
const slide = ws.slides[0];
expect(slide.el).toBeInstanceOf(Element);
expect(slide.el.id).toBe('section-1');
expect(slide.parent).toBeInstanceOf(Element);
expect(slide.parent.id).toBe('webslides');
expect(slide.i).toBe(0);
});
test('Slides should get a slide class and be hidden', () => {
const slide = ws.slides[0];
expect(slide.el.classList.contains('slide')).toBe(true);
expect(slide.el.style.display).toBe('none');
});
test('Show/hide', () => {
const slide = ws.slides[0];
slide.show();
expect(slide.el.style.display).not.toBe('none');
expect(slide.el.classList.contains('current')).toBe(true);
slide.hide();
expect(slide.el.style.display).toBe('none');
expect(slide.el.classList.contains('current')).not.toBe(true);
});
test('Events', () => {
const slide = ws.slides[0];
const leave = jest.fn(); const leave = jest.fn();
const enter = jest.fn(); const enter = jest.fn();
const enable = jest.fn(); const enable = jest.fn();
const disable = jest.fn(); const disable = jest.fn();
const webslides = { slide.el.addEventListener('dom:leave', leave);
el: ws, slide.el.addEventListener('dom:enter', enter);
slides: [] slide.el.addEventListener('slide:enable', enable);
}; slide.el.addEventListener('slide:disable', disable);
expect(Slide.isCandidate(slides[0])).toBe(true); expect(enter).not.toHaveBeenCalled();
slides.forEach((slide, i) => webslides.slides.push(new Slide(slide, i))); expect(leave).not.toHaveBeenCalled();
expect(webslides.slides.length).toBe(slides.length); expect(enable).not.toHaveBeenCalled();
webslides.slides.forEach((slide, i) => { expect(disable).not.toHaveBeenCalled();
expect(typeof slide).toBe('object');
expect(slide.el).toBe(slides[i]); slide.enable();
expect(slide.el.id).toBe(`section-${i+1}`); expect(enter).not.toHaveBeenCalled();
expect(slide.el.style.display).toBe('none'); expect(leave).not.toHaveBeenCalled();
slide.show(); expect(enable).toHaveBeenCalledTimes(1);
expect(slide.el.style.display).toBe(''); expect(disable).not.toHaveBeenCalled();
expect(slide.el.classList.contains('current')).toBe(true); enable.mockClear();
slide.hide();
expect(slide.el.style.display).toBe('none'); slide.disable();
expect(enter).not.toHaveBeenCalled();
expect(leave).not.toHaveBeenCalled();
expect(enable).not.toHaveBeenCalled();
expect(disable).toHaveBeenCalledTimes(1);
disable.mockClear();
slide.moveAfterLast();
expect(enter).toHaveBeenCalledTimes(1);
expect(leave).toHaveBeenCalledTimes(1);
expect(enable).not.toHaveBeenCalled();
expect(disable).not.toHaveBeenCalled();
enter.mockClear();
leave.mockClear();
slide.moveBeforeFirst();
expect(enter).toHaveBeenCalledTimes(1);
expect(leave).toHaveBeenCalledTimes(1);
expect(enable).not.toHaveBeenCalled();
expect(disable).not.toHaveBeenCalled();
enter.mockClear();
leave.mockClear();
}); });
webslides.slides[0].el.addEventListener('dom:leave', leave); test('Move', () => {
webslides.slides[0].el.addEventListener('dom:enter', enter); const wsEl = document.getElementById('webslides');
webslides.slides[0].el.addEventListener('slide:enable', enable); const slide = ws.slides[0];
webslides.slides[0].el.addEventListener('slide:disable', disable);
expect(enter.mock.calls.length).toBe(0); expect(wsEl.lastChild).not.toBe(slide.el);
expect(leave.mock.calls.length).toBe(0); slide.moveAfterLast();
expect(enable.mock.calls.length).toBe(0); expect(wsEl.lastChild).toBe(slide.el);
expect(disable.mock.calls.length).toBe(0);
webslides.slides[0].moveAfterLast();
expect(ws.querySelector('.slide').id).toBe('section-2');
expect(enter.mock.calls.length).toBe(1);
expect(leave.mock.calls.length).toBe(1);
expect(enable.mock.calls.length).toBe(0);
expect(disable.mock.calls.length).toBe(0);
webslides.slides[0].moveBeforeFirst();
expect(ws.querySelector('.slide').id).toBe('section-1');
expect(enter.mock.calls.length).toBe(2);
expect(leave.mock.calls.length).toBe(2);
expect(enable.mock.calls.length).toBe(0);
expect(disable.mock.calls.length).toBe(0);
webslides.slides[0].enable();
expect(enter.mock.calls.length).toBe(2);
expect(leave.mock.calls.length).toBe(2);
expect(enable.mock.calls.length).toBe(1);
expect(disable.mock.calls.length).toBe(0);
webslides.slides[0].disable();
expect(enter.mock.calls.length).toBe(2);
expect(leave.mock.calls.length).toBe(2);
expect(enable.mock.calls.length).toBe(1);
expect(disable.mock.calls.length).toBe(1);
const found = Slide.getSectionFromEl(ws.querySelector('.content')); expect(wsEl.firstChild).not.toBe(slide.el);
expect(found.section.id).toBe('section-1'); slide.moveBeforeFirst();
expect(found.i).toBe(1); expect(wsEl.firstChild).toBe(slide.el);
});
test('Get section from el', () => {
const wsEl = document.getElementById('webslides');
const el = ws.slides[3].el.firstChild;
const found = Slide.getSectionFromEl(el);
expect(found.section.id).toBe('section-4');
expect(found.i).toBe(4);
const notFound = Slide.getSectionFromEl(wsEl);
expect(notFound.section).toBeNull();
expect(notFound.i).toBeNull();
});
});
}); });