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 =
`
`;
-});
-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);
+ });
});