sort_view_test.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. ]).forEach(function (test, i) {
  91. it('test #' + (i + 1), function () {
  92. var func = sort.wrapperView.create().getSortFunc(property, test.order);
  93. expect(func(test.a, test.b)).to.equal(test.e);
  94. });
  95. });
  96. it('test non-string values', function () {
  97. property = Em.Object.create({type: 'string', name: 'enabled'});
  98. var func = sort.wrapperView.create().getSortFunc(property, true),
  99. a = Em.Object.create({enabled: false}),
  100. b = Em.Object.create({enabled: true});
  101. expect(func(a, b)).to.equal(1);
  102. });
  103. });
  104. });
  105. describe('#fieldView', function () {
  106. var fieldView, wrapperView;
  107. describe('#click', function () {
  108. beforeEach(function () {
  109. fieldView = sort.fieldView.create({
  110. controller: Em.Object.create({
  111. sortingColumn: null
  112. })
  113. });
  114. wrapperView = sort.wrapperView.create({
  115. childViews: [fieldView]
  116. });
  117. fieldView.reopen({'parentView': wrapperView});
  118. sinon.stub(wrapperView, 'sort', Em.K);
  119. sinon.stub(wrapperView, 'removeSortingObserver', Em.K);
  120. sinon.stub(wrapperView, 'addSortingObserver', Em.K);
  121. });
  122. afterEach(function () {
  123. wrapperView.sort.restore();
  124. wrapperView.removeSortingObserver.restore();
  125. wrapperView.addSortingObserver.restore();
  126. });
  127. it('should call sort function of wrapperView', function () {
  128. fieldView.click();
  129. expect(wrapperView.sort.calledOnce).to.be.true;
  130. });
  131. it('should call removeSortingObserver function of wrapperView if sortingColumn is absent in controller', function () {
  132. fieldView.reopen({
  133. controller: Em.Object.create({
  134. sortingColumn: {name: 'test'}
  135. })
  136. });
  137. fieldView.click();
  138. expect(wrapperView.removeSortingObserver.calledOnce).to.be.true;
  139. });
  140. it('should not call removeSortingObserver function of wrapperView if sortingColumn exists in controller', function () {
  141. fieldView.click();
  142. expect(wrapperView.removeSortingObserver.calledOnce).to.be.false;
  143. });
  144. it('should call addSortingObserver function of wrapperView', function () {
  145. fieldView.click();
  146. expect(wrapperView.addSortingObserver.calledOnce).to.be.true;
  147. });
  148. })
  149. })
  150. });