OrderingProviderSpec.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import {
  2. bootstrapDiagram,
  3. inject
  4. } from 'test/TestHelper';
  5. import modelingModule from 'lib/features/modeling';
  6. import moveModule from 'lib/features/move';
  7. import orderingProviderModule from './provider';
  8. describe('features/ordering', function() {
  9. beforeEach(bootstrapDiagram({
  10. modules: [
  11. moveModule,
  12. modelingModule,
  13. orderingProviderModule
  14. ]
  15. }));
  16. var rootShape,
  17. level1Shape_alwaysTopLevel, level3Shape_Parent, level5Shape_alwaysTopLevel,
  18. nestedLevel1Shape, nestedLevel2Shape;
  19. beforeEach(inject(function(elementFactory, canvas) {
  20. rootShape = elementFactory.createRoot({
  21. id: 'root'
  22. });
  23. canvas.setRootElement(rootShape);
  24. level1Shape_alwaysTopLevel = elementFactory.createShape({
  25. id: 'level1',
  26. x: 100, y: 100,
  27. width: 100, height: 100,
  28. level: 1,
  29. alwaysTopLevel: true
  30. });
  31. canvas.addShape(level1Shape_alwaysTopLevel, rootShape);
  32. level3Shape_Parent = elementFactory.createShape({
  33. id: 'level3_Parent',
  34. x: 50, y: 50,
  35. width: 400, height: 400,
  36. level: 3
  37. });
  38. canvas.addShape(level3Shape_Parent, rootShape);
  39. nestedLevel1Shape = elementFactory.createShape({
  40. id: 'nestedLevel1',
  41. x: 100, y: 100,
  42. width: 100, height: 100,
  43. level: 1
  44. });
  45. canvas.addShape(nestedLevel1Shape, level3Shape_Parent);
  46. nestedLevel2Shape = elementFactory.createShape({
  47. id: 'nestedLevel2',
  48. x: 150, y: 150,
  49. width: 100, height: 100,
  50. level: 2
  51. });
  52. canvas.addShape(nestedLevel2Shape, level3Shape_Parent);
  53. level5Shape_alwaysTopLevel = elementFactory.createShape({
  54. id: 'level5_alwaysTopLevel',
  55. x: 200, y: 200,
  56. width: 100, height: 100,
  57. level: 5,
  58. alwaysTopLevel: true
  59. });
  60. canvas.addShape(level5Shape_alwaysTopLevel, rootShape);
  61. }));
  62. describe('should define sibling order', function() {
  63. it('should move behind shape', inject(function(modeling) {
  64. // when
  65. modeling.moveElements([ nestedLevel1Shape ], { x: -20, y: +20 }, level3Shape_Parent);
  66. // then
  67. expect(level3Shape_Parent.children).to.eql([ nestedLevel1Shape, nestedLevel2Shape ]);
  68. }));
  69. it('should move in from of same level changing parent', inject(function(modeling) {
  70. // when
  71. modeling.moveElements([ nestedLevel1Shape ], { x: -20, y: +20 }, rootShape);
  72. // then
  73. expect(rootShape.children).to.eql([
  74. level1Shape_alwaysTopLevel,
  75. nestedLevel1Shape,
  76. level3Shape_Parent,
  77. level5Shape_alwaysTopLevel
  78. ]);
  79. }));
  80. it('should remain on top', inject(function(modeling) {
  81. // when
  82. modeling.moveElements([ level5Shape_alwaysTopLevel ], { x: -20, y: +20 }, level3Shape_Parent);
  83. // then
  84. expect(rootShape.children).to.eql([
  85. level1Shape_alwaysTopLevel,
  86. level3Shape_Parent,
  87. level5Shape_alwaysTopLevel
  88. ]);
  89. }));
  90. it('should reorder multiple elements', inject(function(modeling) {
  91. var elements = [
  92. level1Shape_alwaysTopLevel,
  93. nestedLevel1Shape,
  94. level5Shape_alwaysTopLevel
  95. ];
  96. // when
  97. modeling.moveElements(elements, { x: -20, y: +20 }, level3Shape_Parent);
  98. // then
  99. expect(level3Shape_Parent.children).to.eql([
  100. nestedLevel1Shape,
  101. nestedLevel2Shape
  102. ]);
  103. expect(rootShape.children).to.eql([
  104. level1Shape_alwaysTopLevel,
  105. level3Shape_Parent,
  106. level5Shape_alwaysTopLevel
  107. ]);
  108. }));
  109. });
  110. describe('should handle connection order', function() {
  111. it('should create connection behind shapes', inject(function(modeling, elementFactory) {
  112. // given
  113. var newConnection = elementFactory.createConnection({
  114. id: 'newConnection',
  115. level: 0
  116. });
  117. // when
  118. modeling.connect(nestedLevel1Shape, nestedLevel2Shape, newConnection);
  119. // then
  120. expect(level3Shape_Parent.children).to.eql([
  121. newConnection,
  122. nestedLevel1Shape,
  123. nestedLevel2Shape
  124. ]);
  125. }));
  126. });
  127. });