selectedGroupStore.spec.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. import GroupStore from 'app/stores/groupStore';
  2. import SelectedGroupStore from 'app/stores/selectedGroupStore';
  3. describe('SelectedGroupStore', function() {
  4. let sandbox;
  5. let trigger;
  6. beforeEach(function() {
  7. SelectedGroupStore.records = {};
  8. sandbox = sinon.sandbox.create();
  9. trigger = sandbox.spy(SelectedGroupStore, 'trigger');
  10. });
  11. afterEach(function() {
  12. sandbox.restore();
  13. });
  14. describe('prune()', function() {
  15. it('removes records no longer in the GroupStore', function() {
  16. sandbox.stub(GroupStore, 'getAllItemIds', () => ['3']);
  17. SelectedGroupStore.records = {1: true, 2: true, 3: true};
  18. SelectedGroupStore.prune();
  19. expect(SelectedGroupStore.records).toEqual({3: true});
  20. });
  21. it("doesn't have any effect when already in sync", function() {
  22. sandbox.stub(GroupStore, 'getAllItemIds', () => ['1', '2', '3']);
  23. SelectedGroupStore.records = {1: true, 2: true, 3: true};
  24. SelectedGroupStore.prune();
  25. expect(SelectedGroupStore.records).toEqual({1: true, 2: true, 3: true});
  26. });
  27. });
  28. describe('add()', function() {
  29. it("defaults value of new ids to 'allSelected()'", function() {
  30. SelectedGroupStore.records = {1: true};
  31. SelectedGroupStore.add([2]);
  32. expect(SelectedGroupStore.records).toEqual({1: true, 2: true});
  33. });
  34. it('does not update existing ids', function() {
  35. SelectedGroupStore.records = {1: false, 2: true};
  36. SelectedGroupStore.add([3]);
  37. expect(SelectedGroupStore.records).toEqual({1: false, 2: true, 3: false});
  38. });
  39. });
  40. describe('onGroupChange()', function() {
  41. let prune;
  42. let add;
  43. beforeEach(function() {
  44. prune = sandbox.stub(SelectedGroupStore, 'prune');
  45. add = sandbox.stub(SelectedGroupStore, 'add');
  46. });
  47. it('adds new ids', function() {
  48. SelectedGroupStore.onGroupChange([]);
  49. expect(add.called).toBe(true);
  50. });
  51. it('prunes stale records', function() {
  52. SelectedGroupStore.onGroupChange([]);
  53. expect(prune.called).toBe(true);
  54. });
  55. it('triggers an update', function() {
  56. SelectedGroupStore.onGroupChange([]);
  57. expect(trigger.called).toBe(true);
  58. });
  59. });
  60. describe('allSelected()', function() {
  61. it('returns true when all ids are selected', function() {
  62. SelectedGroupStore.records = {1: true, 2: true};
  63. expect(SelectedGroupStore.allSelected()).toBe(true);
  64. });
  65. it('returns false when some ids are selected', function() {
  66. SelectedGroupStore.records = {1: true, 2: false};
  67. expect(SelectedGroupStore.allSelected()).toBe(false);
  68. });
  69. it('returns false when no ids are selected', function() {
  70. SelectedGroupStore.records = {1: false, 2: false};
  71. expect(SelectedGroupStore.allSelected()).toBe(false);
  72. });
  73. it('returns false when there are no ids', function() {
  74. expect(SelectedGroupStore.allSelected()).toBe(false);
  75. });
  76. });
  77. describe('anySelected()', function() {
  78. it('returns true if any ids are selected', function() {
  79. SelectedGroupStore.records = {1: true, 2: false};
  80. expect(SelectedGroupStore.anySelected()).toBe(true);
  81. });
  82. it('returns false when no ids are selected', function() {
  83. SelectedGroupStore.records = {1: false, 2: false};
  84. expect(SelectedGroupStore.anySelected()).toBe(false);
  85. });
  86. });
  87. describe('multiSelected()', function() {
  88. it('returns true when multiple ids are selected', function() {
  89. SelectedGroupStore.records = {1: true, 2: true, 3: false};
  90. expect(SelectedGroupStore.multiSelected()).toBe(true);
  91. });
  92. it('returns false when a single id is selected', function() {
  93. SelectedGroupStore.records = {1: true, 2: false};
  94. expect(SelectedGroupStore.multiSelected()).toBe(false);
  95. });
  96. it('returns false when no ids are selected', function() {
  97. SelectedGroupStore.records = {1: false, 2: false};
  98. expect(SelectedGroupStore.multiSelected()).toBe(false);
  99. });
  100. });
  101. describe('getSelectedIds()', function() {
  102. it('returns selected ids', function() {
  103. SelectedGroupStore.records = {1: true, 2: false, 3: true};
  104. let ids = SelectedGroupStore.getSelectedIds();
  105. expect(ids.has('1')).toBe(true);
  106. expect(ids.has('3')).toBe(true);
  107. expect(ids.size).toEqual(2);
  108. });
  109. it('returns empty set with no selected ids', function() {
  110. SelectedGroupStore.records = {1: false};
  111. let ids = SelectedGroupStore.getSelectedIds();
  112. expect(ids.has('1')).toBe(false);
  113. expect(ids.size).toEqual(0);
  114. });
  115. });
  116. describe('isSelected()', function() {
  117. it('returns true if id is selected', function() {
  118. SelectedGroupStore.records = {1: true};
  119. expect(SelectedGroupStore.isSelected(1)).toBe(true);
  120. });
  121. it('returns false if id is unselected or unknown', function() {
  122. SelectedGroupStore.records = {1: false};
  123. expect(SelectedGroupStore.isSelected(1)).toBe(false);
  124. expect(SelectedGroupStore.isSelected(2)).toBe(false);
  125. expect(SelectedGroupStore.isSelected()).toBe(false);
  126. });
  127. });
  128. describe('deselectAll()', function() {
  129. it('sets all records to false', function() {
  130. SelectedGroupStore.records = {1: true, 2: true, 3: false};
  131. SelectedGroupStore.deselectAll();
  132. expect(SelectedGroupStore.records).toEqual({1: false, 2: false, 3: false});
  133. });
  134. it('triggers an update', function() {
  135. SelectedGroupStore.deselectAll();
  136. expect(trigger.called).toBe(true);
  137. });
  138. });
  139. describe('toggleSelect()', function() {
  140. it('toggles state given pre-existing id', function() {
  141. SelectedGroupStore.records = {1: true};
  142. SelectedGroupStore.toggleSelect(1);
  143. expect(SelectedGroupStore.records[1]).toBe(false);
  144. });
  145. it('does not toggle state given unknown id', function() {
  146. SelectedGroupStore.toggleSelect(1);
  147. SelectedGroupStore.toggleSelect();
  148. SelectedGroupStore.toggleSelect(undefined);
  149. expect(SelectedGroupStore.records).toEqual({});
  150. });
  151. it('triggers an update given pre-existing id', function() {
  152. SelectedGroupStore.records = {1: true};
  153. SelectedGroupStore.toggleSelect(1);
  154. expect(trigger.called).toBe(true);
  155. });
  156. it('does not trigger an update given unknown id', function() {
  157. SelectedGroupStore.toggleSelect();
  158. expect(trigger.called).toBe(false);
  159. });
  160. });
  161. describe('toggleSelectAll()', function() {
  162. it('selects all ids if any are unselected', function() {
  163. SelectedGroupStore.records = {1: true, 2: false};
  164. SelectedGroupStore.toggleSelectAll();
  165. expect(SelectedGroupStore.records).toEqual({1: true, 2: true});
  166. });
  167. it('unselects all ids if all are selected', function() {
  168. SelectedGroupStore.records = {1: true, 2: true};
  169. SelectedGroupStore.toggleSelectAll();
  170. expect(SelectedGroupStore.records).toEqual({1: false, 2: false});
  171. });
  172. it('triggers an update', function() {
  173. SelectedGroupStore.toggleSelectAll();
  174. expect(trigger.called).toBe(true);
  175. });
  176. });
  177. });