123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- 'use strict';
- require('jsdom-global')();
- const chai = require('chai');
- const dom = require('../mock/dom');
- const dataset = require('../mock/dataset');
- const mixitup = require('../../dist/mixitup.js');
- describe('mixitup()', () => {
- it('should throw an error if no container reference', () => {
- chai.assert.throws(() => mixitup(), Error, mixitup.messages.errorFactoryInvalidContainer());
- });
- it('should throw an error if a null container reference is passed', () => {
- chai.assert.throws(() => mixitup(null), Error, mixitup.messages.errorFactoryInvalidContainer());
- });
- it('should throw an error if an invalid container reference is passed', () => {
- chai.assert.throws(() => mixitup({}), Error, mixitup.messages.errorFactoryInvalidContainer());
- });
- it('should throw an error if an invalid reference or selector is passed', function() {
- chai.assert.throws(() => mixitup(false), Error, mixitup.messages.errorFactoryInvalidContainer());
- });
- it('should throw an error if an invalid configuration option is passed', function() {
- let container = dom.getContainer();
- chai.assert.throws(() => {
- mixitup(container, {
- animations: {}
- });
- }, TypeError);
- });
- it('should accept an element reference as a container', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container);
- chai.assert.isOk(mixer);
- mixer.destroy();
- });
- it('should accept a container selector', () => {
- let frag = document.createDocumentFragment();
- let container = dom.getContainer();
- frag.appendChild(container);
- let mixer = mixitup('.mixitup-container', {}, frag);
- let state = mixer.getState();
- chai.assert.isOk(mixer);
- chai.assert.equal(state.container, frag.querySelector('.mixitup-container'));
- mixer.destroy();
- });
- it('should accept a container and valid configuration object', function() {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- selectors: {
- target: '[data-ref="mix"]'
- },
- controls: {
- enable: false
- }
- });
- let state = mixer.getState();
- chai.assert.isOk(mixer);
- chai.assert.equal(state.activeFilter.selector, '[data-ref="mix"]');
- mixer.destroy();
- });
- it('should throw an error if the container selector yields no element', () => {
- chai.assert.throws(() => mixitup('.invalid-container-selector'), Error, mixitup.messages.errorFactoryContainerNotFound());
- });
- it('should return an instance of a facade by default', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container);
- chai.assert.instanceOf(mixer, mixitup.Facade);
- mixer.destroy();
- });
- it('should return an instance of a mixer if debug mode enabled', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- debug: {
- enable: true
- },
- controls: {
- enable: false
- }
- });
- chai.assert.instanceOf(mixer, mixitup.Mixer);
- mixer.destroy();
- });
- it('should return a single instance of a mixer, wrapping the first element if multiple elements passed', () => {
- let elementList = [
- dom.getContainer(),
- dom.getContainer()
- ];
- let mixer = mixitup(elementList, {
- debug: {
- enable: true
- },
- controls: {
- enable: false
- }
- });
- chai.assert.instanceOf(mixer, mixitup.Mixer);
- chai.assert.equal(mixer.getState().container, elementList[0]);
- mixer.destroy();
- });
- it('should return an instance of a collection if multiple elements passed and `returnCollection` specified', () => {
- let elementList = [
- dom.getContainer(),
- dom.getContainer()
- ];
- let collection = mixitup(elementList, void(0), void(0), true);
- chai.assert.instanceOf(collection, mixitup.Collection);
- chai.assert.instanceOf(collection[0], mixitup.Facade);
- chai.assert.instanceOf(collection[1], mixitup.Facade);
- collection.mixitup('destroy');
- });
- it('should add a unique ID to the container if no ID present', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container);
- let state = mixer.getState();
- chai.assert.equal(container.id, state.id);
- mixer.destroy();
- });
- it('should use any existing ID on the container as the mixer ID if present', () => {
- let container = dom.getContainer();
- let id = 'test-id';
- container.id = id;
- let mixer = mixitup(container);
- let state = mixer.getState();
- chai.assert.equal(id, state.id);
- mixer.destroy();
- });
- it('should not allow multiple instance to be instantiated on a single container', () => {
- let container = dom.getContainer();
- let mixer1 = mixitup(container, {
- debug: {
- enable: true
- },
- controls: {
- enable: false
- }
- });
- let mixer2 = mixitup(container, {
- debug: {
- enable: true,
- showWarnings: false
- },
- controls: {
- enable: false
- }
- });
- let facade = mixitup(container);
- chai.assert.equal(mixer1, mixer2);
- chai.assert.notEqual(facade, mixer1);
- chai.assert.notEqual(facade, mixer2);
- mixer1.destroy();
- });
- it('should respect a `load.filter` configuration option of none', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- load: {
- filter: 'none'
- }
- });
- let state = mixer.getState();
- chai.assert.equal(state.activeFilter.selector, '');
- chai.assert.equal(state.totalShow, 0);
- chai.assert.equal(state.hide[0].style.display, 'none');
- mixer.destroy();
- });
- it('should respect a `load.filter` configuration option of a single selector', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- load: {
- filter: '.category-a'
- }
- });
- let state = mixer.getState();
- chai.assert.equal(state.activeFilter.selector, '.category-a');
- chai.assert.equal(state.totalShow, 3);
- mixer.destroy();
- });
- it('should respect a `load.filter` configuration option of a compound selector', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- load: {
- filter: '.category-a.category-c'
- }
- });
- let state = mixer.getState();
- chai.assert.equal(state.activeFilter.selector, '.category-a.category-c');
- chai.assert.equal(state.totalShow, 1);
- mixer.destroy();
- });
- it('should respect a `load.sort` configuration option', () => {
- let idsByPublishedDate = dataset.slice().sort((a, b) => {
- let dateA = a.published;
- let dateB = b.published;
- if (dateA < dateB) {
- return -1;
- }
- if (dateA > dateB) {
- return 1;
- }
- return 0;
- }).map(item => item.id.toString());
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- load: {
- sort: 'published'
- }
- });
- let state = mixer.getState();
- let targetIds = state.show.map(el => el.id);
- chai.assert.deepEqual(targetIds, idsByPublishedDate);
- mixer.destroy();
- });
- it('should add a `layout.containerClassName` class if specified and be reflected in state', () => {
- let container = dom.getContainer();
- let mixer = mixitup(container, {
- layout: {
- containerClassName: 'grid'
- }
- });
- let state = mixer.getState();
- chai.assert.equal(state.activeContainerClassName, 'grid');
- mixer.destroy();
- });
- });
|