1 |
|
2 | express= require 'express'
|
3 | turnout= require '../'
|
4 |
|
5 | Promise= require 'bluebird'
|
6 | request= Promise.promisify(require 'request')
|
7 | cheerio= require 'cheerio'
|
8 |
|
9 |
|
10 | port= 59798
|
11 | url= 'http://localhost:'+port+'/'
|
12 |
|
13 |
|
14 | describe 'Options',->
|
15 | server= null
|
16 |
|
17 | describe 'blacklist',->
|
18 | beforeAll (done)->
|
19 | options=
|
20 | blacklist: [
|
21 | /^secret/
|
22 | ]
|
23 |
|
24 | app= express()
|
25 | app.use turnout options
|
26 | app.use (req,res)-> res.sendFile __dirname+'/fixture.html'
|
27 |
|
28 | server= app.listen port,done
|
29 | afterAll ->
|
30 | server.close()
|
31 |
|
32 | it 'Allow /first',(done)->
|
33 | request
|
34 | url: url+'first'
|
35 | headers:
|
36 | 'User-Agent': 'Googlebot'
|
37 | .spread (response)->
|
38 | expect(response.statusCode).toBe 200
|
39 |
|
40 | $= cheerio response.body
|
41 | expect($.find('h1').text()).toBe 'first'
|
42 | expect($.find('a').text()).toBe 'second'
|
43 |
|
44 | done()
|
45 |
|
46 | it 'Allow /second',(done)->
|
47 | request
|
48 | url: url+'second'
|
49 | headers:
|
50 | 'User-Agent': 'Googlebot'
|
51 | .spread (response)->
|
52 | expect(response.statusCode).toBe 200
|
53 |
|
54 | $= cheerio response.body
|
55 | expect($.find('h1').text()).toBe 'second'
|
56 | expect($.find('a').text()).toBe 'first'
|
57 |
|
58 | done()
|
59 |
|
60 | it 'Disallow /secret',(done)->
|
61 | request
|
62 | url: url+'secret'
|
63 | headers:
|
64 | 'User-Agent': 'Googlebot'
|
65 | .spread (response)->
|
66 | expect(response.statusCode).toBe 403
|
67 |
|
68 | done()
|
69 |
|
70 | describe 'whitelist',->
|
71 | beforeAll (done)->
|
72 | options=
|
73 | whitelist: [
|
74 | /^first/
|
75 | /^second/
|
76 | ]
|
77 |
|
78 | app= express()
|
79 | app.use turnout options
|
80 | app.use (req,res)-> res.sendFile __dirname+'/fixture.html'
|
81 |
|
82 | server= app.listen port,done
|
83 | afterAll ->
|
84 | server.close()
|
85 |
|
86 | it 'Allow /first',(done)->
|
87 | request
|
88 | url: url+'first'
|
89 | headers:
|
90 | 'User-Agent': 'Googlebot'
|
91 | .spread (response)->
|
92 | expect(response.statusCode).toBe 200
|
93 | expect(response.headers['x-powered-by']).toBe 'Express-turnout'
|
94 |
|
95 | $= cheerio response.body
|
96 | expect($.find('h1').text()).toBe 'first'
|
97 | expect($.find('a').text()).toBe 'second'
|
98 |
|
99 | done()
|
100 |
|
101 | it 'Allow /second',(done)->
|
102 | request
|
103 | url: url+'second'
|
104 | headers:
|
105 | 'User-Agent': 'Googlebot'
|
106 | .spread (response)->
|
107 | expect(response.statusCode).toBe 200
|
108 | expect(response.headers['x-powered-by']).toBe 'Express-turnout'
|
109 |
|
110 | $= cheerio response.body
|
111 | expect($.find('h1').text()).toBe 'second'
|
112 | expect($.find('a').text()).toBe 'first'
|
113 |
|
114 | done()
|
115 |
|
116 | it 'Disallow /secret',(done)->
|
117 | request
|
118 | url: url+'secret'
|
119 | headers:
|
120 | 'User-Agent': 'Googlebot'
|
121 | .spread (response)->
|
122 | expect(response.statusCode).toBe 403
|
123 | expect(response.headers['x-powered-by']).toBe 'Express-turnout'
|
124 |
|
125 | done()
|
126 |
|
127 | describe 'timeout',->
|
128 | beforeAll (done)->
|
129 | options=
|
130 | timeout: 1
|
131 |
|
132 | app= express()
|
133 | app.use turnout options
|
134 | app.use (req,res)-> res.sendFile __dirname+'/fixture.html'
|
135 |
|
136 | server= app.listen port,done
|
137 | afterAll ->
|
138 | server.close()
|
139 |
|
140 | it 'Timeup /first',(done)->
|
141 | request
|
142 | url: url+'first'
|
143 | headers:
|
144 | 'User-Agent': 'Googlebot'
|
145 | .spread (response)->
|
146 | expect(response.statusCode).toBe 403
|
147 | expect(response.headers['x-powered-by']).toBe 'Express-turnout'
|
148 | expect(response.body).toBe 'Timeout'
|
149 |
|
150 | done()
|
151 |
|
152 | describe 'ua',->
|
153 | beforeAll (done)->
|
154 | options=
|
155 | ua: ['先行者']
|
156 |
|
157 | app= express()
|
158 | app.use turnout options
|
159 | app.use (req,res)-> res.sendFile __dirname+'/fixture.html'
|
160 |
|
161 | server= app.listen port,done
|
162 | afterAll ->
|
163 | server.close()
|
164 |
|
165 | it 'Change target defaults to "先行者"',(done)->
|
166 | request
|
167 | url: url+'first'
|
168 | headers:
|
169 | 'User-Agent': 'Googlebot'
|
170 | .spread (response)->
|
171 | expect(response.statusCode).toBe 200
|
172 | expect(response.headers['x-powered-by']).toBe 'Express'
|
173 |
|
174 | done()
|