@motorcycle/router
Version:
Standard Router Driver for Motorcycle.js
200 lines • 8.13 kB
JavaScript
;
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