| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import {expect} from 'chai';
- import {ROOT_PATH} from '../constants.js';
- import {mergeRouterBranchDefinitions} from './merge-router-branch-definitions.js';
- describe('mergeRouterBranchDefinitions', function () {
- it('should validate the "firstDef" parameter', function () {
- const throwable = () =>
- mergeRouterBranchDefinitions(123, {path: ROOT_PATH});
- expect(throwable).to.throw(
- 'Branch definition must be an Object, but 123 was given.',
- );
- });
- it('should validate the "secondDef" parameter', function () {
- const throwable = () =>
- mergeRouterBranchDefinitions({path: ROOT_PATH}, 123);
- expect(throwable).to.throw(
- 'Branch definition must be an Object, but 123 was given.',
- );
- });
- it('should concatenate the "path" option with the correct order', function () {
- const res = mergeRouterBranchDefinitions({path: 'foo'}, {path: 'bar'});
- expect(res).to.be.eql({path: '/foo/bar'});
- });
- it('should not duplicate slashes in the "path" option', function () {
- const res = mergeRouterBranchDefinitions({path: '/'}, {path: '/'});
- expect(res).to.be.eql({path: '/'});
- });
- it('should merge the "preHandler" option with a function value', function () {
- const preHandler1 = () => undefined;
- const preHandler2 = () => undefined;
- const res = mergeRouterBranchDefinitions(
- {
- path: ROOT_PATH,
- preHandler: preHandler1,
- },
- {
- path: ROOT_PATH,
- preHandler: preHandler2,
- },
- );
- expect(res).to.be.eql({
- path: ROOT_PATH,
- preHandler: [preHandler1, preHandler2],
- });
- });
- it('should merge the "preHandler" option with an array value', function () {
- const preHandler1 = () => undefined;
- const preHandler2 = () => undefined;
- const res = mergeRouterBranchDefinitions(
- {
- path: ROOT_PATH,
- preHandler: [preHandler1],
- },
- {
- path: ROOT_PATH,
- preHandler: [preHandler2],
- },
- );
- expect(res).to.be.eql({
- path: ROOT_PATH,
- preHandler: [preHandler1, preHandler2],
- });
- });
- it('should merge the "postHandler" option with a function value', function () {
- const preHandler1 = () => undefined;
- const preHandler2 = () => undefined;
- const res = mergeRouterBranchDefinitions(
- {
- path: ROOT_PATH,
- postHandler: preHandler1,
- },
- {
- path: ROOT_PATH,
- postHandler: preHandler2,
- },
- );
- expect(res).to.be.eql({
- path: ROOT_PATH,
- postHandler: [preHandler1, preHandler2],
- });
- });
- it('should merge the "postHandler" option with an array value', function () {
- const preHandler1 = () => undefined;
- const preHandler2 = () => undefined;
- const res = mergeRouterBranchDefinitions(
- {
- path: ROOT_PATH,
- postHandler: [preHandler1],
- },
- {
- path: ROOT_PATH,
- postHandler: [preHandler2],
- },
- );
- expect(res).to.be.eql({
- path: ROOT_PATH,
- postHandler: [preHandler1, preHandler2],
- });
- });
- it('should use the "meta" option from the first definition', function () {
- const meta = {foo: 'bar'};
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH, meta},
- {path: ROOT_PATH},
- );
- expect(res).to.be.eql({path: ROOT_PATH, meta});
- });
- it('should use the "meta" option from the second definition', function () {
- const meta = {foo: 'bar'};
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH},
- {path: ROOT_PATH, meta},
- );
- expect(res).to.be.eql({path: ROOT_PATH, meta});
- });
- it('should merge the "meta" option when both definitions are provided', function () {
- const meta1 = {foo: 1};
- const meta2 = {bar: 2};
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH, meta: meta1},
- {path: ROOT_PATH, meta: meta2},
- );
- expect(res).to.be.eql({path: ROOT_PATH, meta: {foo: 1, bar: 2}});
- });
- it('should merge arrays in the "meta" option', function () {
- const meta1 = {foo: [1, {bar: 2}]};
- const meta2 = {foo: [3, {baz: 4}]};
- const expectedMeta = {foo: [1, {bar: 2}, 3, {baz: 4}]};
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH, meta: meta1},
- {path: ROOT_PATH, meta: meta2},
- );
- expect(res).to.be.eql({path: ROOT_PATH, meta: expectedMeta});
- });
- it('should merge the "meta" option with a deep recursion', function () {
- const meta1 = {foo: {bar: 10}};
- const meta2 = {foo: {baz: 20}};
- const expectedMeta = {foo: {bar: 10, baz: 20}};
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH, meta: meta1},
- {path: ROOT_PATH, meta: meta2},
- );
- expect(res).to.be.eql({path: ROOT_PATH, meta: expectedMeta});
- });
- it('should add extra properties of definitions to the result', function () {
- const res = mergeRouterBranchDefinitions(
- {path: ROOT_PATH, extra1: 10},
- {path: ROOT_PATH, extra2: 20},
- );
- expect(res).to.be.eql({path: ROOT_PATH, extra1: 10, extra2: 20});
- });
- });
|