diff --git a/test/utils/hash.test.js b/test/utils/hash.test.js index 31945be..9479b87 100644 --- a/test/utils/hash.test.js +++ b/test/utils/hash.test.js @@ -1,12 +1,10 @@ import DOM from '../../src/js/utils/dom'; import Hash from '../../src/js/plugins/hash'; -beforeAll(() => { +describe('Hash utility', () => { document.body.innerHTML = `

Text

`; -}); -test('Hash plugin', () => { document.location.hash = '#slide=1'; const goto = jest.fn(); const ws = document.getElementById('webslides'); @@ -20,19 +18,46 @@ test('Hash plugin', () => { el: ws }; - expect(goto).not.toBeCalled(); + test('Make sure it has not changed the slide', () => { + expect(goto).not.toBeCalled(); + }); new Hash(webslides); - expect(Hash.getSlideNumber()).toBe(0); - DOM.fireEvent(ws, 'ws:slide-change', { - slides: 3, - currentSlide0: 1, - currentSlide: 2 - }); - expect(Hash.getSlideNumber()).toBe(1); - expect(document.location.hash).toBe('#slide=2'); + test('Move to slide 1', () => { + expect(Hash.getSlideNumber()).toBe(0); + DOM.fireEvent(ws, 'ws:slide-change', { + slides: 3, + currentSlide0: 1, + currentSlide: 2 + }); + expect(Hash.getSlideNumber()).toBe(1); + expect(document.location.hash).toBe('#slide=2'); - DOM.fireEvent(window, 'hashchange'); - expect(goto.mock.calls.length).toBe(1); + DOM.fireEvent(window, 'hashchange'); + expect(goto.mock.calls.length).toBe(1); + }); + + test('Forces slide change', () => { + Hash.setSlideNumber(5); + const state = history.state; + expect(state.slideI).toBe(4); + }); + + test('Wrong hash', () => { + document.location.hash = 'slide=NaN'; + DOM.fireEvent(window, 'hashchange'); + // It shouldn't be call. + expect(goto.mock.calls.length).toBe(1); + expect(Hash.getSlideNumber()).toBe(null); + }); + + test('Repeat slide change', () => { + Hash.setSlideNumber(5); + let state = history.state; + expect(state.slideI).toBe(4); + Hash.setSlideNumber(5); + state = history.state; + expect(state.slideI).toBe(4); + }); });