unveil
Version:
A React-based Reactive Presentation Framework
85 lines (70 loc) • 10.5 kB
JavaScript
;
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