snusnu-merb_resource_controller 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,196 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "GET" do
4
+
5
+ describe "resource(@article, @comment, :ratings)", :given => "3 Ratings exist" do
6
+
7
+ it "should respond successfully" do
8
+ request(resource(Article.first, Community::Comment.first, :ratings)).should be_successful
9
+ end
10
+
11
+ it "should render the :index template" do
12
+ @response = request(resource(Article.get(1), Community::Comment.get(1), :ratings))
13
+ @response.should have_selector("tr:eq(2) td:nth-child(1):contains('1')")
14
+ @response.should have_selector("tr:eq(2) td:nth-child(2):contains('comment body')")
15
+ @response.should have_selector("tr:eq(2) td:nth-child(3):contains('1')")
16
+ @response.should have_selector("tr:eq(3) td:nth-child(1):contains('2')")
17
+ @response.should have_selector("tr:eq(3) td:nth-child(2):contains('comment body')")
18
+ @response.should have_selector("tr:eq(3) td:nth-child(3):contains('1')")
19
+ @response.should_not have_selector("tr:eq(4)")
20
+
21
+ @response = request(resource(Article.get(1), Community::Comment.get(2), :ratings))
22
+ @response.should have_selector("tr:eq(2) td:nth-child(1):contains('3')")
23
+ @response.should have_selector("tr:eq(2) td:nth-child(2):contains('comment body')")
24
+ @response.should have_selector("tr:eq(2) td:nth-child(3):contains('1')")
25
+ @response.should_not have_selector("tr:eq(3)")
26
+ end
27
+
28
+ end
29
+
30
+ describe "resource(@article, @comment, :ratings, :new)", :given => "a Comment exists" do
31
+
32
+ before(:each) do
33
+ @response = request(resource(Article.first, Community::Comment.first, :ratings, :new))
34
+ end
35
+
36
+ it "should respond successfully" do
37
+ @response.should be_successful
38
+ end
39
+
40
+ it "should render the :new template" do
41
+ @response.should have_selector("h2:contains('New Rating')")
42
+ end
43
+
44
+ end
45
+
46
+ describe "resource(@article, @comment, @rating)", :given => "a Rating exists" do
47
+
48
+ before(:each) do
49
+ @response = request(resource(Article.first, Community::Comment.first, Community::Rating.first))
50
+ end
51
+
52
+ it "should respond successfully" do
53
+ @response.should be_successful
54
+ end
55
+
56
+ it "should render the :show template" do
57
+ @response.should have_selector("h2:contains('Show Rating')")
58
+ end
59
+
60
+ end
61
+
62
+ describe "resource(@article, @comment, @rating, :edit)", :given => "a Rating exists" do
63
+
64
+ before(:each) do
65
+ @response = request(resource(Article.first, Community::Comment.first, Community::Rating.first, :edit))
66
+ end
67
+
68
+ it "should respond successfully" do
69
+ @response.should be_successful
70
+ end
71
+
72
+ it "should render the :edit template" do
73
+ @response.should have_selector("h2:contains('Edit Rating')")
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
80
+ describe "POST resource(@article, @comment, :ratings)" do
81
+
82
+ describe "Success", :given => "a Comment exists" do
83
+
84
+ before(:each) do
85
+ @response = request(resource(Article.first, Community::Comment.first, :ratings),
86
+ :method => "POST",
87
+ :params => { :rating => { :id => nil, :rate => 1 }}
88
+ )
89
+ end
90
+
91
+ it "should redirect to resource(@article, @comment, @rating)" do
92
+ @response.should redirect_to(
93
+ resource(Article.first, Community::Comment.first, Community::Rating.first),
94
+ :message => {:notice => "Rating was successfully created"}
95
+ )
96
+ end
97
+
98
+ end
99
+
100
+ describe "Failure", :given => "a Comment exists" do
101
+
102
+ before(:each) do
103
+ @response = request(resource(Article.first, Community::Comment.first, :ratings),
104
+ :method => "POST",
105
+ :params => { :rating => { :id => nil, :rate => nil }}
106
+ )
107
+ end
108
+
109
+ it "should not be successful" do
110
+ @response.should_not be_successful
111
+ @response.status.should == 406
112
+ end
113
+
114
+ it "should render the :new action" do
115
+ @response.should have_selector("h2:contains('New Rating')")
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+
122
+ describe "PUT resource(@article, @comment, @rating)", :given => "a Rating exists" do
123
+
124
+ describe "Success" do
125
+
126
+ before(:each) do
127
+ @article = Article.first
128
+ @comment = Community::Comment.first
129
+ @rating = Community::Rating.first
130
+ @response = request(resource(@article, @comment, @rating), :method => "PUT",
131
+ :params => { :rating => { :id => @rating.id, :rate => 5 } })
132
+ end
133
+
134
+ it "should redirect to resource(@article, @comment, @rating)" do
135
+ @response.should redirect_to(resource(@article, @comment, @rating))
136
+ end
137
+
138
+ end
139
+
140
+ describe "Failure" do
141
+
142
+ before(:each) do
143
+ @article = Article.first
144
+ @comment = Community::Comment.first
145
+ @rating = Community::Rating.first
146
+ @response = request(resource(@article, @comment, @rating), :method => "PUT",
147
+ :params => { :rating => { :id => @rating.id, :rate => nil } })
148
+ end
149
+
150
+ it "should not be successful" do
151
+ @response.should_not be_successful
152
+ @response.status.should == 406
153
+ end
154
+
155
+ it "should render the :edit template" do
156
+ @response.should have_selector("h2:contains('Edit Rating')")
157
+ end
158
+
159
+ end
160
+
161
+ end
162
+
163
+ describe "DELETE resource(@article, @comment, @rating)" do
164
+
165
+ describe "Success", :given => "a Rating exists" do
166
+
167
+ before(:each) do
168
+ @response = request(
169
+ resource(Article.first, Community::Comment.first, Community::Rating.first),
170
+ :method => "DELETE"
171
+ )
172
+ end
173
+
174
+ it "should redirect to resource(@article, :comments)" do
175
+ @response.should redirect_to(resource(Article.first, Community::Comment.first, :ratings))
176
+ end
177
+
178
+ end
179
+
180
+ describe "Failure" do
181
+
182
+ before(:each) do
183
+ @response = request(
184
+ "/articles/#{Article.first.id}/comments/#{Community::Comment.first.id}/ratings/1",
185
+ :method => "DELETE"
186
+ )
187
+ end
188
+
189
+ it "should not be successful" do
190
+ @response.should_not be_successful
191
+ @response.status.should == 404
192
+ end
193
+
194
+ end
195
+
196
+ end
@@ -134,6 +134,108 @@ describe "POST resource(:articles)" do
134
134
 
135
135
  end
136
136
 
137
+ describe "XML POST resource(:articles)" do
138
+
139
+ describe "Success" do
140
+
141
+ before(:each) do
142
+ Article.all.destroy!
143
+ @response = request(resource(:articles),
144
+ :method => "POST",
145
+ :params => { :article => { :id => nil, :title => "Hey there", :body => "Me like snusnu" }},
146
+ "HTTP_ACCEPT" => "application/xml"
147
+ )
148
+ end
149
+
150
+ it "should return a 201 (Created) status" do
151
+ @response.status.should == 201
152
+ @response.body.length.should_not == 0
153
+ end
154
+
155
+ end
156
+
157
+ describe "Failure" do
158
+
159
+ before(:each) do
160
+ Article.all.destroy!
161
+ @response = request(
162
+ resource(:articles),
163
+ :method => "POST",
164
+ :params => {
165
+ :article => {
166
+ :id => nil,
167
+ :title => nil,
168
+ :body => "article body"
169
+ }
170
+ },
171
+ "HTTP_ACCEPT" => "application/xml"
172
+ )
173
+ end
174
+
175
+ it "should not be successful" do
176
+ @response.should_not be_successful
177
+ @response.status.should == 422
178
+ end
179
+
180
+ it "should return the serialized errors that occured" do
181
+ @response.body.size.should >= 0
182
+ end
183
+
184
+ end
185
+
186
+ end
187
+
188
+ describe "XML POST resource(:articles)" do
189
+
190
+ describe "Success" do
191
+
192
+ before(:each) do
193
+ Article.all.destroy!
194
+ @response = request(resource(:articles),
195
+ :method => "POST",
196
+ :params => { :article => { :id => nil, :title => "Hey there", :body => "Me like snusnu" }},
197
+ "HTTP_ACCEPT" => "application/json"
198
+ )
199
+ end
200
+
201
+ it "should return a 201 (Created) status" do
202
+ @response.status.should == 201
203
+ @response.body.length.should_not == 0
204
+ end
205
+
206
+ end
207
+
208
+ describe "Failure" do
209
+
210
+ before(:each) do
211
+ Article.all.destroy!
212
+ @response = request(
213
+ resource(:articles),
214
+ :method => "POST",
215
+ :params => {
216
+ :article => {
217
+ :id => nil,
218
+ :title => nil,
219
+ :body => "article body"
220
+ }
221
+ },
222
+ "HTTP_ACCEPT" => "application/json"
223
+ )
224
+ end
225
+
226
+ it "should not be successful" do
227
+ @response.should_not be_successful
228
+ @response.status.should == 422
229
+ end
230
+
231
+ it "should return the serialized errors that occured" do
232
+ @response.body.size.should >= 0
233
+ end
234
+
235
+ end
236
+
237
+ end
238
+
137
239
  describe "PUT resource(@article)", :given => "an Article exists" do
138
240
 
139
241
  describe "Success" do
@@ -177,6 +279,96 @@ describe "PUT resource(@article)", :given => "an Article exists" do
177
279
 
178
280
  end
179
281
 
282
+ describe "XML PUT resource(@article)", :given => "an Article exists" do
283
+
284
+ describe "Success" do
285
+
286
+ before(:each) do
287
+ @article = Article.first
288
+ @response = request(resource(@article),
289
+ :method => "PUT",
290
+ :params => { :article => { :id => @article.id } },
291
+ "HTTP_ACCEPT" => "application/xml")
292
+ end
293
+
294
+ it "should return an empty response with a 200 (OK) status" do
295
+ @response.status.should == 200
296
+ @response.body.length.should == 0
297
+ end
298
+
299
+ end
300
+
301
+
302
+ describe "Failure" do
303
+
304
+ before(:each) do
305
+ @article = Article.first
306
+ @response = request(
307
+ resource(@article),
308
+ :method => "PUT",
309
+ :params => { :article => { :id => @article.id, :title => nil, :body => "updated body" } },
310
+ "HTTP_ACCEPT" => "application/xml"
311
+ )
312
+ end
313
+
314
+ it "should not be successful" do
315
+ @response.should_not be_successful
316
+ @response.status.should == 422
317
+ end
318
+
319
+ it "should return the serialized errors that occured" do
320
+ @response.body.size.should >= 0
321
+ end
322
+
323
+ end
324
+
325
+ end
326
+
327
+ describe "JSON PUT resource(@article)", :given => "an Article exists" do
328
+
329
+ describe "Success" do
330
+
331
+ before(:each) do
332
+ @article = Article.first
333
+ @response = request(resource(@article),
334
+ :method => "PUT",
335
+ :params => { :article => { :id => @article.id } },
336
+ "HTTP_ACCEPT" => "application/json")
337
+ end
338
+
339
+ it "should return an empty response with a 200 (OK) status" do
340
+ @response.status.should == 200
341
+ @response.body.length.should == 0
342
+ end
343
+
344
+ end
345
+
346
+
347
+ describe "Failure" do
348
+
349
+ before(:each) do
350
+ @article = Article.first
351
+ @response = request(
352
+ resource(@article),
353
+ :method => "PUT",
354
+ :params => { :article => { :id => @article.id, :title => nil, :body => "updated body" } },
355
+ "HTTP_ACCEPT" => "application/json"
356
+ )
357
+ end
358
+
359
+ it "should not be successful" do
360
+ @response.should_not be_successful
361
+ @response.status.should == 422
362
+ end
363
+
364
+ it "should render the serialized errors that occured" do
365
+ @response.body.size.should >= 0
366
+ end
367
+
368
+ end
369
+
370
+ end
371
+
180
372
  describe "DELETE resource(@article)" do
181
373
 
182
374
  describe "Success", :given => "an Article exists" do
@@ -206,3 +398,77 @@ describe "DELETE resource(@article)" do
206
398
  end
207
399
 
208
400
  end
401
+
402
+ describe "XML DELETE resource(@article)" do
403
+
404
+ describe "Success", :given => "an Article exists" do
405
+
406
+ before(:each) do
407
+ @response = request(resource(Article.first),
408
+ :method => "DELETE",
409
+ "HTTP_ACCEPT" => "application/xml"
410
+ )
411
+ end
412
+
413
+ it "should return an empty response with a 200 (OK) status" do
414
+ @response.status.should == 200
415
+ @response.body.length.should == 0
416
+ end
417
+
418
+ end
419
+
420
+ describe "Failure" do
421
+
422
+ before(:each) do
423
+ Article.all.destroy!
424
+ @response = request('/articles/1',
425
+ :method => "DELETE",
426
+ "HTTP_ACCEPT" => "application/xml"
427
+ )
428
+ end
429
+
430
+ it "should not be successful" do
431
+ @response.should_not be_successful
432
+ @response.status.should == 404
433
+ end
434
+
435
+ end
436
+
437
+ end
438
+
439
+ describe "JSON DELETE resource(@article)" do
440
+
441
+ describe "Success", :given => "an Article exists" do
442
+
443
+ before(:each) do
444
+ @response = request(resource(Article.first),
445
+ :method => "DELETE",
446
+ "HTTP_ACCEPT" => "application/json"
447
+ )
448
+ end
449
+
450
+ it "should return an empty response with a 200 (OK) status" do
451
+ @response.status.should == 200
452
+ @response.body.length.should == 0
453
+ end
454
+
455
+ end
456
+
457
+ describe "Failure" do
458
+
459
+ before(:each) do
460
+ Article.all.destroy!
461
+ @response = request('/articles/1',
462
+ :method => "DELETE",
463
+ "HTTP_ACCEPT" => "application/json"
464
+ )
465
+ end
466
+
467
+ it "should not be successful" do
468
+ @response.should_not be_successful
469
+ @response.status.should == 404
470
+ end
471
+
472
+ end
473
+
474
+ end