merge-router-branch-definition.spec.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import {expect} from 'chai';
  2. import {ROOT_PATH} from '../constants.js';
  3. import {mergeRouterBranchDefinitions} from './merge-router-branch-definitions.js';
  4. describe('mergeRouterBranchDefinitions', function () {
  5. it('should validate the "firstDef" parameter', function () {
  6. const throwable = () =>
  7. mergeRouterBranchDefinitions(123, {path: ROOT_PATH});
  8. expect(throwable).to.throw(
  9. 'Branch definition must be an Object, but 123 was given.',
  10. );
  11. });
  12. it('should validate the "secondDef" parameter', function () {
  13. const throwable = () =>
  14. mergeRouterBranchDefinitions({path: ROOT_PATH}, 123);
  15. expect(throwable).to.throw(
  16. 'Branch definition must be an Object, but 123 was given.',
  17. );
  18. });
  19. it('should concatenate the "path" option with the correct order', function () {
  20. const res = mergeRouterBranchDefinitions({path: 'foo'}, {path: 'bar'});
  21. expect(res).to.be.eql({path: '/foo/bar'});
  22. });
  23. it('should not duplicate slashes in the "path" option', function () {
  24. const res = mergeRouterBranchDefinitions({path: '/'}, {path: '/'});
  25. expect(res).to.be.eql({path: '/'});
  26. });
  27. it('should merge the "preHandler" option with a function value', function () {
  28. const preHandler1 = () => undefined;
  29. const preHandler2 = () => undefined;
  30. const res = mergeRouterBranchDefinitions(
  31. {
  32. path: ROOT_PATH,
  33. preHandler: preHandler1,
  34. },
  35. {
  36. path: ROOT_PATH,
  37. preHandler: preHandler2,
  38. },
  39. );
  40. expect(res).to.be.eql({
  41. path: ROOT_PATH,
  42. preHandler: [preHandler1, preHandler2],
  43. });
  44. });
  45. it('should merge the "preHandler" option with an array value', function () {
  46. const preHandler1 = () => undefined;
  47. const preHandler2 = () => undefined;
  48. const res = mergeRouterBranchDefinitions(
  49. {
  50. path: ROOT_PATH,
  51. preHandler: [preHandler1],
  52. },
  53. {
  54. path: ROOT_PATH,
  55. preHandler: [preHandler2],
  56. },
  57. );
  58. expect(res).to.be.eql({
  59. path: ROOT_PATH,
  60. preHandler: [preHandler1, preHandler2],
  61. });
  62. });
  63. it('should merge the "postHandler" option with a function value', function () {
  64. const preHandler1 = () => undefined;
  65. const preHandler2 = () => undefined;
  66. const res = mergeRouterBranchDefinitions(
  67. {
  68. path: ROOT_PATH,
  69. postHandler: preHandler1,
  70. },
  71. {
  72. path: ROOT_PATH,
  73. postHandler: preHandler2,
  74. },
  75. );
  76. expect(res).to.be.eql({
  77. path: ROOT_PATH,
  78. postHandler: [preHandler1, preHandler2],
  79. });
  80. });
  81. it('should merge the "postHandler" option with an array value', function () {
  82. const preHandler1 = () => undefined;
  83. const preHandler2 = () => undefined;
  84. const res = mergeRouterBranchDefinitions(
  85. {
  86. path: ROOT_PATH,
  87. postHandler: [preHandler1],
  88. },
  89. {
  90. path: ROOT_PATH,
  91. postHandler: [preHandler2],
  92. },
  93. );
  94. expect(res).to.be.eql({
  95. path: ROOT_PATH,
  96. postHandler: [preHandler1, preHandler2],
  97. });
  98. });
  99. it('should use the "meta" option from the first definition', function () {
  100. const meta = {foo: 'bar'};
  101. const res = mergeRouterBranchDefinitions(
  102. {path: ROOT_PATH, meta},
  103. {path: ROOT_PATH},
  104. );
  105. expect(res).to.be.eql({path: ROOT_PATH, meta});
  106. });
  107. it('should use the "meta" option from the second definition', function () {
  108. const meta = {foo: 'bar'};
  109. const res = mergeRouterBranchDefinitions(
  110. {path: ROOT_PATH},
  111. {path: ROOT_PATH, meta},
  112. );
  113. expect(res).to.be.eql({path: ROOT_PATH, meta});
  114. });
  115. it('should merge the "meta" option when both definitions are provided', function () {
  116. const meta1 = {foo: 1};
  117. const meta2 = {bar: 2};
  118. const res = mergeRouterBranchDefinitions(
  119. {path: ROOT_PATH, meta: meta1},
  120. {path: ROOT_PATH, meta: meta2},
  121. );
  122. expect(res).to.be.eql({path: ROOT_PATH, meta: {foo: 1, bar: 2}});
  123. });
  124. it('should merge arrays in the "meta" option', function () {
  125. const meta1 = {foo: [1, {bar: 2}]};
  126. const meta2 = {foo: [3, {baz: 4}]};
  127. const expectedMeta = {foo: [1, {bar: 2}, 3, {baz: 4}]};
  128. const res = mergeRouterBranchDefinitions(
  129. {path: ROOT_PATH, meta: meta1},
  130. {path: ROOT_PATH, meta: meta2},
  131. );
  132. expect(res).to.be.eql({path: ROOT_PATH, meta: expectedMeta});
  133. });
  134. it('should merge the "meta" option with a deep recursion', function () {
  135. const meta1 = {foo: {bar: 10}};
  136. const meta2 = {foo: {baz: 20}};
  137. const expectedMeta = {foo: {bar: 10, baz: 20}};
  138. const res = mergeRouterBranchDefinitions(
  139. {path: ROOT_PATH, meta: meta1},
  140. {path: ROOT_PATH, meta: meta2},
  141. );
  142. expect(res).to.be.eql({path: ROOT_PATH, meta: expectedMeta});
  143. });
  144. it('should add extra properties of definitions to the result', function () {
  145. const res = mergeRouterBranchDefinitions(
  146. {path: ROOT_PATH, extra1: 10},
  147. {path: ROOT_PATH, extra2: 20},
  148. );
  149. expect(res).to.be.eql({path: ROOT_PATH, extra1: 10, extra2: 20});
  150. });
  151. });