PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/reviewboard/static/rb/js/views/tests/collectionViewTests.js

http://github.com/reviewboard/reviewboard
JavaScript | 164 lines | 129 code | 35 blank | 0 comment | 0 complexity | a2fa300e6e837af123a7c2bf8e066187 MD5 | raw file
Possible License(s): GPL-2.0
  1. suite('rb/views/CollectionView', function() {
  2. var TestModel,
  3. TestCollection,
  4. TestModelView,
  5. TestCollectionView,
  6. collection,
  7. view;
  8. TestModel = Backbone.Model.extend({
  9. defaults: _.defaults({
  10. data: ''
  11. })
  12. });
  13. TestCollection = Backbone.Collection.extend({
  14. model: TestModel
  15. });
  16. TestModelView = Backbone.View.extend({
  17. className: 'test-class',
  18. render: function() {
  19. this.$el.text(this.model.get('data'));
  20. return this;
  21. }
  22. });
  23. TestCollectionView = RB.CollectionView.extend({
  24. itemViewType: TestModelView
  25. });
  26. beforeEach(function() {
  27. collection = new TestCollection();
  28. view = new TestCollectionView({
  29. collection: collection
  30. });
  31. });
  32. describe('Rendering', function() {
  33. it('When empty', function() {
  34. view.render();
  35. expect(view.$el.children().length).toBe(0);
  36. });
  37. it('With items', function() {
  38. var $children;
  39. collection.add([
  40. { data: 'Item 1' },
  41. { data: 'Item 2' }
  42. ]);
  43. view.render();
  44. $children = view.$el.children();
  45. expect($children.length).toBe(2);
  46. expect($children[0].innerHTML).toBe('Item 1');
  47. expect($children[1].innerHTML).toBe('Item 2');
  48. });
  49. it('Item model type', function() {
  50. collection.add([
  51. { data: 'Item 1' }
  52. ]);
  53. view.render();
  54. expect(view.$el.children().hasClass('test-class')).toBe(true);
  55. });
  56. });
  57. describe('Live updating', function() {
  58. it('Adding items after rendering', function() {
  59. var $children;
  60. collection.add([
  61. { data: 'Item 1' }
  62. ]);
  63. view.render();
  64. expect(view.$el.children().length).toBe(1);
  65. collection.add([
  66. { data: 'Item 2' },
  67. { data: 'Item 3' }
  68. ]);
  69. $children = view.$el.children();
  70. expect($children.length).toBe(3);
  71. expect($children[2].innerHTML).toBe('Item 3');
  72. });
  73. it('Removing items after rendering', function() {
  74. var model1 = new TestModel({ data: 'Item 1' }),
  75. model2 = new TestModel({ data: 'Item 2' }),
  76. model3 = new TestModel({ data: 'Item 3' }),
  77. $children;
  78. collection.add([model1, model2, model3]);
  79. view.render();
  80. expect(view.$el.children().length).toBe(3);
  81. collection.remove([model1, model3]);
  82. $children = view.$el.children();
  83. expect($children.length).toBe(1);
  84. expect($children[0].innerHTML).toBe('Item 2');
  85. });
  86. it('Changing sort order', function() {
  87. var $children;
  88. collection.add([
  89. { data: 'Item 2' },
  90. { data: 'Item 3' },
  91. { data: 'Item 1' }
  92. ]);
  93. view.render();
  94. $children = view.$el.children();
  95. expect($children.length).toBe(3);
  96. expect($children[0].innerHTML).toBe('Item 2');
  97. expect($children[1].innerHTML).toBe('Item 3');
  98. expect($children[2].innerHTML).toBe('Item 1');
  99. collection.comparator = 'data';
  100. collection.sort();
  101. $children = view.$el.children();
  102. expect($children[0].innerHTML).toBe('Item 1');
  103. expect($children[1].innerHTML).toBe('Item 2');
  104. expect($children[2].innerHTML).toBe('Item 3');
  105. });
  106. it('When reset', function() {
  107. var $children;
  108. collection.add([
  109. { data: 'Item 1' },
  110. { data: 'Item 2' }
  111. ]);
  112. view.render();
  113. $children = view.$el.children();
  114. expect($children.length).toBe(2);
  115. expect($children[0].innerHTML).toBe('Item 1');
  116. expect($children[1].innerHTML).toBe('Item 2');
  117. collection.reset([
  118. { data: 'Item 3' },
  119. { data: 'Item 4' },
  120. { data: 'Item 5' }
  121. ]);
  122. $children = view.$el.children();
  123. expect($children.length).toBe(3);
  124. expect($children[0].innerHTML).toBe('Item 3');
  125. expect($children[1].innerHTML).toBe('Item 4');
  126. expect($children[2].innerHTML).toBe('Item 5');
  127. });
  128. });
  129. });