forked from sinatra/sinatra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstreaming_test.rb
118 lines (96 loc) · 3.03 KB
/
streaming_test.rb
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
require File.dirname(__FILE__) + '/helper'
context "Static files (by default)" do
setup do
Sinatra.application = nil
Sinatra.application.options.public = File.dirname(__FILE__) + '/public'
end
specify "are served from root/public" do
get_it '/foo.xml'
should.be.ok
headers['Content-Length'].should.equal '12'
headers['Content-Type'].should.equal 'application/xml'
body.should.equal "<foo></foo>\n"
end
specify "are not served when verb is not GET or HEAD" do
post_it '/foo.xml'
# these should actually be giving back a 405 Method Not Allowed but that
# complicates the routing logic quite a bit.
should.be.not_found
status.should.equal 404
end
specify "are served when verb is HEAD but missing a body" do
head_it '/foo.xml'
should.be.ok
headers['Content-Length'].should.equal '12'
headers['Content-Type'].should.equal 'application/xml'
body.should.equal ""
end
# static files override dynamic/internal events and ...
specify "are served when conflicting events exists" do
get '/foo.xml' do
'this is not foo.xml!'
end
get_it '/foo.xml'
should.be.ok
body.should.equal "<foo></foo>\n"
end
specify "are irrelevant when request_method is not GET/HEAD" do
put '/foo.xml' do
'putted!'
end
put_it '/foo.xml'
should.be.ok
body.should.equal 'putted!'
get_it '/foo.xml'
should.be.ok
body.should.equal "<foo></foo>\n"
end
specify "include a Last-Modified header" do
last_modified = File.mtime(Sinatra.application.options.public + '/foo.xml')
get_it('/foo.xml')
should.be.ok
body.should.not.be.empty
headers['Last-Modified'].should.equal last_modified.httpdate
end
specify "are not served when If-Modified-Since matches" do
last_modified = File.mtime(Sinatra.application.options.public + '/foo.xml')
@request = Rack::MockRequest.new(Sinatra.application)
@response = @request.get('/foo.xml', 'HTTP_IF_MODIFIED_SINCE' => last_modified.httpdate)
status.should.equal 304
body.should.be.empty
end
specify "should omit Content-Disposition headers" do
get_it('/foo.xml')
should.be.ok
headers['Content-Disposition'].should.be.nil
headers['Content-Transfer-Encoding'].should.be.nil
end
specify "should be served even if their path is url escaped" do
get_it('/fo%6f.xml')
should.be.ok
body.should.equal "<foo></foo>\n"
end
end
context "SendData" do
setup do
Sinatra.application = nil
end
specify "should send the data with options" do
get '/' do
send_data 'asdf', :status => 500
end
get_it '/'
should.be.server_error
body.should.equal 'asdf'
end
specify "should include a Content-Disposition header" do
get '/' do
send_file File.dirname(__FILE__) + '/public/foo.xml'
end
get_it '/'
should.be.ok
headers['Content-Disposition'].should.not.be.nil
headers['Content-Disposition'].should.equal 'attachment; filename="foo.xml"'
headers['Content-Transfer-Encoding'].should.equal 'binary'
end
end