/
spec_recognize.js
106 lines (92 loc) · 5.46 KB
/
spec_recognize.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
require('../lib/sherpa')
describe("Sherpa - recognize", function() {
it("should recognize a simple route", function() {
var router = new Sherpa.Router();
router.add('/test').to('recognized');
assertEqual('recognized', router.recognize('/test').destination);
});
it("should recognize a simple route", function() {
var router = new Sherpa.Router();
router.add('/test').to('recognized');
assertEqual('recognized', router.recognize('/test').destination);
});
it("should recognize a simple route with optionals", function() {
var router = new Sherpa.Router();
router.add('/(test)').to('recognized');
assertEqual('recognized', router.recognize('/test').destination);
assertEqual('recognized', router.recognize('/').destination);
});
it("should recognize a simple route with nested optionals", function() {
var router = new Sherpa.Router();
router.add('(/test(/test2(/test3)))(/test4)').to('recognized');
assertEqual('recognized', router.recognize('/test').destination);
assertEqual('recognized', router.recognize('/test/test2').destination);
assertEqual('recognized', router.recognize('/test/test2/test3').destination);
assertEqual('recognized', router.recognize('/test/test4').destination);
assertEqual('recognized', router.recognize('/test/test2/test4').destination);
assertEqual('recognized', router.recognize('/test/test2/test3/test4').destination);
assertEqual('recognized', router.recognize('/test4').destination);
assertEqual(undefined, router.recognize('/test/test3'));
assertEqual(undefined, router.recognize('/test/test3/test4'));
});
it("should recognize a route with a variable in it", function() {
var router = new Sherpa.Router();
router.add('/:test').to('recognized');
var response = router.recognize('/variable');
assertEqual('recognized', response.destination);
assertEqual({test: 'variable'}, response.params);
});
it("should recognize a route with a regex variable in it", function() {
var router = new Sherpa.Router();
router.add('/:test', {matchesWith: {test: /asd|qwe|\d+/}}).to('recognized');
assertEqual(undefined, router.recognize('/variable'))
assertEqual(undefined, router.recognize('/123qwe'))
assertEqual('recognized', router.recognize('/123').destination)
assertEqual('recognized', router.recognize('/qwe').destination)
assertEqual('recognized', router.recognize('/asd').destination)
});
it("should distinguish between identical routes where one has a matchesWith", function() {
var router = new Sherpa.Router();
router.add('/:test', {matchesWith: {test: /^(asd|qwe|\d+)$/}}).to('recognized-regex');
router.add('/:test').to('recognized-nonregex');
assertEqual('recognized-nonregex', router.recognize('/poipio').destination)
assertEqual('recognized-nonregex', router.recognize('/123asd').destination)
assertEqual('recognized-regex', router.recognize('/123').destination)
assertEqual('recognized-regex', router.recognize('/qwe').destination)
assertEqual('recognized-regex', router.recognize('/asd').destination)
});
it("should recognize a route based on a request method", function() {
var router = new Sherpa.Router();
router.add('/test').to('any');
router.add('/test', {conditions:{method: 'GET'}}).to('get');
router.add('/test', {conditions:{method: 'POST'}}).to('post');
assertEqual('get', router.recognize('/test', {method: 'GET'}).destination);
assertEqual('post', router.recognize('/test', {method: 'POST'}).destination);
assertEqual('any', router.recognize('/test', {method: 'PUT'}).destination);
});
it("should recognize a route based on multiple request keys", function() {
var router = new Sherpa.Router({requestKeys: ['method', 'scheme']});
router.add('/test', {conditions:{method: 'GET', scheme: 'https'}}).to('https-get');
router.add('/test', {conditions:{method: 'POST', scheme: 'http'}}).to('http-post');
router.add('/test', {conditions:{scheme: 'http'}}).to('http-any');
router.add('/test', {conditions:{scheme: 'https'}}).to('https-any');
router.add('/test', {conditions:{method: 'POST', scheme: 'https'}}).to('https-post');
router.add('/test', {conditions:{method: 'GET', scheme: 'http'}}).to('http-get');
assertEqual('https-get', router.recognize('/test', {method: 'GET', scheme: 'https'}).destination);
assertEqual('https-get', router.recognize('/test', {method: 'GET', scheme: 'https'}).destination);
assertEqual('https-any', router.recognize('/test', {method: 'PUT', scheme: 'https'}).destination);
assertEqual('http-post', router.recognize('/test', {method: 'POST', scheme: 'http'}).destination);
assertEqual('http-post', router.recognize('/test', {method: 'POST', scheme: 'http'}).destination);
assertEqual('http-any', router.recognize('/test', {method: 'PUT', scheme: 'http'}).destination);
});
it("should recognize a route based on a request method regex", function() {
var router = new Sherpa.Router();
router.add('/test').to('any');
router.add('/test', {conditions:{method: 'DELETE'}}).to('delete');
router.add('/test', {conditions:{method: /GET|POST/}}).to('get-post');
assertEqual('get-post', router.recognize('/test', {method: 'GET'}).destination);
assertEqual('get-post', router.recognize('/test', {method: 'POST'}).destination);
assertEqual('delete', router.recognize('/test', {method: 'DELETE'}).destination);
assertEqual('any', router.recognize('/test', {method: 'PUT'}).destination);
});
});