175 lines
5.0 KiB
JavaScript
175 lines
5.0 KiB
JavaScript
'use strict';
|
|
|
|
require('jsdom-global')();
|
|
|
|
const chai = require('chai');
|
|
const dom = require('../mock/dom');
|
|
const mixitup = require('../../dist/mixitup.js');
|
|
|
|
describe('mixitup()', () => {
|
|
it('should accept an `onMixStart` callback, invoked at the start of operations', () => {
|
|
let container = dom.getContainer();
|
|
let wasCalled = false;
|
|
|
|
let mixer = mixitup(container, {
|
|
callbacks: {
|
|
onMixStart: (state, futureState) => {
|
|
chai.assert.instanceOf(state, mixitup.State);
|
|
chai.assert.instanceOf(futureState, mixitup.State);
|
|
chai.assert.notEqual(state.totalShow, futureState.totalShow);
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
return mixer.hide()
|
|
.then(() => chai.assert.equal(wasCalled, true));
|
|
});
|
|
|
|
it('should accept an `onMixBusy` callback, called if simulataneous operation is rejected', () => {
|
|
let container = dom.getContainer();
|
|
let wasCalled = false;
|
|
|
|
let mixer = mixitup(container, {
|
|
debug: {
|
|
fauxAsync: true
|
|
},
|
|
animation: {
|
|
duration: 200,
|
|
queue: false
|
|
},
|
|
callbacks: {
|
|
onMixBusy: (state) => {
|
|
chai.assert.instanceOf(state, mixitup.State);
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
mixer.hide();
|
|
|
|
return mixer.show()
|
|
.then(() => chai.assert.equal(wasCalled, true));
|
|
});
|
|
|
|
it('should accept an `onMixEnd` callback, called at the end of an operation', () => {
|
|
let container = dom.getContainer();
|
|
let wasCalled = false;
|
|
let endState;
|
|
|
|
let mixer = mixitup(container, {
|
|
callbacks: {
|
|
onMixEnd: (state) => {
|
|
endState = state;
|
|
|
|
chai.assert.instanceOf(state, mixitup.State);
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
return mixer.hide()
|
|
.then(state => {
|
|
chai.assert.equal(state.totalShow, endState.totalShow);
|
|
chai.assert.equal(wasCalled, true);
|
|
});
|
|
});
|
|
|
|
it('should accept an `onMixFail` callback, called when a filter operation does not match any targets', () => {
|
|
let container = dom.getContainer();
|
|
let wasCalled = false;
|
|
|
|
let mixer = mixitup(container, {
|
|
callbacks: {
|
|
onMixFail: (state) => {
|
|
chai.assert.instanceOf(state, mixitup.State);
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
return mixer.filter('.category-x')
|
|
.then(() => {
|
|
chai.assert.equal(wasCalled, true);
|
|
});
|
|
});
|
|
|
|
it('should accept an `onMixClick` callback invoked when a control is clicked', () => {
|
|
let frag = document.createDocumentFragment();
|
|
let container = dom.getContainer();
|
|
let controls = dom.getFilterControls();
|
|
let wasCalled = false;
|
|
let filter = controls.querySelector('[data-filter="none"]');
|
|
|
|
container.insertBefore(controls, container.children[0]);
|
|
|
|
frag.appendChild(container);
|
|
|
|
let mixer = mixitup(container, {
|
|
controls: {
|
|
scope: 'local'
|
|
},
|
|
callbacks: {
|
|
onMixClick: function(state, originalEvent) {
|
|
var self = this;
|
|
|
|
chai.assert.instanceOf(state, mixitup.State);
|
|
chai.assert.instanceOf(originalEvent, window.MouseEvent);
|
|
chai.assert.equal(self, filter);
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
}, frag);
|
|
|
|
filter.click();
|
|
|
|
return Promise.resolve()
|
|
.then(() => {
|
|
chai.assert.equal(wasCalled, true);
|
|
|
|
mixer.destroy();
|
|
});
|
|
});
|
|
|
|
it('should accept an `onMixClick` callback which can be cancelled by returning false', () => {
|
|
let frag = document.createDocumentFragment();
|
|
let container = dom.getContainer();
|
|
let controls = dom.getFilterControls();
|
|
let wasCalled = false;
|
|
let filter = controls.querySelector('[data-filter="none"]');
|
|
|
|
container.insertBefore(controls, container.children[0]);
|
|
|
|
frag.appendChild(container);
|
|
|
|
let mixer = mixitup(container, {
|
|
controls: {
|
|
scope: 'local'
|
|
},
|
|
callbacks: {
|
|
onMixClick: () => {
|
|
return false;
|
|
},
|
|
onMixEnd: () => {
|
|
// Will not be called
|
|
|
|
wasCalled = true;
|
|
}
|
|
}
|
|
}, frag);
|
|
|
|
filter.click();
|
|
|
|
return Promise.resolve()
|
|
.then(() => {
|
|
chai.assert.equal(wasCalled, false);
|
|
|
|
mixer.destroy();
|
|
});
|
|
});
|
|
}); |