-
Notifications
You must be signed in to change notification settings - Fork 4
/
session_spec.rb
145 lines (121 loc) · 3.41 KB
/
session_spec.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
require 'spec_helper'
describe Webmachine::Test::Session do
include Webmachine::Test
describe "#request" do
it "returns the Webmachine::Request object" do
get '/'
request.should be_a(Webmachine::Request)
end
context "without a request" do
it "raises an exception" do
expect { request }.to raise_error(Webmachine::Test::Error)
end
end
end
describe "#response" do
it "returns the Webmachine::Response object" do
get '/'
response.should be_a(Webmachine::Response)
end
context "without a request" do
it "raises an exception" do
expect { response }.to raise_error(Webmachine::Test::Error)
end
end
end
shared_examples_for "a HTTP verb" do
it "executes a GET request" do
send verb, '/'
request.method.should == verb.upcase
end
it "sets the provided header" do
send verb, '/', :headers => {'Accept' => 'application/x-gunzip'}
request.headers['Accept'].should == 'application/x-gunzip'
end
context "with a complete URI" do
it "sets the correct host header" do
send verb, 'http://example.com:3000/foo'
request.headers['Host'].should == 'example.com:3000'
end
end
context "with an incomplete URI" do
it "sets the correct host header" do
send verb, '/foo'
request.headers['Host'].should == 'localhost'
end
end
it "accepts query parameters in the path" do
send verb,'/?lang=en&foo=bar'
request.query['lang'].should == 'en'
request.query['foo'].should == 'bar'
end
it "accepts query parameters in the options hash" do
send verb, '/?foo=bar', :params => {'lang' => 'en'}
request.query['lang'].should == 'en'
request.query['foo'].should == 'bar'
end
it "escapes the query parameters" do
expect {
send verb, '/', :params => {'test' => 'foo bar'}
}.to_not raise_error(URI::InvalidComponentError)
end
it "encodes the query key and value." do
send verb, '/', :params => { "foo=" => "bar=" }
request.uri.query.should == "foo%3D=bar%3D"
end
it "returns the Webmachine::Request object" do
send(verb, '/').should be_a(Webmachine::Response)
end
end
describe "#get" do
let(:verb) { 'get' }
it_should_behave_like "a HTTP verb"
end
describe "#post" do
let(:verb) { 'post' }
it_should_behave_like "a HTTP verb"
end
describe "#put" do
let(:verb) { 'put' }
it_should_behave_like "a HTTP verb"
end
describe "#patch" do
let(:verb) { 'patch' }
it_should_behave_like "a HTTP verb"
end
describe "#delete" do
let(:verb) { 'delete' }
it_should_behave_like "a HTTP verb"
end
describe "#head" do
let(:verb) { 'head' }
it_should_behave_like "a HTTP verb"
end
describe "#options" do
let(:verb) { 'options' }
it_should_behave_like "a HTTP verb"
end
describe "#header" do
it "sets the given header value" do
header('Foo', 'bar-baz')
get '/'
request.headers['Foo'].should == 'bar-baz'
end
end
describe "#body" do
context "given a string" do
it "sets the body" do
body('test body')
get '/'
request.body.read.should == 'test body'
end
end
context "given an IO object" do
it "sets the body" do
body(StringIO.new('foo'))
get '/'
request.body.read.should == 'foo'
end
end
end
end