init-tests.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. var chai = require('chai');
  2. var sinon = require('sinon');
  3. var sinonChai = require('sinon-chai');
  4. var should = chai.should();
  5. chai.use(sinonChai);
  6. require('jsdom-global')();
  7. var $ = require('jquery');
  8. require('../../src/js/jquery.orgchart');
  9. describe('orgchart -- integration tests', function () {
  10. document.body.innerHTML = '<div id="chart-container"></div>';
  11. var $container = $('#chart-container'),
  12. ds = {
  13. 'id': 'n1',
  14. 'name': 'Lao Lao',
  15. 'children': [
  16. { 'id': 'n2', 'name': 'Bo Miao' },
  17. { 'id': 'n3', 'name': 'Su Miao' }
  18. ]
  19. },
  20. fragment = '<div class="orgchart"><table><tr><td colspan="4"><div id="n1" class="node">' +
  21. '<div class="title"><i class="fa fa-users symbol"></i>Lao Lao</div><i class="edge verticalEdge bottomEdge fa"></i></div>' +
  22. '</td></tr><tr class="lines"><td colspan="4"><div class="downLine"></div></td></tr>' +
  23. '<tr class="lines"><td class="rightLine"></td><td class="leftLine topLine"></td>' +
  24. '<td class="rightLine topLine"></td><td class="leftLine"></td></tr><tr class="nodes"><td colspan="2"><table><tr><td>' +
  25. '<div id="n2" data-parent="n1" class="node"><div class="title">Bo Miao</div><i class="edge verticalEdge topEdge fa"></i>' +
  26. '<i class="edge horizontalEdge rightEdge fa"></i><i class="edge horizontalEdge leftEdge fa"></i></div></td></tr></table></td>' +
  27. '<td colspan="2"><table><tr><td><div id="n3" data-parent="n1" class="node"><div class="title">Su Miao</div>' +
  28. '<i class="edge verticalEdge topEdge fa"></i><i class="edge horizontalEdge rightEdge fa"></i>' +
  29. '<i class="edge horizontalEdge leftEdge fa"></i></div></td></tr></table></td></tr></table></div>',
  30. oc = {};
  31. afterEach(function () {
  32. $container.empty();
  33. });
  34. describe('init()', function () {
  35. it('initialize chart with json datasource', function () {
  36. oc = $container.orgchart({
  37. 'data': ds
  38. });
  39. $container.html().should.equal(fragment);
  40. });
  41. it('initialize chart with <ul> datasource', function () {
  42. var $ul = $(
  43. '<ul id="ul-data">' +
  44. '<li data-id="n1">Lao Lao' +
  45. '<ul>' +
  46. '<li data-id="n2">Bo Miao</li>' +
  47. '<li data-id="n3">Su Miao</li>' +
  48. '</ul>' +
  49. '</li>' +
  50. '</ul>'
  51. );
  52. $('body').append($ul);
  53. oc = $container.orgchart({
  54. 'data': $('#ul-data')
  55. });
  56. $container.html().should.equal(fragment);
  57. $ul.remove();
  58. });
  59. it('initialize chart with the given visible level', function () {
  60. oc = $container.orgchart({
  61. 'data': ds,
  62. 'visibleLevel': 1
  63. });
  64. oc.$chart.find('tr').eq(0).is('.hidden').should.be.false;
  65. oc.$chart.find('tr').eq(1).is('.hidden').should.be.true;
  66. oc.$chart.find('tr').eq(2).is('.hidden').should.be.true;
  67. oc.$chart.find('tr').eq(3).is('.hidden').should.be.true;
  68. });
  69. it('initialize chart with the given vertical level', function () {
  70. var fragment =
  71. '<tr class="verticalNodes">' +
  72. '<td>' +
  73. '<ul>' +
  74. '<li><div id="n2" data-parent="n1" class="node"><div class="title">Bo Miao</div></div></li>' +
  75. '<li><div id="n3" data-parent="n1" class="node"><div class="title">Su Miao</div></div></li>' +
  76. '</ul>'+
  77. '</td>'+
  78. '</tr>';
  79. oc = $container.orgchart({
  80. 'data': ds,
  81. 'verticalLevel': 2
  82. });
  83. oc.$chart.find('tr').eq(1).prop('outerHTML').should.equal(fragment);
  84. });
  85. context('initialize chart with various combinations of "visibleLevel" and "verticalLevel" ', function () {
  86. var ds = {
  87. 'name': 'Lao Lao',
  88. 'children': [
  89. { 'name': 'Bo Miao'
  90. },
  91. { 'name': 'Su Miao',
  92. 'children': [
  93. { 'name': 'Tie Hua' },
  94. { 'name': 'Hei Hei' }
  95. ]
  96. }
  97. ]
  98. };
  99. it('verticalLevel=2 and visibleLevel=1', function () {
  100. var fragment = '<div class="orgchart"><table><tr><td colspan="4"><div class="node"><div class="title"><i class="fa fa-users symbol"></i>Lao Lao</div>' +
  101. '<i class="edge verticalEdge bottomEdge fa"></i></div></td></tr><tr class="verticalNodes hidden"><td><ul><li><div class="node slide-up">' +
  102. '<div class="title">Bo Miao</div></div></li><li><div class="node slide-up"><div class="title">Su Miao</div>' +
  103. '<i class="toggleBtn fa fa-plus-square"></i></div><ul class="hidden"><li><div class="node slide-up"><div class="title">Tie Hua</div></div></li>' +
  104. '<li><div class="node slide-up"><div class="title">Hei Hei</div></div></li></ul></li></ul></td></tr></table></div>';
  105. oc = $container.orgchart({
  106. 'data': ds,
  107. 'verticalLevel': 2,
  108. 'visibleLevel': 1
  109. });
  110. $container.html().should.equal(fragment);
  111. });
  112. it('verticalLevel=2 and visibleLevel=2', function () {
  113. var fragment = '<div class="orgchart"><table><tr><td colspan="4"><div class="node"><div class="title"><i class="fa fa-users symbol"></i>Lao Lao</div>' +
  114. '<i class="edge verticalEdge bottomEdge fa"></i></div></td></tr><tr class="verticalNodes"><td><ul><li><div class="node">' +
  115. '<div class="title">Bo Miao</div></div></li><li><div class="node"><div class="title">Su Miao</div><i class="toggleBtn fa fa-plus-square"></i></div>' +
  116. '<ul class="hidden"><li><div class="node slide-up"><div class="title">Tie Hua</div></div></li><li><div class="node slide-up">' +
  117. '<div class="title">Hei Hei</div></div></li></ul></li></ul></td></tr></table></div>';
  118. oc = $container.orgchart({
  119. 'data': ds,
  120. 'verticalLevel': 2,
  121. 'visibleLevel': 2
  122. });
  123. $container.html().should.equal(fragment);
  124. });
  125. it('verticalLevel=2 and visibleLevel=3', function () {
  126. var fragment = '<div class="orgchart"><table><tr><td colspan="4"><div class="node"><div class="title"><i class="fa fa-users symbol"></i>Lao Lao</div>' +
  127. '<i class="edge verticalEdge bottomEdge fa"></i></div></td></tr><tr class="verticalNodes"><td><ul><li><div class="node">' +
  128. '<div class="title">Bo Miao</div></div></li><li><div class="node"><div class="title">Su Miao</div><i class="toggleBtn fa fa-minus-square"></i></div>' +
  129. '<ul><li><div class="node"><div class="title">Tie Hua</div></div></li><li><div class="node"><div class="title">Hei Hei</div></div>' +
  130. '</li></ul></li></ul></td></tr></table></div>';
  131. oc = $container.orgchart({
  132. 'data': ds,
  133. 'verticalLevel': 2,
  134. 'visibleLevel': 3
  135. });
  136. $container.html().should.equal(fragment);
  137. });
  138. });
  139. it('initCompleted should be invoked immediately after construting one node', function () {
  140. var spy = sinon.spy();
  141. oc = $container.orgchart({
  142. 'data': ds,
  143. 'createNode': spy
  144. });
  145. spy.should.have.been.callCount(3);
  146. spy.should.have.been.calledWithMatch($('#n1'),{ 'id': 'n1', 'name': 'Lao Lao' });
  147. spy.should.have.been.calledWithMatch($('#n2'),{ 'id': 'n2', 'name': 'Bo Miao' });
  148. spy.should.have.been.calledWithMatch($('#n3'),{ 'id': 'n3', 'name': 'Su Miao' });
  149. // spy.should.always.have.been.calledOn(oc);
  150. });
  151. it('initialize chart with default className', function () {
  152. oc = $container.orgchart({
  153. 'data': ds,
  154. 'chartClass': 'demo'
  155. });
  156. oc.$chart.is('.demo').should.be.true;
  157. });
  158. it('initialize chart with export button', function () {
  159. oc = $container.orgchart({
  160. 'data': ds,
  161. 'exportButton': true
  162. });
  163. $container.children('button').prop('outerHTML').should.equal('<button class="oc-export-btn">Export</button>');
  164. });
  165. it('initialize chart with "bottom to top" direction', function () {
  166. oc = $container.orgchart({
  167. 'data': ds,
  168. 'direction': 'b2t'
  169. });
  170. oc.$chart.is('.b2t').should.be.true;
  171. });
  172. it('reinitialize chart with drggable feature', function () {
  173. oc = $container.orgchart({
  174. 'data': ds
  175. });
  176. var spy = sinon.spy(oc, 'bindDragDrop');
  177. oc.init({ 'draggable': true });
  178. spy.should.have.been.callCount(3);
  179. spy.should.have.been.calledWith($('#n1'));
  180. spy.should.have.been.calledWithMatch($('#n2'));
  181. spy.should.have.been.calledWithMatch($('#n3'));
  182. });
  183. it('reinitialize chart with pan feature', function () {
  184. oc = $container.orgchart({
  185. 'data': ds
  186. });
  187. var spy = sinon.spy(oc, 'bindPan');
  188. oc.init({ 'pan': true });
  189. spy.should.have.been.callCount(1);
  190. });
  191. it('reinitialize chart with zoom feature', function () {
  192. oc = $container.orgchart({
  193. 'data': ds
  194. });
  195. var spy = sinon.spy(oc, 'bindZoom');
  196. oc.init({ 'zoom': true });
  197. spy.should.have.been.callCount(1);
  198. });
  199. });
  200. });