restfulness 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +6 -5
- data/README.md +98 -80
- data/lib/restfulness.rb +3 -0
- data/lib/restfulness/dispatchers/rack.rb +1 -0
- data/lib/restfulness/headers/accept.rb +66 -0
- data/lib/restfulness/headers/media_type.rb +127 -0
- data/lib/restfulness/request.rb +43 -15
- data/lib/restfulness/version.rb +1 -1
- data/restfulness.gemspec +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/application_spec.rb +14 -14
- data/spec/unit/dispatcher_spec.rb +1 -1
- data/spec/unit/dispatchers/rack_spec.rb +21 -20
- data/spec/unit/exceptions_spec.rb +5 -5
- data/spec/unit/headers/accept_spec.rb +70 -0
- data/spec/unit/headers/media_type_spec.rb +262 -0
- data/spec/unit/http_authentication/basic_spec.rb +7 -7
- data/spec/unit/path_spec.rb +19 -19
- data/spec/unit/request_spec.rb +96 -44
- data/spec/unit/requests/authorization_header_spec.rb +8 -8
- data/spec/unit/requests/authorization_spec.rb +3 -3
- data/spec/unit/resource_spec.rb +28 -28
- data/spec/unit/resources/authentication_spec.rb +2 -2
- data/spec/unit/resources/events_spec.rb +1 -1
- data/spec/unit/response_spec.rb +53 -53
- data/spec/unit/route_spec.rb +24 -24
- data/spec/unit/router_spec.rb +29 -29
- data/spec/unit/sanitizer_spec.rb +9 -9
- metadata +13 -7
data/spec/unit/request_spec.rb
CHANGED
@@ -23,50 +23,55 @@ describe Restfulness::Request do
|
|
23
23
|
let :resource do
|
24
24
|
RequestResource
|
25
25
|
end
|
26
|
+
|
27
|
+
# Fake IO class, meant to mimic Puma::NullIO
|
28
|
+
class EmptyIO
|
29
|
+
def read(count = nil, buffer = nil); ""; end
|
30
|
+
end
|
26
31
|
|
27
32
|
|
28
33
|
describe "#initialize" do
|
29
34
|
it "should prepare basic objects" do
|
30
|
-
obj.action.
|
31
|
-
obj.headers.
|
32
|
-
obj.body.
|
35
|
+
expect(obj.action).to be_nil
|
36
|
+
expect(obj.headers).to eql({})
|
37
|
+
expect(obj.body).to be_nil
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
36
41
|
describe "#uri=" do
|
37
42
|
it "should convert URL into URI" do
|
38
43
|
obj.uri = "https://example.com/project/12345"
|
39
|
-
obj.uri.path.
|
44
|
+
expect(obj.uri.path).to eql("/project/12345")
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
48
|
describe "#action" do
|
44
49
|
it "should provide basic action" do
|
45
50
|
obj.action = :get
|
46
|
-
obj.action.
|
51
|
+
expect(obj.action).to eql(:get)
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
55
|
describe "#path" do
|
51
56
|
it "should be nil if there is no route" do
|
52
|
-
obj.
|
53
|
-
obj.path.
|
57
|
+
allow(obj).to receive(:route).and_return(nil)
|
58
|
+
expect(obj.path).to be_nil
|
54
59
|
end
|
55
60
|
|
56
61
|
context "with route" do
|
57
62
|
let :path do
|
58
63
|
obj.uri = "https://example.com/project/12345"
|
59
64
|
route = Restfulness::Route.new('project', resource)
|
60
|
-
obj.
|
65
|
+
allow(obj).to receive(:route).and_return(route)
|
61
66
|
obj.path
|
62
67
|
end
|
63
68
|
|
64
69
|
it "should build path" do
|
65
|
-
path.to_s.
|
70
|
+
expect(path.to_s).to eql('/project/12345')
|
66
71
|
end
|
67
72
|
|
68
73
|
it "should re-use same path object" do
|
69
|
-
path.object_id.
|
74
|
+
expect(path.object_id).to eql(obj.path.object_id)
|
70
75
|
end
|
71
76
|
end
|
72
77
|
end
|
@@ -75,57 +80,88 @@ describe Restfulness::Request do
|
|
75
80
|
it "should ask the router for a route" do
|
76
81
|
obj.uri = "https://example.com/project/12345"
|
77
82
|
route = double(:Route)
|
78
|
-
app.router.
|
79
|
-
obj.route.
|
83
|
+
expect(app.router).to receive(:route_for).with(obj.uri.path).and_return(route)
|
84
|
+
expect(obj.route).to eql(route)
|
80
85
|
end
|
81
86
|
end
|
82
87
|
|
83
88
|
describe "#query" do
|
84
89
|
it "should parse uri with query" do
|
85
90
|
obj.uri = "https://example.com/project/12345?foo=bar&test=23"
|
86
|
-
obj.query.
|
87
|
-
obj.query[:foo].
|
88
|
-
obj.query[:test].to_i.
|
91
|
+
expect(obj.query).to be_a(HashWithIndifferentAccess)
|
92
|
+
expect(obj.query[:foo]).to eql('bar')
|
93
|
+
expect(obj.query[:test].to_i).to eql(23)
|
89
94
|
end
|
90
95
|
|
91
96
|
it "should handle uri with empty query" do
|
92
97
|
obj.uri = "https://example.com/project/12345"
|
93
|
-
obj.query.
|
98
|
+
expect(obj.query).to be_empty
|
94
99
|
end
|
95
100
|
|
96
101
|
it "should handle complex query items" do
|
97
102
|
obj.uri = "https://example.com/project/12345?foo[]=bar&foo[]=bar2&hash[a]=b&hash[b]=c"
|
98
|
-
obj.query[:foo].
|
99
|
-
obj.query[:hash].
|
100
|
-
obj.query[:hash][:a].
|
103
|
+
expect(obj.query[:foo]).to eql(['bar', 'bar2'])
|
104
|
+
expect(obj.query[:hash]).to be_a(HashWithIndifferentAccess)
|
105
|
+
expect(obj.query[:hash][:a]).to eql('b')
|
101
106
|
end
|
102
107
|
end
|
103
108
|
|
104
109
|
describe "#sanitized_query_string" do
|
105
110
|
it "should be empty if no query" do
|
106
111
|
obj.uri = "https://example.com/project/12345"
|
107
|
-
obj.sanitized_query_string.
|
112
|
+
expect(obj.sanitized_query_string).to be_empty
|
108
113
|
end
|
109
114
|
it "should filter out bad keys" do # See sanitizer tests for more
|
110
115
|
obj.uri = "https://example.com/project/12345?foo=bar&password=safe"
|
111
|
-
obj.sanitized_query_string.
|
112
|
-
obj.sanitized_query_string.
|
116
|
+
expect(obj.sanitized_query_string).to match(/foo=bar/)
|
117
|
+
expect(obj.sanitized_query_string).not_to match(/password=safe/)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#content_type" do
|
122
|
+
it "should be nil if no content type" do
|
123
|
+
expect(obj.content_type).to be_nil
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should provide a content type object for the request" do
|
127
|
+
obj.headers[:content_type] = "application/json; charset=utf-8"
|
128
|
+
expect(obj.content_type).to be_a(Restfulness::Headers::MediaType)
|
129
|
+
expect(obj.content_type.json?).to be true
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should cache content_type object" do
|
133
|
+
obj.headers[:content_type] = "application/json"
|
134
|
+
obj.content_type.freeze
|
135
|
+
expect(obj.content_type.frozen?).to be true
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "#accept" do
|
140
|
+
it "should be nil if no accept header provided" do
|
141
|
+
expect(obj.accept).to be_nil
|
142
|
+
end
|
143
|
+
it "should provide a accept object for the request" do
|
144
|
+
obj.headers[:accept] = "application/json; version=3"
|
145
|
+
expect(obj.accept).to be_a(Restfulness::Headers::Accept)
|
146
|
+
expect(obj.accept.json?).to be true
|
147
|
+
expect(obj.accept.version).to eql("3")
|
113
148
|
end
|
114
149
|
end
|
115
150
|
|
116
151
|
describe "#params" do
|
117
152
|
it "should not return anything for empty body" do
|
118
|
-
obj.
|
119
|
-
obj.params.
|
153
|
+
allow(obj).to receive(:body).and_return(nil)
|
154
|
+
expect(obj.params).to be_empty
|
120
155
|
end
|
121
156
|
|
122
157
|
it "should raise 400 bad request for invalid json body" do
|
123
158
|
obj.headers[:content_type] = "application/json; charset=utf-8"
|
124
|
-
obj.
|
159
|
+
allow(obj).to receive(:body).and_return('{"data":"invalid}')
|
125
160
|
expect {
|
126
161
|
obj.params
|
127
162
|
}.to raise_error(Restfulness::HTTPException, "Bad Request"){ |exception|
|
128
163
|
expect(exception.status).to eq 400
|
164
|
+
expect(exception.payload).to eq "Invalid JSON in request body"
|
129
165
|
}
|
130
166
|
end
|
131
167
|
|
@@ -150,78 +186,94 @@ describe Restfulness::Request do
|
|
150
186
|
it "should decode a JSON body" do
|
151
187
|
obj.headers[:content_type] = "application/json"
|
152
188
|
obj.body = "{\"foo\":\"bar\"}"
|
153
|
-
obj.params['foo'].
|
189
|
+
expect(obj.params['foo']).to eql('bar')
|
154
190
|
end
|
155
191
|
|
156
192
|
it "should decode a WWW Form body" do
|
157
193
|
obj.headers[:content_type] = "application/x-www-form-urlencoded"
|
158
194
|
obj.body = "grant_type=password&username=johndoe&password=A3ddj3w"
|
159
|
-
obj.params['grant_type'].
|
160
|
-
obj.params['username'].
|
195
|
+
expect(obj.params['grant_type']).to eql('password')
|
196
|
+
expect(obj.params['username']).to eql('johndoe')
|
161
197
|
end
|
162
198
|
|
163
199
|
it "should deal with empty WWW Form body" do
|
164
200
|
obj.headers[:content_type] = "application/x-www-form-urlencoded"
|
165
201
|
obj.body = ""
|
166
|
-
obj.params.
|
202
|
+
expect(obj.params).to be_empty
|
167
203
|
end
|
168
204
|
|
169
205
|
it "should deal with a StringIO WWW form body" do
|
170
206
|
obj.headers[:content_type] = "application/x-www-form-urlencoded"
|
171
207
|
obj.body = StringIO.new("grant_type=password&username=johndoe&password=A3ddj3w")
|
172
|
-
obj.params['grant_type'].
|
173
|
-
obj.params['username'].
|
208
|
+
expect(obj.params['grant_type']).to eql('password')
|
209
|
+
expect(obj.params['username']).to eql('johndoe')
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should deal with a Tempfile WWW form body" do
|
213
|
+
obj.headers[:content_type] = "application/x-www-form-urlencoded"
|
214
|
+
file = Tempfile.new("params")
|
215
|
+
file.write("grant_type=password&username=johndoe&password=A3ddj3w")
|
216
|
+
file.rewind
|
217
|
+
obj.body = file
|
218
|
+
expect(obj.params['grant_type']).to eql('password')
|
219
|
+
expect(obj.params['username']).to eql('johndoe')
|
174
220
|
end
|
175
221
|
|
176
222
|
it "should deal with empty JSON String body" do
|
177
223
|
obj.headers[:content_type] = "application/json"
|
178
224
|
obj.body = ""
|
179
|
-
obj.params.
|
225
|
+
expect(obj.params).to be_empty
|
180
226
|
end
|
181
227
|
|
182
228
|
it "should deal with empty JSON StringIO body" do
|
183
229
|
obj.headers[:content_type] = "application/json"
|
184
230
|
obj.body = StringIO.new("")
|
185
|
-
obj.params.
|
231
|
+
expect(obj.params).to be_empty
|
232
|
+
end
|
233
|
+
|
234
|
+
it "should handle some crappy IO object" do
|
235
|
+
obj.body = EmptyIO.new()
|
236
|
+
expect(obj.body).to receive(:read)
|
237
|
+
expect(obj.params).to be_empty
|
186
238
|
end
|
187
239
|
end
|
188
240
|
|
189
241
|
describe "#sanitized_params" do
|
190
242
|
it "should provide nil if the params hash has not been used" do
|
191
|
-
obj.
|
192
|
-
obj.sanitized_params.
|
243
|
+
allow(obj).to receive(:body).and_return(nil)
|
244
|
+
expect(obj.sanitized_params).to be_nil
|
193
245
|
end
|
194
246
|
it "should provide santized params if params have been used" do
|
195
247
|
obj.headers[:content_type] = "application/json"
|
196
248
|
obj.body = "{\"foo\":\"bar\",\"password\":\"safe\"}"
|
197
|
-
obj.params['password'].
|
198
|
-
obj.sanitized_params['foo'].
|
199
|
-
obj.sanitized_params['password'].
|
200
|
-
obj.sanitized_params['password'].
|
249
|
+
expect(obj.params['password']).to eql('safe')
|
250
|
+
expect(obj.sanitized_params['foo']).to eql('bar')
|
251
|
+
expect(obj.sanitized_params['password']).not_to be_blank
|
252
|
+
expect(obj.sanitized_params['password']).not_to eql('safe')
|
201
253
|
end
|
202
254
|
end
|
203
255
|
|
204
256
|
describe "#http_accept_language" do
|
205
257
|
it "should provide an instance of Parser" do
|
206
|
-
obj.http_accept_language.
|
258
|
+
expect(obj.http_accept_language).to be_a(HttpAcceptLanguage::Parser)
|
207
259
|
end
|
208
260
|
it "should use the accept_language header" do
|
209
261
|
header = "en-us,en-gb;q=0.8,en"
|
210
262
|
obj.headers[:accept_language] = header
|
211
|
-
obj.http_accept_language.header.
|
263
|
+
expect(obj.http_accept_language.header).to eql(header)
|
212
264
|
end
|
213
265
|
end
|
214
266
|
|
215
267
|
describe "method helpers" do
|
216
268
|
it "should respond to method questions" do
|
217
269
|
[:get?, :post?, :put?, :delete?, :head?, :options?].each do |q|
|
218
|
-
obj.
|
270
|
+
expect(obj).to respond_to(q)
|
219
271
|
end
|
220
272
|
end
|
221
273
|
it "should suggest type of method" do
|
222
274
|
obj.action = :get
|
223
|
-
obj.get
|
224
|
-
obj.post
|
275
|
+
expect(obj.get?).to be true
|
276
|
+
expect(obj.post?).to be false
|
225
277
|
end
|
226
278
|
end
|
227
279
|
|
@@ -10,26 +10,26 @@ describe Restfulness::Requests::AuthorizationHeader do
|
|
10
10
|
|
11
11
|
it "should accept standard header" do
|
12
12
|
obj = klass.new("Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
|
13
|
-
obj.schema.
|
14
|
-
obj.params.
|
13
|
+
expect(obj.schema).to eql("Basic")
|
14
|
+
expect(obj.params).to eql("QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should accept non-standard schema" do
|
18
18
|
obj = klass.new("bAsic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
|
19
|
-
obj.schema.
|
20
|
-
obj.params.
|
19
|
+
expect(obj.schema).to eql("Basic")
|
20
|
+
expect(obj.params).to eql("QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should ignore any whitespace" do
|
24
24
|
obj = klass.new(" Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== ")
|
25
|
-
obj.schema.
|
26
|
-
obj.params.
|
25
|
+
expect(obj.schema).to eql("Basic")
|
26
|
+
expect(obj.params).to eql("QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should append additional stuff" do
|
30
30
|
obj = klass.new("Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== foooo")
|
31
|
-
obj.schema.
|
32
|
-
obj.params.
|
31
|
+
expect(obj.schema).to eql("Basic")
|
32
|
+
expect(obj.params).to eql("QWxhZGRpbjpvcGVuIHNlc2FtZQ== foooo")
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
@@ -17,14 +17,14 @@ describe Restfulness::Requests::Authorization do
|
|
17
17
|
|
18
18
|
it "should be nil if no authorization header resent" do
|
19
19
|
auth = request.authorization
|
20
|
-
auth.
|
20
|
+
expect(auth).to be_nil
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should build new authorization header when present" do
|
24
24
|
request.headers[:authorization] = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
|
25
25
|
auth = request.authorization
|
26
|
-
auth.
|
27
|
-
auth.schema.
|
26
|
+
expect(auth).to be_a(Restfulness::Requests::AuthorizationHeader)
|
27
|
+
expect(auth.schema).to eql("Basic")
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
data/spec/unit/resource_spec.rb
CHANGED
@@ -37,8 +37,8 @@ describe Restfulness::Resource do
|
|
37
37
|
end
|
38
38
|
it "should assign request and response" do
|
39
39
|
obj = resource.new(request, response)
|
40
|
-
obj.request.
|
41
|
-
obj.response.
|
40
|
+
expect(obj.request).to eql(request)
|
41
|
+
expect(obj.response).to eql(response)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -49,10 +49,10 @@ describe Restfulness::Resource do
|
|
49
49
|
|
50
50
|
it "should return list of supported methods" do
|
51
51
|
obj = resource.new(request, response)
|
52
|
-
obj.options.
|
52
|
+
expect(obj.options).to be_nil
|
53
53
|
acts = response.headers['Allow'].split(/, /)
|
54
54
|
['GET', 'POST', 'OPTIONS'].each do |act|
|
55
|
-
acts.
|
55
|
+
expect(acts).to include(act)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -64,8 +64,8 @@ describe Restfulness::Resource do
|
|
64
64
|
it "should perform action" do
|
65
65
|
request.action = :get
|
66
66
|
obj = resource.new(request, response)
|
67
|
-
obj.
|
68
|
-
obj.call.
|
67
|
+
expect(obj).to receive(:get).and_return('res')
|
68
|
+
expect(obj.call).to eql('res')
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
@@ -78,13 +78,13 @@ describe Restfulness::Resource do
|
|
78
78
|
it "should be true on valid method" do
|
79
79
|
request.action = :get
|
80
80
|
obj = resource.new(request, response)
|
81
|
-
obj.method_allowed
|
81
|
+
expect(obj.method_allowed?).to be true
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should be false on invalid method" do
|
85
85
|
request.action = :put
|
86
86
|
obj = resource.new(request, response)
|
87
|
-
obj.method_allowed
|
87
|
+
expect(obj.method_allowed?).to be false
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -99,14 +99,14 @@ describe Restfulness::Resource do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should all be true for questions" do
|
102
|
-
obj.exists
|
103
|
-
obj.authorized
|
104
|
-
obj.allowed
|
102
|
+
expect(obj.exists?).to be true
|
103
|
+
expect(obj.authorized?).to be true
|
104
|
+
expect(obj.allowed?).to be true
|
105
105
|
end
|
106
106
|
|
107
107
|
it "should be nil for values" do
|
108
|
-
obj.last_modified.
|
109
|
-
obj.etag.
|
108
|
+
expect(obj.last_modified).to be_nil
|
109
|
+
expect(obj.etag).to be_nil
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -131,12 +131,12 @@ describe Restfulness::Resource do
|
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should try to set the locale" do
|
134
|
-
obj.
|
134
|
+
expect(obj).to receive(:set_locale)
|
135
135
|
obj.check_callbacks
|
136
136
|
end
|
137
137
|
|
138
138
|
it "should raise error on invalid method" do
|
139
|
-
obj.
|
139
|
+
allow(obj).to receive(:method_allowed?).and_return(false)
|
140
140
|
expect {
|
141
141
|
obj.check_callbacks
|
142
142
|
}.to raise_error(Restfulness::HTTPException, "Method Not Allowed")
|
@@ -145,7 +145,7 @@ describe Restfulness::Resource do
|
|
145
145
|
[:head, :get, :patch, :delete].each do |action|
|
146
146
|
it "should raise error when not exists for #{action.to_s.upcase}" do
|
147
147
|
request.action = action
|
148
|
-
obj.
|
148
|
+
allow(obj).to receive(:exists?).and_return(false)
|
149
149
|
expect {
|
150
150
|
obj.check_callbacks
|
151
151
|
}.to raise_error(Restfulness::HTTPException, "Resource Not Found")
|
@@ -155,20 +155,20 @@ describe Restfulness::Resource do
|
|
155
155
|
[:put, :post].each do |action|
|
156
156
|
it "should not check exists? for #{action.to_s.upcase}" do
|
157
157
|
obj.request.action = action
|
158
|
-
obj.
|
158
|
+
expect(obj).not_to receive(:exists?)
|
159
159
|
obj.check_callbacks
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
163
|
it "should raise error when not authorized" do
|
164
|
-
obj.
|
164
|
+
allow(obj).to receive(:authorized?).and_return(false)
|
165
165
|
expect {
|
166
166
|
obj.check_callbacks
|
167
167
|
}.to raise_error(Restfulness::HTTPException, "Unauthorized")
|
168
168
|
end
|
169
169
|
|
170
170
|
it "should raise error when not allowed" do
|
171
|
-
obj.
|
171
|
+
allow(obj).to receive(:allowed?).and_return(false)
|
172
172
|
expect {
|
173
173
|
obj.check_callbacks
|
174
174
|
}.to raise_error(Restfulness::HTTPException, "Forbidden")
|
@@ -176,7 +176,7 @@ describe Restfulness::Resource do
|
|
176
176
|
|
177
177
|
describe "with etag" do
|
178
178
|
it "should raise error when equal" do
|
179
|
-
obj.
|
179
|
+
allow(obj).to receive(:etag).and_return('sometag')
|
180
180
|
request.headers[:if_none_match] = 'sometag'
|
181
181
|
expect {
|
182
182
|
obj.check_callbacks
|
@@ -184,7 +184,7 @@ describe Restfulness::Resource do
|
|
184
184
|
end
|
185
185
|
|
186
186
|
it "should continue if not equal" do
|
187
|
-
obj.
|
187
|
+
allow(obj).to receive(:etag).and_return('sometag')
|
188
188
|
request.headers[:if_none_match] = 'someoldtag'
|
189
189
|
expect {
|
190
190
|
obj.check_callbacks
|
@@ -192,7 +192,7 @@ describe Restfulness::Resource do
|
|
192
192
|
end
|
193
193
|
|
194
194
|
it "should not be called unless action is :get or :head" do
|
195
|
-
obj.
|
195
|
+
expect(obj).not_to receive(:etag)
|
196
196
|
request.headers[:if_none_match] = 'sometag'
|
197
197
|
[:post, :put, :delete].each do |action|
|
198
198
|
request.action = action
|
@@ -204,7 +204,7 @@ describe Restfulness::Resource do
|
|
204
204
|
describe "with if modified" do
|
205
205
|
it "should raise error when equal" do
|
206
206
|
time = Time.now
|
207
|
-
obj.
|
207
|
+
allow(obj).to receive(:last_modified).and_return(time)
|
208
208
|
request.headers[:if_modified_since] = time.to_s
|
209
209
|
expect {
|
210
210
|
obj.check_callbacks
|
@@ -213,7 +213,7 @@ describe Restfulness::Resource do
|
|
213
213
|
|
214
214
|
it "should continue if not equal" do
|
215
215
|
time = Time.now
|
216
|
-
obj.
|
216
|
+
allow(obj).to receive(:last_modified).and_return(time)
|
217
217
|
request.headers[:if_modified_since] = (time - 60).to_s
|
218
218
|
expect {
|
219
219
|
obj.check_callbacks
|
@@ -221,7 +221,7 @@ describe Restfulness::Resource do
|
|
221
221
|
end
|
222
222
|
|
223
223
|
it "should not be called unless action is :get or :head" do
|
224
|
-
obj.
|
224
|
+
expect(obj).not_to receive(:last_modified)
|
225
225
|
request.headers[:if_modified_since] = 'somedate'
|
226
226
|
[:post, :put, :delete].each do |action|
|
227
227
|
request.action = action
|
@@ -251,16 +251,16 @@ describe Restfulness::Resource do
|
|
251
251
|
describe "#locale" do
|
252
252
|
it "should return acceptable locale" do
|
253
253
|
I18n.available_locales = ['es']
|
254
|
-
obj.send(:locale).
|
254
|
+
expect(obj.send(:locale)).to eql(:es)
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
258
|
describe "#set_locale" do
|
259
259
|
it "should set the global locale value" do
|
260
260
|
I18n.available_locales = ['en', 'es']
|
261
|
-
I18n.locale.
|
261
|
+
expect(I18n.locale).not_to eql(:es)
|
262
262
|
obj.send(:set_locale)
|
263
|
-
I18n.locale.
|
263
|
+
expect(I18n.locale).to eql(:es)
|
264
264
|
end
|
265
265
|
end
|
266
266
|
|