OSDN Git Service

b13ab7b6bccf5b88b96ba74e87068bee743f64ca
[pettanr/pettanr.git] / spec / controllers / original_pictures_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3
4 describe OriginalPicturesController do
5   before do
6     Factory :admin
7     @user = Factory( :user_yas)
8     @author = @user.author
9     @artist = Factory :artist_yas, :author_id => @author.id
10   end
11
12   describe '一覧表示に於いて' do
13     before do
14       @op = Factory :original_picture, :artist_id => @artist.id 
15       sign_in @user
16       OriginalPicture.stub(:list).and_return([@op, @op, @op])
17     end
18     context 'パラメータpageについて' do
19       it '@pageに値が入る' do
20         get :index, :page => 5
21         assigns(:page).should eq 5
22       end
23       it '省略されると@pageに1値が入る' do
24         get :index
25         assigns(:page).should eq 1
26       end
27     end
28     context 'つつがなく終わるとき' do
29       it 'ステータスコード200 OKを返す' do
30         get :index
31         response.should be_success 
32       end
33       it '原画モデルに一覧を問い合わせている' do
34         OriginalPicture.should_receive(:list).exactly(1)\r
35         get :index
36       end
37       it '@original_picturesにリストを取得している' do
38         get :index
39         assigns(:original_pictures).should have_at_least(3).items
40       end
41       context 'html形式' do
42         it 'indexテンプレートを描画する' do
43           get :index
44           response.should render_template("index")
45         end
46       end
47       context 'json形式' do
48         it 'jsonデータを返す' do
49           get :index, :format => :json
50           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
51         end
52         it 'データがリスト構造になっている' do
53           get :index, :format => :json
54           json = JSON.parse response.body
55           json.should have_at_least(3).items
56         end
57         it 'リストの先頭くらいは原画っぽいものであって欲しい' do
58           get :index, :format => :json
59           json = JSON.parse response.body
60           json.first.has_key?("ext").should be_true
61         end
62       end
63     end
64     context '作家権限がないとき' do
65       before do
66         sign_out @user
67       end
68       context 'html形式' do
69         it 'ステータスコード302 Foundを返す' do
70           get :index
71           response.status.should eq 302
72         end
73         it 'サインインページへ遷移する' do
74           get :index
75           response.should redirect_to '/users/sign_in'
76         end
77       end
78       context 'json形式' do
79         it 'ステータスコード401 Unauthorizedを返す' do
80           get :index, :format => :json
81           response.status.should eq 401
82         end
83         it '応答メッセージにUnauthorizedを返す' do
84           get :index, :format => :json
85           response.message.should match(/Unauthorized/)
86         end
87       end
88     end
89     context '作家が絵師でないとき' do
90       before do
91         Author.any_instance.stub(:artist?).and_return(false)
92       end
93       context 'html形式' do
94         it 'ステータスコード302 Foundを返す' do
95           get :index
96           response.status.should eq 302
97         end
98         it '絵師登録ページへ遷移する' do
99           get :index
100           response.should redirect_to new_artist_path
101         end
102       end
103       context 'json形式' do
104         it '例外403 forbiddenを返す' do
105           lambda{
106             get :index, :format => :json
107           }.should raise_error(ActiveRecord::Forbidden)
108         end
109       end
110     end
111   end
112   
113   describe '単体表示に於いて' do
114     before do
115       @pic = Factory :original_picture, :artist_id => @artist.id 
116       sign_in @user
117       OriginalPicture.stub(:show).and_return(@pic)
118     end
119     context 'つつがなく終わるとき' do
120       it 'ステータスコード200 OKを返す' do
121         get :show, :id => @pic.id
122         response.should be_success
123       end
124       it '原画モデルに単体取得を問い合わせている' do
125         OriginalPicture.should_receive(:show).exactly(1)\r
126         get :show
127       end
128       it '@original_pictureにアレを取得している' do
129         get :show, :id => @pic.id
130         assigns(:original_picture).id.should eq(@pic.id)
131       end
132       context 'html形式' do
133         it 'showテンプレートを描画する' do
134           get :show, :id => @pic.id
135           response.should render_template("show")
136         end
137       end
138       context 'json形式' do
139         it 'jsonデータを返す' do
140           get :show, :id => @pic.id, :format => :json
141           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
142         end
143         it 'データがアレになっている' do
144           get :show, :id => @pic.id, :format => :json
145           json = JSON.parse response.body
146           json["ext"].should match(/png/)
147         end
148       end
149       #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
150       #renderが働かず、エラーとなってしまう。そこで、原画のファイル取得部分に
151       #スタブをおいてsend_dataがデータを返す体裁でテストする。
152       context 'png形式' do
153         it '画像モデルに画像データを問い合わせる' do
154           OriginalPicture.any_instance.should_receive(:restore).exactly(1)\r
155           get :show, :id => @pic.id, :format => :png
156         end
157         it '画像を送信する' do
158           OriginalPicture.any_instance.stub(:restore).and_return('aaa')\r
159           get :show, :id => @pic.id, :format => :png
160           response.body.should eq 'aaa'
161         end
162       end
163       context 'gif形式' do
164         it '画像モデルに画像データを問い合わせる' do
165           OriginalPicture.any_instance.should_receive(:restore).exactly(1)\r
166           get :show, :id => @pic.id, :format => :gif
167         end
168         it '画像を送信する' do
169           OriginalPicture.any_instance.stub(:restore).and_return('bbb')\r
170           get :show, :id => @pic.id, :format => :gif
171           response.body.should eq 'bbb'
172         end
173       end
174       context 'jpeg形式' do
175         it '画像モデルに画像データを問い合わせる' do
176           OriginalPicture.any_instance.should_receive(:restore).exactly(1)\r
177           get :show, :id => @pic.id, :format => :jpeg
178         end
179         it '画像を送信する' do
180           OriginalPicture.any_instance.stub(:restore).and_return('ccc')\r
181           get :show, :id => @pic.id, :format => :jpeg
182           response.body.should eq 'ccc'
183         end
184       end
185     end
186     context '作家権限がないとき' do
187       before do
188         sign_out @user
189       end
190       context 'html形式' do
191         it 'ステータスコード302 Foundを返す' do
192           get :show, :id => @pic.id
193           response.status.should eq 302
194         end
195         it 'サインインページへ遷移する' do
196           get :show, :id => @pic.id
197           response.body.should redirect_to '/users/sign_in'
198         end
199       end
200       context 'json形式' do
201         it 'ステータスコード401 Unauthorizedを返す' do
202           get :show, :id => @pic.id, :format => :json
203           response.status.should eq 401
204         end
205         it '応答メッセージにUnauthorizedを返す' do
206           get :show, :id => @pic.id, :format => :json
207           response.message.should match(/Unauthorized/)
208         end
209       end
210     end
211     context '作家が絵師でないとき' do
212       before do
213         Author.any_instance.stub(:artist?).and_return(false)
214       end
215       context 'html形式' do
216         it 'ステータスコード302 Foundを返す' do
217           get :show, :id => @pic.id
218           response.status.should eq 302
219         end
220         it '絵師登録ページへ遷移する' do
221           get :show, :id => @pic.id
222           response.should redirect_to new_artist_path
223         end
224       end
225       context 'json形式' do
226         it '例外403 forbiddenを返す' do
227           lambda{
228             get :show, :id => @pic.id, :format => :json
229           }.should raise_error(ActiveRecord::Forbidden)
230         end
231       end
232     end
233     context '対象原画がないとき' do
234       before do
235         OriginalPicture.unstub(:show)
236       end
237       context 'html形式' do
238         it '例外404 not_foundを返す' do
239           lambda{
240             get :show, :id => 0
241           }.should raise_error(ActiveRecord::RecordNotFound)
242         end
243       end
244       context 'json形式' do
245         it '例外404 not_foundを返す' do
246           lambda{ 
247             get :show, :id => 0, :format => :json
248           }.should raise_error(ActiveRecord::RecordNotFound)
249         end
250       end
251     end
252     context '他人の原画を見ようとしたとき' do
253       before do
254         OriginalPicture.stub(:show).and_return(@pic)
255         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
256       end
257       context 'html形式' do
258         it '例外403 forbiddenを返す' do
259           lambda{
260             get :show, :id => @pic.id
261           }.should raise_error(ActiveRecord::Forbidden)
262         end
263       end
264       context 'json形式' do
265         it '例外403 forbiddenを返す' do
266           lambda{
267             get :show, :id => @pic.id, :format => :json
268           }.should raise_error(ActiveRecord::Forbidden)
269         end
270       end
271     end
272   end
273
274   describe '新規作成フォーム表示に於いて' do
275     before do
276       sign_in @user
277     end
278     context 'つつがなく終わるとき' do
279       it 'ステータスコード200 OKを返す' do
280         get :new
281         response.should be_success 
282       end
283       it '@original_pictureに新規データを用意している' do
284         get :new
285         assigns(:original_picture).should be_a_new(OriginalPicture)
286       end
287       it '原画モデルにデフォルト値補充を依頼している' do
288         OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)\r
289         get :new
290       end
291       context 'html形式' do
292         it 'ページテンプレートnewを描画する' do
293           get :new
294           response.should render_template("new")
295         end
296       end
297       context 'js形式' do
298         it '部分テンプレートnew.jsを描画する' do
299           get :new, :format => :js
300           response.should render_template("new")
301         end
302       end
303     end
304     context '作家権限がないとき' do
305       before do
306         sign_out @user
307       end
308       context 'html形式' do
309         it 'ステータスコード302 Foundを返す' do
310           get :new
311           response.status.should eq 302
312         end
313         it 'サインインページへ遷移する' do
314           get :new
315           response.body.should redirect_to '/users/sign_in'
316         end
317       end
318       context 'js形式' do
319         it 'ステータスコード401 Unauthorizedを返す' do
320           get :new, :format => :js
321           response.status.should eq 401
322         end
323         it '応答メッセージにUnauthorizedを返す' do
324           get :new, :format => :js
325           response.message.should match(/Unauthorized/)
326         end
327       end
328     end
329     context '作家が絵師でないとき' do
330       before do
331         Author.any_instance.stub(:artist?).and_return(false)
332       end
333       context 'html形式' do
334         it 'ステータスコード302 Foundを返す' do
335           get :new
336           response.status.should eq 302
337         end
338         it '絵師登録ページへ遷移する' do
339           get :new
340           response.should redirect_to new_artist_path
341         end
342       end
343       context 'js形式' do
344         it 'ステータスコード200 Okを返す' do
345           get :new, :format => :js
346           response.status.should eq 200
347         end
348         it '絵師登録部分テンプレートartists/new.jsを描画する' do
349           get :new, :format => :js
350           response.should render_template("artists/new")
351         end
352       end
353     end
354   end
355
356   describe '新規作成に於いて' do
357     before do
358       sign_in @user
359     end
360     context 'つつがなく終わるとき' do
361       it 'モデルに保存依頼する' do
362         OriginalPicture.any_instance.should_receive(:save).exactly(1)
363         post :create, :original_picture => Factory.attributes_for(:original_picture)
364       end
365       it "@original_pictureに作成された原画を保持していて、それがDBにある" do
366         post :create, :original_picture => Factory.attributes_for(:original_picture)
367         assigns(:original_picture).should be_a(OriginalPicture)
368         assigns(:original_picture).should be_persisted
369       end
370       context 'html形式' do
371         it 'ステータスコード302 Foundを返す' do
372           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
373           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
374           post :create, :original_picture => Factory.attributes_for(:original_picture)
375           response.status.should eq 302
376         end
377         it '作成された原画の表示ページへ遷移する' do
378           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
379           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
380           post :create, :original_picture => Factory.attributes_for(:original_picture)
381           response.should redirect_to(OriginalPicture.last)
382         end
383       end
384       context 'json形式' do
385         it 'ステータスコード200 OKを返す' do
386           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
387           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
388           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
389           response.should be_success 
390         end
391         it '作成された原画をjsonデータで返す' do
392           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
393           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
394           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
395           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
396         end
397         it 'データがアレになっている' do
398           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
399           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
400           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
401           json = JSON.parse response.body
402           json["ext"].should match(/png/)
403         end
404       end
405     end
406     context '作家権限がないとき' do
407       before do
408         sign_out @user
409       end
410       context 'html形式' do
411         it 'ステータスコード302 Foundを返す' do
412           post :create, :original_picture => Factory.attributes_for(:original_picture)
413           response.status.should eq 302
414         end
415         it 'サインインページへ遷移する' do
416           post :create, :original_picture => Factory.attributes_for(:original_picture)
417           response.body.should redirect_to '/users/sign_in'
418         end
419       end
420       context 'json形式' do
421         it 'ステータスコード401 Unauthorizedを返す' do
422           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
423           response.status.should eq 401
424         end
425         it '応答メッセージにUnauthorizedを返す' do
426           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
427           response.message.should match(/Unauthorized/)
428         end
429       end
430     end
431     context '作家が絵師でないとき' do
432       before do
433         Author.any_instance.stub(:artist?).and_return(false)
434       end
435       context 'html形式' do
436         it 'ステータスコード302 Foundを返す' do
437           post :create, :original_picture => Factory.attributes_for(:original_picture)
438           response.status.should eq 302
439         end
440         it '絵師登録ページへ遷移する' do
441           post :create, :original_picture => Factory.attributes_for(:original_picture)
442           response.should redirect_to new_artist_path
443         end
444       end
445       context 'json形式' do
446         it '例外403 forbiddenを返す' do
447           lambda{
448             post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
449           }.should raise_error(ActiveRecord::Forbidden)
450         end
451       end
452     end
453     context '検証、保存に失敗した' do
454       before do
455         OriginalPicture.any_instance.stub(:save).and_return(false)
456       end
457       it "未保存のコミックを保持している" do
458         post :create, :original_picture => Factory.attributes_for(:original_picture)
459         assigns(:original_picture).should be_a_new(OriginalPicture)
460       end
461       context 'html形式' do
462         it 'ステータスコード200 OKを返す' do
463           post :create, :original_picture => Factory.attributes_for(:original_picture)
464           response.status.should eq 200
465         end
466         it '新規ページを描画する' do
467           post :create, :original_picture => Factory.attributes_for(:original_picture)
468           response.should render_template("new")
469         end
470       end
471       context 'json形式' do
472         it 'ステータスコード422 unprocessable_entity を返す' do
473           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
474           response.status.should eq 422
475         end
476         it '応答メッセージUnprocessable Entityを返す' do
477           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
478           response.message.should match(/Unprocessable/)
479         end
480       end
481     end
482   end
483
484   describe '編集フォーム表示に於いて' do
485     before do
486       @pic = Factory :original_picture, :artist_id => @artist.id 
487       sign_in @user
488       OriginalPicture.stub(:show).and_return(@pic)
489     end
490     context 'つつがなく終わるとき' do
491       it 'ステータスコード200 OKを返す' do
492         get :edit, :id => @pic.id
493         response.should be_success 
494       end
495       it '原画モデルに単体取得を問い合わせている' do
496         OriginalPicture.should_receive(:show).exactly(1)\r
497         get :show
498       end
499       it '@original_pictureにデータを用意している' do
500         get :edit, :id => @pic.id
501         assigns(:original_picture).should eq @pic
502       end
503       context 'html形式' do
504         it 'ページテンプレートeditを描画する' do
505           get :edit, :id => @pic.id
506           response.should render_template("edit")
507         end
508       end
509       context 'js形式' do
510         it '部分テンプレートedit.jsを描画する' do
511           get :edit, :id => @pic.id, :format => :js
512           response.should render_template("edit")
513         end
514       end
515     end
516     context '作家権限がないとき' do
517       before do
518         sign_out @user
519       end
520       context 'html形式' do
521         it 'ステータスコード302 Foundを返す' do
522           get :edit, :id => @pic.id
523           response.status.should eq 302
524         end
525         it 'サインインページへ遷移する' do
526           get :edit, :id => @pic.id
527           response.body.should redirect_to '/users/sign_in'
528         end
529       end
530       context 'js形式' do
531         it 'ステータスコード401 Unauthorizedを返す' do
532           get :edit, :id => @pic.id, :format => :js
533           response.status.should eq 401
534         end
535         it '応答メッセージにUnauthorizedを返す' do
536           get :edit, :id => @pic.id, :format => :js
537           response.message.should match(/Unauthorized/)
538         end
539       end
540     end
541     context '作家が絵師でないとき' do
542       before do
543         Author.any_instance.stub(:artist?).and_return(false)
544       end
545       context 'html形式' do
546         it 'ステータスコード302 Foundを返す' do
547           get :edit, :id => @pic.id
548           response.status.should eq 302
549         end
550         it '絵師登録ページへ遷移する' do
551           get :edit, :id => @pic.id
552           response.should redirect_to new_artist_path
553         end
554       end
555       context 'js形式' do
556         it 'ステータスコード200 Okを返す' do
557           get :edit, :id => @pic.id, :format => :js
558           response.status.should eq 200
559         end
560         it '絵師登録部分テンプレートartists/new.jsを描画する' do
561           get :edit, :id => @pic.id, :format => :js
562           response.should render_template("artists/new")
563         end
564       end
565     end
566     context '対象コミックがないとき' do
567       before do
568         OriginalPicture.unstub(:show)
569       end
570       context 'html形式' do
571         it '例外404 not_foundを返す' do
572           lambda{
573             get :edit, :id => 0
574           }.should raise_error(ActiveRecord::RecordNotFound)
575         end
576       end
577       context 'js形式' do
578         it '例外404 not_foundを返す' do
579           lambda{ 
580             get :edit, :id => 0, :format => :js
581           }.should raise_error(ActiveRecord::RecordNotFound)
582         end
583       end
584     end
585     context '他人の原画を見ようとしたとき' do
586       before do
587         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
588       end
589       context 'html形式' do
590         it '例外403 forbiddenを返す' do
591           lambda{
592             get :edit, :id => @pic.id
593           }.should raise_error(ActiveRecord::Forbidden)
594         end
595       end
596       context 'js形式' do
597         it '例外403 forbiddenを返す' do
598           lambda{
599             get :edit, :id => @pic.id, :format => :js
600           }.should raise_error(ActiveRecord::Forbidden)
601         end
602       end
603     end
604   end
605
606   describe '更新に於いて' do
607     before do
608       @pic = Factory :original_picture, :artist_id => @artist.id 
609       sign_in @user
610     end
611     context '事前チェックしておく' do
612       it '原画モデルに単体取得を問い合わせている' do
613         OriginalPicture.should_receive(:show).exactly(1)\r
614         put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
615       end
616       it 'モデルに更新を依頼する' do
617         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
618         OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
619         OriginalPicture.any_instance.should_receive(:save).exactly(1)
620         put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
621       end
622       it '@original_pictureにアレを取得している' do
623         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
624         OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
625         OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
626         put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
627         assigns(:original_picture).id.should eq(@pic.id)
628       end
629     end
630     context 'つつがなく終わるとき' do
631       it '更新される' do
632         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
633         OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
634         put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture, :ext => 'jpeg')
635         OriginalPicture.find(@pic.id).ext.should eq 'jpeg'
636       end
637       context 'html形式' do
638         it 'ステータスコード302 Foundを返す' do
639           OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
640           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
641           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
642           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
643           response.status.should eq 302
644         end
645         it '更新された原画の表示ページへ遷移する' do
646           OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
647           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
648           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
649           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
650           response.should redirect_to(@pic)
651         end
652       end
653       context 'json形式' do
654         it 'ステータスコード200 OKを返す' do
655           OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
656           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
657           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
658           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
659           response.should be_success 
660         end
661         it 'ページ本体は特に返さない' do
662           OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
663           OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
664           OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
665           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
666           response.body.should match /./
667         end
668       end
669     end
670     context '作家権限がないとき' do
671       before do
672         sign_out @user
673       end
674       context 'html形式' do
675         it 'ステータスコード302 Foundを返す' do
676           post :create, :original_picture => Factory.attributes_for(:original_picture)
677           response.status.should eq 302
678         end
679         it 'サインインページへ遷移する' do
680           post :create, :original_picture => Factory.attributes_for(:original_picture)
681           response.body.should redirect_to '/users/sign_in'
682         end
683       end
684       context 'json形式' do
685         it 'ステータスコード401 Unauthorizedを返す' do
686           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
687           response.status.should eq 401
688         end
689         it '応答メッセージにUnauthorizedを返す' do
690           post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
691           response.message.should match(/Unauthorized/)
692         end
693       end
694     end
695     context '作家が絵師でないとき' do
696       before do
697         Author.any_instance.stub(:artist?).and_return(false)
698       end
699       context 'html形式' do
700         it 'ステータスコード302 Foundを返す' do
701           post :create, :original_picture => Factory.attributes_for(:original_picture)
702           response.status.should eq 302
703         end
704         it '絵師登録ページへ遷移する' do
705           post :create, :original_picture => Factory.attributes_for(:original_picture)
706           response.should redirect_to new_artist_path
707         end
708       end
709       context 'json形式' do
710         it '例外403 forbiddenを返す' do
711           lambda{
712             post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
713           }.should raise_error(ActiveRecord::Forbidden)
714         end
715       end
716     end
717     context '対象原画がないとき' do
718       before do
719       end
720       context 'html形式' do
721         it '例外404 not_foundを返す' do
722           lambda{
723             put :update, :id => 0, :original_picture => Factory.attributes_for(:original_picture)
724           }.should raise_error(ActiveRecord::RecordNotFound)
725         end
726       end
727       context 'json形式' do
728         it '例外404 not_foundを返す' do
729           lambda{ 
730             put :update, :id => 0, :original_picture => Factory.attributes_for(:original_picture), :format => :json
731           }.should raise_error(ActiveRecord::RecordNotFound)
732         end
733       end
734     end
735     context '他人の原画を見ようとしたとき' do
736       before do
737         OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
738       end
739       context 'html形式' do
740         it '例外403 forbiddenを返す' do
741           lambda{
742             put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
743           }.should raise_error(ActiveRecord::Forbidden)
744         end
745       end
746       context 'json形式' do
747         it '例外403 forbiddenを返す' do
748           lambda{
749             put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
750           }.should raise_error(ActiveRecord::Forbidden)
751         end
752       end
753     end
754     context '検証、保存に失敗した' do
755       before do
756         OriginalPicture.any_instance.stub(:save).and_return(false)
757       end
758       context 'html形式' do
759         it 'ステータスコード200 Okを返す' do
760           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
761           response.status.should eq 200
762         end
763         it '編集ページを描画する' do
764           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
765           response.should render_template("edit")
766         end
767       end
768       context 'json形式' do
769         it 'ステータスコード422 unprocessable_entity を返す' do
770           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
771           response.status.should eq 422
772         end
773         it '応答メッセージUnprocessable Entityを返す' do
774           put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
775           response.message.should match(/Unprocessable/)
776         end
777       end
778     end
779   end
780
781 end