sort_view_test.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var sort = require('views/common/sort_view');
  19. require('utils/misc');
  20. require('utils/string_utils');
  21. describe('#wrapperView', function () {
  22. describe('#getSortFunc', function () {
  23. describe('number', function () {
  24. var property = Em.Object.create({type: 'number', name: 'lastTriggered'});
  25. Em.A([
  26. {
  27. a: Em.Object.create({lastTriggered: 1}),
  28. b: Em.Object.create({lastTriggered: 0}),
  29. order: true,
  30. e: 1
  31. },
  32. {
  33. a: Em.Object.create({lastTriggered: 1}),
  34. b: Em.Object.create({lastTriggered: 0}),
  35. order: false,
  36. e: -1
  37. },
  38. {
  39. a: Em.Object.create({lastTriggered: null}),
  40. b: Em.Object.create({lastTriggered: 1}),
  41. order: true,
  42. e: -Infinity
  43. },
  44. {
  45. a: Em.Object.create({lastTriggered: null}),
  46. b: Em.Object.create({lastTriggered: 1}),
  47. order: false,
  48. e: Infinity
  49. }
  50. ]).forEach(function (test, i) {
  51. it('test #' + (i + 1), function () {
  52. var func = sort.wrapperView.create().getSortFunc(property, test.order);
  53. expect(func(test.a, test.b)).to.equal(test.e);
  54. });
  55. });
  56. });
  57. describe('default', function () {
  58. var property = Em.Object.create({type: 'string', name: 'serviceName'});
  59. Em.A([
  60. {
  61. a: Em.Object.create({serviceName: 's1'}),
  62. b: Em.Object.create({serviceName: 's2'}),
  63. order: true,
  64. e: 1
  65. },
  66. {
  67. a: Em.Object.create({serviceName: 's1'}),
  68. b: Em.Object.create({serviceName: 's2'}),
  69. order: false,
  70. e: -1
  71. },
  72. {
  73. a: Em.Object.create({serviceName: 's1'}),
  74. b: Em.Object.create({serviceName: 's1'}),
  75. order: true,
  76. e: 0
  77. },
  78. {
  79. a: Em.Object.create({serviceName: null}),
  80. b: Em.Object.create({serviceName: 's2'}),
  81. order: true,
  82. e: 1
  83. },
  84. {
  85. a: Em.Object.create({serviceName: null}),
  86. b: Em.Object.create({serviceName: 's2'}),
  87. order: false,
  88. e: -1
  89. },
  90. {
  91. a: Em.Object.create({serviceName: 's1'}),
  92. b: Em.Object.create({serviceName: 'S2'}),
  93. order: true,
  94. e: 1
  95. },
  96. {
  97. a: Em.Object.create({serviceName: 's1'}),
  98. b: Em.Object.create({serviceName: 'S2'}),
  99. order: false,
  100. e: -1
  101. }
  102. ]).forEach(function (test, i) {
  103. it('test #' + (i + 1), function () {
  104. var func = sort.wrapperView.create().getSortFunc(property, test.order);
  105. expect(func(test.a, test.b)).to.equal(test.e);
  106. });
  107. });
  108. it('test non-string values', function () {
  109. property = Em.Object.create({type: 'string', name: 'enabled'});
  110. var func = sort.wrapperView.create().getSortFunc(property, true),
  111. a = Em.Object.create({enabled: false}),
  112. b = Em.Object.create({enabled: true});
  113. expect(func(a, b)).to.equal(1);
  114. });
  115. });
  116. });
  117. describe('#fieldView', function () {
  118. var fieldView, wrapperView;
  119. describe('#click', function () {
  120. beforeEach(function () {
  121. fieldView = sort.fieldView.create({
  122. controller: Em.Object.create({
  123. sortingColumn: null
  124. })
  125. });
  126. wrapperView = sort.wrapperView.create({
  127. childViews: [fieldView]
  128. });
  129. fieldView.reopen({'parentView': wrapperView});
  130. sinon.stub(wrapperView, 'sort', Em.K);
  131. sinon.stub(wrapperView, 'removeSortingObserver', Em.K);
  132. sinon.stub(wrapperView, 'addSortingObserver', Em.K);
  133. });
  134. afterEach(function () {
  135. wrapperView.sort.restore();
  136. wrapperView.removeSortingObserver.restore();
  137. wrapperView.addSortingObserver.restore();
  138. });
  139. it('should call sort function of wrapperView', function () {
  140. fieldView.click();
  141. expect(wrapperView.sort.calledOnce).to.be.true;
  142. });
  143. it('should call removeSortingObserver function of wrapperView if sortingColumn is absent in controller', function () {
  144. fieldView.reopen({
  145. controller: Em.Object.create({
  146. sortingColumn: {name: 'test'}
  147. })
  148. });
  149. fieldView.click();
  150. expect(wrapperView.removeSortingObserver.calledOnce).to.be.true;
  151. });
  152. it('should not call removeSortingObserver function of wrapperView if sortingColumn exists in controller', function () {
  153. fieldView.click();
  154. expect(wrapperView.removeSortingObserver.calledOnce).to.be.false;
  155. });
  156. it('should call addSortingObserver function of wrapperView', function () {
  157. fieldView.click();
  158. expect(wrapperView.addSortingObserver.calledOnce).to.be.true;
  159. });
  160. })
  161. })
  162. });