callbacks.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. 'use strict';
  2. require('jsdom-global')();
  3. const chai = require('chai');
  4. const dom = require('../mock/dom');
  5. const mixitup = require('../../dist/mixitup.js');
  6. describe('mixitup()', () => {
  7. it('should accept an `onMixStart` callback, invoked at the start of operations', () => {
  8. let container = dom.getContainer();
  9. let wasCalled = false;
  10. let mixer = mixitup(container, {
  11. callbacks: {
  12. onMixStart: (state, futureState) => {
  13. chai.assert.instanceOf(state, mixitup.State);
  14. chai.assert.instanceOf(futureState, mixitup.State);
  15. chai.assert.notEqual(state.totalShow, futureState.totalShow);
  16. wasCalled = true;
  17. }
  18. }
  19. });
  20. return mixer.hide()
  21. .then(() => chai.assert.equal(wasCalled, true));
  22. });
  23. it('should accept an `onMixBusy` callback, called if simulataneous operation is rejected', () => {
  24. let container = dom.getContainer();
  25. let wasCalled = false;
  26. let mixer = mixitup(container, {
  27. debug: {
  28. fauxAsync: true
  29. },
  30. animation: {
  31. duration: 200,
  32. queue: false
  33. },
  34. callbacks: {
  35. onMixBusy: (state) => {
  36. chai.assert.instanceOf(state, mixitup.State);
  37. wasCalled = true;
  38. }
  39. }
  40. });
  41. mixer.hide();
  42. return mixer.show()
  43. .then(() => chai.assert.equal(wasCalled, true));
  44. });
  45. it('should accept an `onMixEnd` callback, called at the end of an operation', () => {
  46. let container = dom.getContainer();
  47. let wasCalled = false;
  48. let endState;
  49. let mixer = mixitup(container, {
  50. callbacks: {
  51. onMixEnd: (state) => {
  52. endState = state;
  53. chai.assert.instanceOf(state, mixitup.State);
  54. wasCalled = true;
  55. }
  56. }
  57. });
  58. return mixer.hide()
  59. .then(state => {
  60. chai.assert.equal(state.totalShow, endState.totalShow);
  61. chai.assert.equal(wasCalled, true);
  62. });
  63. });
  64. it('should accept an `onMixFail` callback, called when a filter operation does not match any targets', () => {
  65. let container = dom.getContainer();
  66. let wasCalled = false;
  67. let mixer = mixitup(container, {
  68. callbacks: {
  69. onMixFail: (state) => {
  70. chai.assert.instanceOf(state, mixitup.State);
  71. wasCalled = true;
  72. }
  73. }
  74. });
  75. return mixer.filter('.category-x')
  76. .then(() => {
  77. chai.assert.equal(wasCalled, true);
  78. });
  79. });
  80. it('should accept an `onMixClick` callback invoked when a control is clicked', () => {
  81. let frag = document.createDocumentFragment();
  82. let container = dom.getContainer();
  83. let controls = dom.getFilterControls();
  84. let wasCalled = false;
  85. let filter = controls.querySelector('[data-filter="none"]');
  86. container.insertBefore(controls, container.children[0]);
  87. frag.appendChild(container);
  88. let mixer = mixitup(container, {
  89. controls: {
  90. scope: 'local'
  91. },
  92. callbacks: {
  93. onMixClick: function(state, originalEvent) {
  94. var self = this;
  95. chai.assert.instanceOf(state, mixitup.State);
  96. chai.assert.instanceOf(originalEvent, window.MouseEvent);
  97. chai.assert.equal(self, filter);
  98. wasCalled = true;
  99. }
  100. }
  101. }, frag);
  102. filter.click();
  103. return Promise.resolve()
  104. .then(() => {
  105. chai.assert.equal(wasCalled, true);
  106. mixer.destroy();
  107. });
  108. });
  109. it('should accept an `onMixClick` callback which can be cancelled by returning false', () => {
  110. let frag = document.createDocumentFragment();
  111. let container = dom.getContainer();
  112. let controls = dom.getFilterControls();
  113. let wasCalled = false;
  114. let filter = controls.querySelector('[data-filter="none"]');
  115. container.insertBefore(controls, container.children[0]);
  116. frag.appendChild(container);
  117. let mixer = mixitup(container, {
  118. controls: {
  119. scope: 'local'
  120. },
  121. callbacks: {
  122. onMixClick: () => {
  123. return false;
  124. },
  125. onMixEnd: () => {
  126. // Will not be called
  127. wasCalled = true;
  128. }
  129. }
  130. }, frag);
  131. filter.click();
  132. return Promise.resolve()
  133. .then(() => {
  134. chai.assert.equal(wasCalled, false);
  135. mixer.destroy();
  136. });
  137. });
  138. });