« index

Coverage for /Users/yunong/workspace/node-restify/test/router.test.js : 99%

140 lines | 139 run | 1 missing | 0 partial | 11 blocks | 10 blocks run | 1 blocks missing

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

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

  // Copyright 2012 Mark Cavage, Inc.  All rights reserved.
  
  var assert = require('assert-plus');
  var restify = require('../lib');
  if (require.cache[__dirname + '/lib/helper.js'])
      delete require.cache[__dirname + '/lib/helper.js'];
  var helper = require('./lib/helper.js');
  
  
  ///--- Globals
  
  var realizeUrl = restify.realizeUrl;
  var test = helper.test;
  var mockResponse = function respond(req, res, next) {
      res.send(200);
  };
  
  
  ///--- Tests
  
  test('render route', function (t) {
  
      var server = restify.createServer();
      server.get({name: 'countries', path: '/countries'}, mockResponse);
      server.get({name: 'country', path: '/countries/:name'}, mockResponse);
      server.get({name: 'cities', path: '/countries/:name/states/:state/cities'},
                 mockResponse);
  
      var countries = server.router.render('countries', {});
      t.equal(countries, '/countries');
  
      var country = server.router.render('country', {name: 'Australia'});
      t.equal(country, '/countries/Australia');
  
      var cities = server.router.render('cities', {
          name: 'Australia',
          state: 'New South Wales'
      });
      t.equal(cities, '/countries/Australia/states/New%20South%20Wales/cities');
  
      t.end();
  });
  
  
  test('render route (missing params)', function (t) {
  
      var server = restify.createServer();
      server.get({name: 'cities', path: '/countries/:name/states/:state/cities'},
                 mockResponse);
  
      try {
          server.router.render('cities', {name: 'Australia'});
      } catch (ex) {
          t.equal(ex, 'Error: Route <cities> is missing parameter <state>');
      }
  
      t.end();
  });
  
  
  test('GH #704: render route (special charaters)', function (t) {
  
      var server = restify.createServer();
      server.get({name: 'my-route', path: '/countries/:name'}, mockResponse);
  
      var link = server.router.render('my-route', {name: 'Australia'});
      t.equal(link, '/countries/Australia');
  
      t.end();
  });
  
  
  test('GH #704: render route (with sub-regex param)', function (t) {
  
      var server = restify.createServer();
      server.get({
          name: 'my-route',
          path: '/countries/:code([A-Z]{2,3})'
      }, mockResponse);
  
      var link = server.router.render('my-route', {code: 'FR'});
      t.equal(link, '/countries/FR');
  
      link = server.router.render('my-route', {code: '111'});
      t.equal(link, '/countries/111');
      t.end();
  });
  
  test('GH-796: render route (with multiple sub-regex param)', function (t) {
  
      var server = restify.createServer();
      server.get({
          name: 'my-route',
          path: '/countries/:code([A-Z]{2,3})/:area([0-9]+)'
      }, mockResponse);
  
      var link = server.router.render('my-route', {code: '111', area: 42});
      t.equal(link, '/countries/111/42');
      t.end();
  });
  
  test('render route (with encode)', function (t) {
  
      var server = restify.createServer();
      server.get({name: 'my-route', path: '/countries/:name'}, mockResponse);
  
      var link = server.router.render('my-route', {name: 'Trinidad & Tobago'});
      t.equal(link, '/countries/Trinidad%20%26%20Tobago');
  
      t.end();
  });
  
  
  test('render route (query string)', function (t) {
  
      var server = restify.createServer();
      server.get({name: 'country', path: '/countries/:name'}, mockResponse);
  
      var country1 = server.router.render('country', {
          name: 'Australia'
      }, {
          state: 'New South Wales',
          'cities/towns': 5
      });
  
      /* JSSTYLED */
      t.equal(country1, '/countries/Australia?state=New%20South%20Wales&cities%2Ftowns=5');
  
      var country2 = server.router.render('country', {
          name: 'Australia'
      }, {
          state: 'NSW & VIC',
          'cities&towns': 5
      });
  
      /* JSSTYLED */
      t.equal(country2, '/countries/Australia?state=NSW%20%26%20VIC&cities%26towns=5');
  
      t.end();
  });
« index | cover.io