UNPKG

unveil

Version:

A React-based Reactive Presentation Framework

85 lines (70 loc) 10.5 kB
'use strict'; var _rxjs = require('rxjs'); jest.dontMock('../Router'); var createRouter = require('../Router').default; var createHistory = require('history/lib/createHashHistory'); var useQueries = require('history/lib/useQueries'); var fixtureWithoutNestedFirstSlide = require('./fixtures/MapWithoutNestedFirstSlide').default; var fixtureWithNestedFirstSlide = require('./fixtures/MapWithNestedFirstSlide').default; describe('Router', function () { var history = undefined, router = undefined, fixture = undefined; beforeEach(function () { history = useQueries(createHistory)({ queryKey: false }); fixture = fixtureWithoutNestedFirstSlide; router = createRouter({ history: history, map: fixture(), replaceUri: false }); router.start(); }); afterEach(function () { if (router) router.stop(); history = null; }); var t = function t(name, path, replacedPath, skip) { return it(name, function (done) { var key = Array.isArray(replacedPath) && 'indices' || 'path'; var subscription = _rxjs.Observable.fromRouter(router).subscribe(function (state) { expect(state[key]).toEqual(replacedPath); subscription.unsubscribe(); done(); }, function () {}); router.go(path.slice(1)); }); }; describe('Observability', function () { t('pushes new states to subscribers with nested first slide', '/1/1', [1, 1]); t('pushes new states to subscribers', '/3/1', [3, 1]); t('pushes new states to subscribers with nested first slide', '/1/1', [1, 1]); }); describe('Index to Name remapping', function () { beforeEach(function () { router.stop(); router = createRouter({ history: history, map: fixture(), replaceUri: true }); router.start(); }); t('routes from index to name', '/0', '/return-of-the-jedi'); t('routes from index to default subindex name', '/1', '/pulp-fiction/vincent-vega'); t('routes from subindex to name', '/3/1', '/3/donnie-darko'); t('does not reroute if no name is available for index', '/2', '/2'); t('does not reroute if no name is available for subindex', '/3/0', '/3/0'); }); describe('Fallbacks', function () { it('fallbacks to first slide and subslide if slide index not found', function (done) { fixture = fixtureWithNestedFirstSlide; router = createRouter({ history: history, map: fixture(), replaceUri: false }); router.start(); var result = [0, 0]; var subscription = _rxjs.Observable.fromRouter(router).subscribe(function (state) { expect(state.indices).toEqual(result); subscription.complete(); done(); }); router.go('234503957'); }); t('fallbacks to first slide if slide index not found', '/23503957', [0]); t('fallbacks to first slide if slide name not found', '/whatever', [0]); t('fallbacks to first subslide if subslide not found', '/pulp-fiction/mia-wallace', [1, 0]); t('fallbacks to slide if no subslides', '/2/not-found', [2]); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL19fdGVzdHNfXy9Sb3V0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLEtBQUssUUFBTCxDQUFjLFdBQWQ7O0FBSUEsSUFBTSxlQUFlLFFBQVEsV0FBUixFQUFxQixPQUFyQjtBQUNyQixJQUFNLGdCQUFnQixRQUFRLCtCQUFSLENBQWhCO0FBQ04sSUFBTSxhQUFhLFFBQVEsd0JBQVIsQ0FBYjs7QUFFTixJQUFNLGlDQUFpQyxRQUFRLHVDQUFSLEVBQWlELE9BQWpEO0FBQ3ZDLElBQU0sOEJBQThCLFFBQVEsb0NBQVIsRUFBOEMsT0FBOUM7O0FBRXBDLFNBQVMsUUFBVCxFQUFtQixZQUFNO0FBQ3ZCLE1BQUksbUJBQUo7TUFBYSxrQkFBYjtNQUFxQixtQkFBckIsQ0FEdUI7O0FBR3ZCLGFBQVksWUFBTTtBQUNoQixjQUFVLFdBQVcsYUFBWCxFQUEwQixFQUFFLFVBQVUsS0FBVixFQUE1QixDQUFWLENBRGdCO0FBRWhCLGNBQVUsOEJBQVYsQ0FGZ0I7QUFHaEIsYUFBVSxhQUFhLEVBQUMsZ0JBQUQsRUFBVSxLQUFLLFNBQUwsRUFBZ0IsWUFBWSxLQUFaLEVBQXZDLENBQVYsQ0FIZ0I7QUFJaEIsV0FBTyxLQUFQLEdBSmdCO0dBQU4sQ0FBWixDQUh1Qjs7QUFVdkIsWUFBVyxZQUFNO0FBQ2YsUUFBSSxNQUFKLEVBQVksT0FBTyxJQUFQLEdBQVo7QUFDQSxjQUFVLElBQVYsQ0FGZTtHQUFOLENBQVgsQ0FWdUI7O0FBZXZCLE1BQUksSUFBSSxTQUFKLENBQUksQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhLFlBQWIsRUFBMkIsSUFBM0I7V0FBb0MsR0FBRyxJQUFILEVBQVMsVUFBQyxJQUFELEVBQVU7QUFDN0QsVUFBSSxNQUFNLE1BQU0sT0FBTixDQUFjLFlBQWQsS0FBK0IsU0FBL0IsSUFBNEMsTUFBNUMsQ0FEbUQ7QUFFN0QsVUFBSSxlQUFlLGlCQUFXLFVBQVgsQ0FBc0IsTUFBdEIsRUFDaEIsU0FEZ0IsQ0FDTCxVQUFDLEtBQUQsRUFBVztBQUNyQixlQUFPLE1BQU0sR0FBTixDQUFQLEVBQW1CLE9BQW5CLENBQTJCLFlBQTNCLEVBRHFCO0FBRXJCLHFCQUFhLFdBQWIsR0FGcUI7QUFHckIsZUFIcUI7T0FBWCxFQUlULFlBQU0sRUFBTixDQUxELENBRnlEO0FBUTdELGFBQU8sRUFBUCxDQUFVLEtBQUssS0FBTCxDQUFXLENBQVgsQ0FBVixFQVI2RDtLQUFWO0dBQTdDLENBZmU7O0FBMEJ2QixXQUFTLGVBQVQsRUFBMEIsWUFBTTtBQUM5QixNQUFFLDBEQUFGLEVBQ0UsTUFERixFQUVFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGRixFQUQ4Qjs7QUFLOUIsTUFBRSxrQ0FBRixFQUNFLE1BREYsRUFFRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkYsRUFMOEI7O0FBUzlCLE1BQUUsMERBQUYsRUFDRSxNQURGLEVBRUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZGLEVBVDhCO0dBQU4sQ0FBMUIsQ0ExQnVCOztBQXdDdkIsV0FBUyx5QkFBVCxFQUFvQyxZQUFNO0FBQ3hDLGVBQVksWUFBTTtBQUNoQixhQUFPLElBQVAsR0FEZ0I7QUFFaEIsZUFBUyxhQUFhLEVBQUMsZ0JBQUQsRUFBVSxLQUFLLFNBQUwsRUFBZ0IsWUFBWSxJQUFaLEVBQXZDLENBQVQsQ0FGZ0I7QUFHaEIsYUFBTyxLQUFQLEdBSGdCO0tBQU4sQ0FBWixDQUR3Qzs7QUFPeEMsTUFBRSwyQkFBRixFQUErQixJQUEvQixFQUFxQyxxQkFBckMsRUFQd0M7QUFReEMsTUFBRSw0Q0FBRixFQUFnRCxJQUFoRCxFQUFzRCw0QkFBdEQsRUFSd0M7QUFTeEMsTUFBRSw4QkFBRixFQUFrQyxNQUFsQyxFQUEwQyxpQkFBMUMsRUFUd0M7QUFVeEMsTUFBRSxvREFBRixFQUF3RCxJQUF4RCxFQUE4RCxJQUE5RCxFQVZ3QztBQVd4QyxNQUFFLHVEQUFGLEVBQTJELE1BQTNELEVBQW1FLE1BQW5FLEVBWHdDO0dBQU4sQ0FBcEMsQ0F4Q3VCOztBQXNEdkIsV0FBUyxXQUFULEVBQXNCLFlBQU07QUFDMUIsT0FBRyxnRUFBSCxFQUFxRSxVQUFDLElBQUQsRUFBVTtBQUM3RSxnQkFBVSwyQkFBVixDQUQ2RTtBQUU3RSxlQUFTLGFBQWEsRUFBRSxnQkFBRixFQUFXLEtBQUssU0FBTCxFQUFnQixZQUFZLEtBQVosRUFBeEMsQ0FBVCxDQUY2RTtBQUc3RSxhQUFPLEtBQVAsR0FINkU7QUFJN0UsVUFBSSxTQUFTLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBVCxDQUp5RTtBQUs3RSxVQUFJLGVBQWUsaUJBQVcsVUFBWCxDQUFzQixNQUF0QixFQUNoQixTQURnQixDQUNMLFVBQUMsS0FBRCxFQUFXO0FBQ3JCLGVBQU8sTUFBTSxPQUFOLENBQVAsQ0FBc0IsT0FBdEIsQ0FBOEIsTUFBOUIsRUFEcUI7QUFFckIscUJBQWEsUUFBYixHQUZxQjtBQUdyQixlQUhxQjtPQUFYLENBRFYsQ0FMeUU7QUFXN0UsYUFBTyxFQUFQLENBQVUsV0FBVixFQVg2RTtLQUFWLENBQXJFLENBRDBCOztBQWUxQixNQUFFLG1EQUFGLEVBQXVELFdBQXZELEVBQW9FLENBQUMsQ0FBRCxDQUFwRSxFQWYwQjtBQWdCMUIsTUFBRSxrREFBRixFQUFzRCxXQUF0RCxFQUFtRSxDQUFDLENBQUQsQ0FBbkUsRUFoQjBCO0FBaUIxQixNQUFFLG1EQUFGLEVBQXVELDJCQUF2RCxFQUFvRixDQUFDLENBQUQsRUFBRyxDQUFILENBQXBGLEVBakIwQjtBQWtCMUIsTUFBRSxvQ0FBRixFQUF3QyxjQUF4QyxFQUF3RCxDQUFDLENBQUQsQ0FBeEQsRUFsQjBCO0dBQU4sQ0FBdEIsQ0F0RHVCO0NBQU4sQ0FBbkIiLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiamVzdC5kb250TW9jaygnLi4vUm91dGVyJyk7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuY29uc3QgY3JlYXRlUm91dGVyID0gcmVxdWlyZSgnLi4vUm91dGVyJykuZGVmYXVsdDtcbmNvbnN0IGNyZWF0ZUhpc3RvcnkgPSByZXF1aXJlKCdoaXN0b3J5L2xpYi9jcmVhdGVIYXNoSGlzdG9yeScpO1xuY29uc3QgdXNlUXVlcmllcyA9IHJlcXVpcmUoJ2hpc3RvcnkvbGliL3VzZVF1ZXJpZXMnKTtcblxuY29uc3QgZml4dHVyZVdpdGhvdXROZXN0ZWRGaXJzdFNsaWRlID0gcmVxdWlyZSgnLi9maXh0dXJlcy9NYXBXaXRob3V0TmVzdGVkRmlyc3RTbGlkZScpLmRlZmF1bHQ7XG5jb25zdCBmaXh0dXJlV2l0aE5lc3RlZEZpcnN0U2xpZGUgPSByZXF1aXJlKCcuL2ZpeHR1cmVzL01hcFdpdGhOZXN0ZWRGaXJzdFNsaWRlJykuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ1JvdXRlcicsICgpID0+IHtcbiAgbGV0IGhpc3RvcnksIHJvdXRlciwgZml4dHVyZTtcblxuICBiZWZvcmVFYWNoKCAoKSA9PiB7XG4gICAgaGlzdG9yeSA9IHVzZVF1ZXJpZXMoY3JlYXRlSGlzdG9yeSkoeyBxdWVyeUtleTogZmFsc2UgfSk7XG4gICAgZml4dHVyZSA9IGZpeHR1cmVXaXRob3V0TmVzdGVkRmlyc3RTbGlkZTtcbiAgICByb3V0ZXIgID0gY3JlYXRlUm91dGVyKHtoaXN0b3J5LCBtYXA6IGZpeHR1cmUoKSwgcmVwbGFjZVVyaTogZmFsc2V9KTtcbiAgICByb3V0ZXIuc3RhcnQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCAoKSA9PiB7XG4gICAgaWYgKHJvdXRlcikgcm91dGVyLnN0b3AoKTtcbiAgICBoaXN0b3J5ID0gbnVsbDtcbiAgfSk7XG5cbiAgbGV0IHQgPSAobmFtZSwgcGF0aCwgcmVwbGFjZWRQYXRoLCBza2lwKSA9PiBpdChuYW1lLCAoZG9uZSkgPT4ge1xuICAgIGxldCBrZXkgPSBBcnJheS5pc0FycmF5KHJlcGxhY2VkUGF0aCkgJiYgJ2luZGljZXMnIHx8ICdwYXRoJztcbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZS5mcm9tUm91dGVyKHJvdXRlcilcbiAgICAgIC5zdWJzY3JpYmUoIChzdGF0ZSkgPT4ge1xuICAgICAgICBleHBlY3Qoc3RhdGVba2V5XSkudG9FcXVhbChyZXBsYWNlZFBhdGgpO1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgKCkgPT4ge30pO1xuICAgIHJvdXRlci5nbyhwYXRoLnNsaWNlKDEpKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ09ic2VydmFiaWxpdHknLCAoKSA9PiB7XG4gICAgdCgncHVzaGVzIG5ldyBzdGF0ZXMgdG8gc3Vic2NyaWJlcnMgd2l0aCBuZXN0ZWQgZmlyc3Qgc2xpZGUnLFxuICAgICAgJy8xLzEnLFxuICAgICAgWzEsIDFdKTtcblxuICAgIHQoJ3B1c2hlcyBuZXcgc3RhdGVzIHRvIHN1YnNjcmliZXJzJyxcbiAgICAgICcvMy8xJyxcbiAgICAgIFszLCAxXSk7XG5cbiAgICB0KCdwdXNoZXMgbmV3IHN0YXRlcyB0byBzdWJzY3JpYmVycyB3aXRoIG5lc3RlZCBmaXJzdCBzbGlkZScsXG4gICAgICAnLzEvMScsXG4gICAgICBbMSwgMV0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW5kZXggdG8gTmFtZSByZW1hcHBpbmcnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCggKCkgPT4ge1xuICAgICAgcm91dGVyLnN0b3AoKTtcbiAgICAgIHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7aGlzdG9yeSwgbWFwOiBmaXh0dXJlKCksIHJlcGxhY2VVcmk6IHRydWV9KTtcbiAgICAgIHJvdXRlci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgdCgncm91dGVzIGZyb20gaW5kZXggdG8gbmFtZScsICcvMCcsICcvcmV0dXJuLW9mLXRoZS1qZWRpJyk7XG4gICAgdCgncm91dGVzIGZyb20gaW5kZXggdG8gZGVmYXVsdCBzdWJpbmRleCBuYW1lJywgJy8xJywgJy9wdWxwLWZpY3Rpb24vdmluY2VudC12ZWdhJyk7XG4gICAgdCgncm91dGVzIGZyb20gc3ViaW5kZXggdG8gbmFtZScsICcvMy8xJywgJy8zL2Rvbm5pZS1kYXJrbycpO1xuICAgIHQoJ2RvZXMgbm90IHJlcm91dGUgaWYgbm8gbmFtZSBpcyBhdmFpbGFibGUgZm9yIGluZGV4JywgJy8yJywgJy8yJyk7XG4gICAgdCgnZG9lcyBub3QgcmVyb3V0ZSBpZiBubyBuYW1lIGlzIGF2YWlsYWJsZSBmb3Igc3ViaW5kZXgnLCAnLzMvMCcsICcvMy8wJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGYWxsYmFja3MnLCAoKSA9PiB7XG4gICAgaXQoJ2ZhbGxiYWNrcyB0byBmaXJzdCBzbGlkZSBhbmQgc3Vic2xpZGUgaWYgc2xpZGUgaW5kZXggbm90IGZvdW5kJywgKGRvbmUpID0+IHtcbiAgICAgIGZpeHR1cmUgPSBmaXh0dXJlV2l0aE5lc3RlZEZpcnN0U2xpZGU7XG4gICAgICByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoeyBoaXN0b3J5LCBtYXA6IGZpeHR1cmUoKSwgcmVwbGFjZVVyaTogZmFsc2V9KTtcbiAgICAgIHJvdXRlci5zdGFydCgpO1xuICAgICAgbGV0IHJlc3VsdCA9IFswLDBdO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGUuZnJvbVJvdXRlcihyb3V0ZXIpXG4gICAgICAgIC5zdWJzY3JpYmUoIChzdGF0ZSkgPT4ge1xuICAgICAgICAgIGV4cGVjdChzdGF0ZS5pbmRpY2VzKS50b0VxdWFsKHJlc3VsdCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIHJvdXRlci5nbygnMjM0NTAzOTU3Jyk7XG4gICAgfSk7XG5cbiAgICB0KCdmYWxsYmFja3MgdG8gZmlyc3Qgc2xpZGUgaWYgc2xpZGUgaW5kZXggbm90IGZvdW5kJywgJy8yMzUwMzk1NycsIFswXSk7XG4gICAgdCgnZmFsbGJhY2tzIHRvIGZpcnN0IHNsaWRlIGlmIHNsaWRlIG5hbWUgbm90IGZvdW5kJywgJy93aGF0ZXZlcicsIFswXSk7XG4gICAgdCgnZmFsbGJhY2tzIHRvIGZpcnN0IHN1YnNsaWRlIGlmIHN1YnNsaWRlIG5vdCBmb3VuZCcsICcvcHVscC1maWN0aW9uL21pYS13YWxsYWNlJywgWzEsMF0pO1xuICAgIHQoJ2ZhbGxiYWNrcyB0byBzbGlkZSBpZiBubyBzdWJzbGlkZXMnLCAnLzIvbm90LWZvdW5kJywgWzJdKTtcbiAgfSk7XG5cbn0pO1xuIl19