forked from restify/node-restify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrouterRegistryRadix.test.js
119 lines (94 loc) · 3.41 KB
/
routerRegistryRadix.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'use strict';
/* eslint-disable func-names */
var RouterRegistryRadix = require('../lib/routerRegistryRadix');
var Chain = require('../lib/chain');
if (require.cache[__dirname + '/lib/helper.js']) {
delete require.cache[__dirname + '/lib/helper.js'];
}
var helper = require('./lib/helper.js');
///--- Globals
var test = helper.test;
function getTestRoute(opts) {
var chain = new Chain();
var name = opts.method + '-' + opts.path;
name = name.replace(/\W/g, '').toLowerCase();
return {
name: name,
method: opts.method,
path: opts.path,
spec: opts,
chain: chain
};
}
///--- Tests
test('adds a route', function(t) {
var registry = new RouterRegistryRadix();
registry.add(getTestRoute({ method: 'GET', path: '/' }));
registry.add(getTestRoute({ method: 'POST', path: '/' }));
registry.add(getTestRoute({ method: 'GET', path: '/ab' }));
t.deepEqual(Object.keys(registry.get()), ['get', 'post', 'getab']);
t.done();
});
test('removes a route', function(t) {
var registry = new RouterRegistryRadix();
// Mount
registry.add(getTestRoute({ method: 'GET', path: '/a' }));
registry.add(getTestRoute({ method: 'POST', path: '/b' }));
t.deepEqual(Object.keys(registry.get()), ['geta', 'postb']);
// Unmount
var route = registry.remove('geta');
t.ok(route);
t.equal(route.name, 'geta');
// Removes from registry
t.deepEqual(Object.keys(registry.get()), ['postb']);
t.end();
});
test('lookups a route', function(t) {
var registry = new RouterRegistryRadix();
var route = getTestRoute({ method: 'GET', path: '/a/:b' });
registry.add(route);
var result = registry.lookup('GET', '/a/b');
t.deepEqual(result, {
route: route,
params: { b: 'b' },
handler: result.handler
});
t.done();
});
test('get registered routes', function(t) {
var registry = new RouterRegistryRadix();
registry.add(getTestRoute({ method: 'GET', path: '/' }));
registry.add(getTestRoute({ method: 'GET', path: '/a' }));
registry.add(getTestRoute({ method: 'GET', path: '/a/b' }));
registry.add(getTestRoute({ method: 'POST', path: '/' }));
t.deepEqual(Object.keys(registry.get()), ['get', 'geta', 'getab', 'post']);
t.end();
});
test('toString()', function(t) {
var registry = new RouterRegistryRadix();
registry.add(getTestRoute({ method: 'GET', path: '/' }));
registry.add(getTestRoute({ method: 'GET', path: '/a' }));
registry.add(getTestRoute({ method: 'GET', path: '/a/b' }));
registry.add(getTestRoute({ method: 'POST', path: '/' }));
t.deepEqual(
registry.toString(),
'└── / (GET|POST)\n' + ' └── a (GET)\n' + ' └── /b (GET)\n'
);
t.end();
});
test('toString() with ignoreTrailingSlash', function(t) {
var registry = new RouterRegistryRadix({ ignoreTrailingSlash: true });
registry.add(getTestRoute({ method: 'GET', path: '/' }));
registry.add(getTestRoute({ method: 'GET', path: '/a' }));
registry.add(getTestRoute({ method: 'GET', path: '/a/b' }));
registry.add(getTestRoute({ method: 'POST', path: '/' }));
t.deepEqual(
registry.toString(),
'└── / (GET|POST)\n' +
' └── a (GET)\n' +
' └── / (GET)\n' +
' └── b (GET)\n' +
' └── / (GET)\n'
);
t.end();
});