/* global describe,test,expect */ /* eslint-env jest */ import serialize from '../src/serialize' import sortable from '../src/html5sortable' describe('Testing serialize', () => { test('serialize: sortableContainer is not an element', () => { expect(() => { serialize('fake') }).toThrow('You need to provide a sortableContainer to be serialized.') }) test('serialize: sortableContainer is not a sortable', () => { // setup const divIsNotASortable = window.document.createElement('div') // assert expect(() => { serialize(divIsNotASortable) }).toThrow('You need to provide a sortableContainer to be serialized.') }) test('serialize: element that is not part of the DOM', () => { // setup const isASortable = sortable(window.document.createElement('div'), {})[0] // assert expect(serialize(isASortable)).toEqual(expect.objectContaining({ items: expect.any(Array), container: expect.any(Object) })) }) test('serialize: empty sortableContainer', () => { // setup const isASortable = sortable(window.document.createElement('div'), {})[0] // assert expect(serialize(isASortable)).toEqual(expect.objectContaining({ items: expect.arrayContaining([]), container: expect.objectContaining({ node: isASortable, itemCount: 0 }) })) }) test('serialize: with elements', () => { // setup const isASortable = sortable(window.document.createElement('div'), { items: 'div' })[0] isASortable.innerHTML = '
Item1
Item2
' const itemOne = isASortable.querySelector('#itemOne') const itemTwo = isASortable.querySelector('#itemTwo') // assert expect(serialize(isASortable)).toEqual(expect.objectContaining({ items: expect.arrayContaining([ expect.objectContaining({ parent: isASortable, node: itemOne, html: itemOne.outerHTML, index: 0 }), expect.objectContaining({ parent: isASortable, node: itemTwo, html: itemTwo.outerHTML, index: 1 }) ]), container: expect.objectContaining({ node: isASortable, itemCount: 2 }) })) }) test('serialize: with elements that are not items sortable', () => { // setup const isASortable = sortable(window.document.createElement('div'), { items: 'div' })[0] isASortable.innerHTML = 'Title
Item1
Item2
' const itemOne = isASortable.querySelector('#itemOne') const itemTwo = isASortable.querySelector('#itemTwo') // assert expect(serialize(isASortable)).toEqual(expect.objectContaining({ items: expect.arrayContaining([ expect.objectContaining({ parent: isASortable, node: itemOne, html: itemOne.outerHTML, index: 0 }), expect.objectContaining({ parent: isASortable, node: itemTwo, html: itemTwo.outerHTML, index: 1 }) ]), container: expect.objectContaining({ node: isASortable, itemCount: 2 }) })) }) test('serialize: with invalid customItemSerializer', () => { // setup const isASortable = sortable(window.document.createElement('div'), {})[0] // assert expect(() => { serialize(isASortable, 'fake') }).toThrow('You need to provide a valid serializer for items and the container.') }) test('serialize: with invalid customContainerSerializer', () => { // setup const isASortable = sortable(window.document.createElement('div'), {})[0] // assert expect(() => { serialize(isASortable, () => {}, 'fake') }).toThrow('You need to provide a valid serializer for items and the container.') }) test('serialize: with custom serializer', () => { // setup const isASortable = sortable(window.document.createElement('div'), { items: 'div' })[0] isASortable.innerHTML = '
Item1
Item2
' // assert expect(serialize(isASortable, (item, sortable) => { return { index: item.index, container: sortable } }, (container) => { return { itemCount: container.itemCount + 1 } } )).toEqual({ items: [{ index: 0, container: isASortable }, { index: 1, container: isASortable }], container: { itemCount: 3 } }) }) })