UNPKG

@motorcycle/router

Version:

Standard Router Driver for Motorcycle.js

200 lines 8.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var assert = require("assert"); var src_1 = require("../src"); var most_1 = require("most"); var history_1 = require("@motorcycle/history"); var routerDriver = function (route$) { return src_1.Router(history_1.History({ history$: route$ })).router; }; describe('@motorcycle/router', function () { it('changes the route', function (done) { routerDriver(from(['/path'])).history().skip(1) .observe(function (location) { assert.strictEqual(location.path, '/path'); done(); }) .catch(function (err) { return done(err); }); }); describe('path()', function () { it('should filter the history$', function () { var routes = [ '/somewhere/else', '/path/that/is/correct', ]; var router = routerDriver(from(routes)).path('/path'); router.history().observe(function (location) { assert.notStrictEqual(location.path, '/somewhere/else'); assert.strictEqual(location.path, '/path/that/is/correct'); }); }); it('should create a proper path using createHref()', function () { var routes = [ '/the/wrong/path', '/some/really/really/deeply/nested/route/that/is/correct', '/some/really/really/deeply/nested/incorrect/route', ]; var router = routerDriver(from(routes)) .path('/some').path('/really').path('/really').path('/deeply') .path('/nested').path('/route').path('/that'); router.history().observe(function (_a) { var path = _a.path; assert.strictEqual(path, '/some/really/really/deeply/nested/route/that/is/correct'); assert.strictEqual(router.createHref('/is/correct'), '/some/really/really/deeply/nested/route/that/is/correct'); }); }); }); describe('define()', function () { it('should match routes against a definition object', function (done) { var defintion = { '/some': { '/route': 123, }, }; var routes = [ '/some/route', ]; var router = routerDriver(from(routes)); var match$ = router.define(defintion); match$.skip(1).observe(function (_a) { var path = _a.path, value = _a.value, location = _a.location; assert.strictEqual(path, '/some/route'); assert.strictEqual(value, 123); assert.strictEqual(location.path, '/some/route'); done(); }); }); it('should respect prior filtering by path()', function (done) { var defintion = { '/correct': { '/route': 123, }, }; var routes = [ '/wrong/path', '/some/nested/correct/route', ]; var router = routerDriver(from(routes)); var match$ = router.path('/some').path('/nested').define(defintion); match$.observe(function (_a) { var path = _a.path, value = _a.value, location = _a.location; assert.strictEqual(path, '/correct/route'); assert.strictEqual(value, 123); assert.strictEqual(location.path, '/some/nested/correct/route'); done(); }); }); it('should match a default route if one is not found', function (done) { var definition = { '/correct': { '/route': 123, }, '*': 999, }; var routes = [ '/wrong/path', '/wrong/route', '/some/nested/incorrect/route', ]; var router = routerDriver(from(routes)); var match$ = router.path('/some').path('/nested').define(definition); match$.observe(function (_a) { var path = _a.path, value = _a.value, location = _a.location; assert.strictEqual(path, '/incorrect/route'); assert.strictEqual(value, 999); assert.strictEqual(location.path, '/some/nested/incorrect/route'); done(); }); }); it('should create a proper href using createHref()', function (done) { var defintion = { '/correct': { '/route': 123, }, '*': 999, }; var routes = [ '/wrong/path', '/some/nested/correct/route', ]; var router = routerDriver(from(routes)); var match$ = router .path('/some').path('/nested').define(defintion); match$.observe(function (_a) { var path = _a.location.path, createHref = _a.createHref; assert.strictEqual(path, '/some/nested/correct/route'); assert.strictEqual(createHref('/correct/route'), path); done(); }); }); it('should match partials', function (done) { var defintion = { '/correct': { '/route': 123, }, '*': 999, }; var routes = [ '/wrong/path', '/some/nested/correct/route/partial', ]; var router = routerDriver(from(routes)); var match$ = router .path('/some').path('/nested').define(defintion); match$.observe(function (_a) { var path = _a.path, location = _a.location; assert.strictEqual(path, '/correct/route'); assert.strictEqual(location.path, '/some/nested/correct/route/partial'); done(); }); }); }); }); describe('Router', function () { it('should match Components', function () { var definitions = { '/home': function () { return ({ router: most_1.of('/') }); }, '/other': function () { return ({ router: most_1.of('/home') }); }, '/some': { '/:id': function (id) { return function () { return ({ router: most_1.of('/other/' + id) }); }; }, }, }; var routes = [ '/wrong/path', '/some/32', ]; var router = routerDriver(from(routes)); var sinks$ = src_1.RouterComponent(definitions)({ router: router }); var router$ = sinks$.map(function (sinks) { return sinks.router; }).switch(); return router$.take(1).observe(function (route) { assert.strictEqual(route, '/other/32'); }); }); it('should match nested Routers', function () { var definitions = { '/home': src_1.RouterComponent({ '/': function () { return ({ router: most_1.of('/hello') }); }, }), '/other': function () { return ({ router: most_1.of('/home') }); }, '/some': { '/:id': function (id) { return function () { return ({ router: most_1.of('/other/' + id) }); }; }, }, }; var routes = [ '/wrong/path', '/home/', ]; var router = routerDriver(from(routes)); var sinks$ = src_1.RouterComponent(definitions)({ router: router }); var router$ = sinks$.map(function (sinks) { return sinks.router; }).switch(); return router$.take(1).observe(function (route) { assert.strictEqual(route, '/hello'); }); }); }); function from(routes) { return most_1.periodic(10, 1) .skip(1) .take(routes.length - 1) .scan(function (x, y) { return x + y; }, 0) .map(function (x) { return routes[x]; }); } //# sourceMappingURL=index.test.js.map