Files
Figma_1/mixitup-3.3.1/tests/unit/callbacks.js
2025-09-16 01:40:08 +03:00

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();
});
});
});