maximumSelectionLength-tests.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. module('Data adapters - Maximum selection length');
  2. var MaximumSelectionLength = require('select2/data/maximumSelectionLength');
  3. var $ = require('jquery');
  4. var Options = require('select2/options');
  5. var Utils = require('select2/utils');
  6. function StubData () {
  7. this.called = false;
  8. this.currentData = [];
  9. }
  10. StubData.prototype.current = function (callback) {
  11. callback(this.currentData);
  12. };
  13. StubData.prototype.val = function (val) {
  14. this.currentData.push(val);
  15. };
  16. StubData.prototype.query = function (params, callback) {
  17. this.called = true;
  18. };
  19. var MaximumData = Utils.Decorate(StubData, MaximumSelectionLength);
  20. test('0 never displays the notice', function (assert) {
  21. var zeroOptions = new Options({
  22. maximumSelectionLength: 0
  23. });
  24. var data = new MaximumData(null, zeroOptions);
  25. data.trigger = function () {
  26. assert.ok(false, 'No events should be triggered');
  27. };
  28. data.query({
  29. term: ''
  30. });
  31. assert.ok(data.called);
  32. data = new MaximumData(null, zeroOptions);
  33. data.trigger = function () {
  34. assert.ok(false, 'No events should be triggered');
  35. };
  36. data.val('1');
  37. data.query({
  38. term: ''
  39. });
  40. assert.ok(data.called);
  41. data = new MaximumData(null, zeroOptions);
  42. data.trigger = function () {
  43. assert.ok(false, 'No events should be triggered');
  44. };
  45. data.val('1');
  46. data.val('2');
  47. data.query({
  48. term: ''
  49. });
  50. assert.ok(data.called);
  51. });
  52. test('< 0 never displays the notice', function (assert) {
  53. var negativeOptions = new Options({
  54. maximumSelectionLength: -1
  55. });
  56. var data = new MaximumData(null, negativeOptions);
  57. data.trigger = function () {
  58. assert.ok(false, 'No events should be triggered');
  59. };
  60. data.query({
  61. term: ''
  62. });
  63. assert.ok(data.called);
  64. data = new MaximumData(null, negativeOptions);
  65. data.trigger = function () {
  66. assert.ok(false, 'No events should be triggered');
  67. };
  68. data.val('1');
  69. data.query({
  70. term: ''
  71. });
  72. assert.ok(data.called);
  73. data = new MaximumData(null, negativeOptions);
  74. data.trigger = function () {
  75. assert.ok(false, 'No events should be triggered');
  76. };
  77. data.val('1');
  78. data.val('2');
  79. data.query({
  80. term: ''
  81. });
  82. assert.ok(data.called);
  83. });
  84. test('triggers when >= 1 selection' , function (assert) {
  85. var maxOfOneOptions = new Options({
  86. maximumSelectionLength: 1
  87. });
  88. var data = new MaximumData(null, maxOfOneOptions);
  89. data.trigger = function () {
  90. assert.ok(false, 'No events should be triggered');
  91. };
  92. data.query({
  93. term: ''
  94. });
  95. assert.ok(data.called);
  96. data = new MaximumData(null, maxOfOneOptions);
  97. data.trigger = function () {
  98. assert.ok(true, 'The event should be triggered.');
  99. };
  100. data.val('1');
  101. data.query({
  102. term: ''
  103. });
  104. assert.ok(!data.called);
  105. });
  106. test('triggers when >= 2 selections' , function (assert) {
  107. var maxOfTwoOptions = new Options({
  108. maximumSelectionLength: 2
  109. });
  110. var data = new MaximumData(null, maxOfTwoOptions);
  111. data.trigger = function () {
  112. assert.ok(false, 'No events should be triggered');
  113. };
  114. data.query({
  115. term: ''
  116. });
  117. assert.ok(data.called);
  118. data = new MaximumData(null, maxOfTwoOptions);
  119. data.trigger = function () {
  120. assert.ok(false, 'No events should be triggered');
  121. };
  122. data.val('1');
  123. data.query({
  124. term: ''
  125. });
  126. assert.ok(data.called);
  127. data = new MaximumData(null, maxOfTwoOptions);
  128. data.trigger = function () {
  129. assert.ok(true, 'The event should be triggered.');
  130. };
  131. data.val('1');
  132. data.val('2');
  133. data.query({
  134. term: ''
  135. });
  136. assert.ok(!data.called);
  137. });