1 # -*- encoding: utf-8 -*-
5 describe ResourcePicturesController do
7 @admin = FactoryGirl.create :admin
8 @demand_user = FactoryGirl.create :demand_user
9 @sp = FactoryGirl.create :system_picture
10 @lg = FactoryGirl.create :license_group
11 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
12 @user = FactoryGirl.create( :user_yas)
13 @author = FactoryGirl.create :author, :user_id => @user.id
14 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
15 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
18 if MagicNumber['run_mode'] == 1
19 describe '一覧表示に於いて' do
21 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
22 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
24 ResourcePicture.stub(:list).and_return([@rp, @rp, @rp])
26 context 'パラメータpageについて' do
28 get :index, :page => 5
29 assigns(:page).should eq 5
31 it '省略されると@pageに1値が入る' do
33 assigns(:page).should eq 1
35 it '与えられたpage_sizeがセットされている' do
36 get :index, :page_size => 15
37 assigns(:page_size).should eq 15
39 it '省略されると@page_sizeにデフォルト値が入る' do
41 assigns(:page_size).should eq ResourcePicture.default_page_size
43 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
44 get :index, :page_size => 1500
45 assigns(:page_size).should eq ResourcePicture.max_page_size
47 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
48 get :index, :page_size => 0
49 assigns(:page_size).should eq ResourcePicture.default_page_size
52 context 'つつがなく終わるとき' do
53 it '素材モデルに一覧を問い合わせている' do
54 ResourcePicture.should_receive(:list).exactly(1)
57 it '@resource_picturesにリストを取得している' do
59 assigns(:resource_pictures).should have_at_least(3).items
62 it 'ステータスコード200 OKを返す' do
64 response.should be_success
66 it 'indexテンプレートを描画する' do
68 response.should render_template("index")
72 it 'ステータスコード200 OKを返す' do
73 get :index, :format => :json
74 response.should be_success
77 get :index, :format => :json
78 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
80 it '素材モデルにjson一覧出力オプションを問い合わせている' do
81 ResourcePicture.should_receive(:list_json_opt).exactly(1)
82 get :index, :format => :json
84 it 'データがリスト構造になっている' do
85 get :index, :format => :json
86 json = JSON.parse response.body
87 json.should have_at_least(3).items
89 it 'リストの先頭くらいは素材っぽいものであって欲しい' do
90 get :index, :format => :json
91 json = JSON.parse response.body
92 json.first.has_key?("ext").should be_true
93 json.first.has_key?("md5").should be_true
94 json.first.has_key?("picture_id").should be_true
98 context '作家権限がないとき' do
103 it 'ステータスコード302 Foundを返す' do
105 response.status.should eq 302
107 it 'サインインページへ遷移する' do
109 response.should redirect_to '/users/sign_in'
113 it 'ステータスコード401 Unauthorizedを返す' do
114 get :index, :format => :json
115 response.status.should eq 401
117 it '応答メッセージにUnauthorizedを返す' do
118 get :index, :format => :json
119 response.message.should match(/Unauthorized/)
123 context '作家権限はないが管理者権限があるとき' do
128 it 'ステータスコード200 OKを返す' do
130 response.should be_success
133 context '作家権限はないが借手権限があるとき' do
138 it 'ステータスコード200 OKを返す' do
140 response.should be_success
145 describe '単体表示に於いて' do
147 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
148 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
150 ResourcePicture.stub(:show).with(@rp.id.to_s, @author).and_return(@rp)
151 ResourcePicture.stub(:show).with(@rp.id.to_s, nil).and_return(@rp)
153 context 'つつがなく終わるとき' do
154 it '素材モデルに単体取得を問い合わせている' do
155 ResourcePicture.should_receive(:show).exactly(1)
156 get :show, :id => @rp.id
158 it '@resource_pictureにアレを取得している' do
159 get :show, :id => @rp.id
160 assigns(:resource_picture).id.should eq(@rp.id)
163 it 'ステータスコード200 OKを返す' do
164 get :show, :id => @rp.id
165 response.should be_success
167 it 'showテンプレートを描画する' do
168 get :show, :id => @rp.id
169 response.should render_template("show")
173 it 'ステータスコード200 OKを返す' do
174 get :show, :id => @rp.id, :format => :json
175 response.should be_success
178 get :show, :id => @rp.id, :format => :json
179 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
181 it '素材モデルにjson単体出力オプションを問い合わせている' do
182 ResourcePicture.should_receive(:show_json_opt).exactly(1)
183 get :show, :id => @rp.id, :format => :json
186 get :show, :id => @rp.id, :format => :json
187 json = JSON.parse response.body
188 json["ext"].should match(/png/)
189 json["md5"].should_not be_nil
190 json["picture_id"].should_not be_nil
193 #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
194 #renderが働かず、エラーとなってしまう。そこで、素材のファイル取得部分に
195 #スタブをおいてsend_dataがデータを返す体裁でテストする。
198 ResourcePicture.any_instance.stub(:mime_type).and_return('image/png')
199 ResourcePicture.any_instance.stub(:restore).and_return('aaa')
201 it '画像モデルに画像データを問い合わせる' do
202 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
203 get :show, :id => @rp.id, :format => :png
205 it '画像モデルにMimeTypeを問い合わせる' do
206 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
207 get :show, :id => @rp.id, :format => :png
210 get :show, :id => @rp.id, :format => :png
211 response.body.should eq 'aaa'
216 ResourcePicture.any_instance.stub(:mime_type).and_return('image/gif')
217 ResourcePicture.any_instance.stub(:restore).and_return('bbb')
219 it '画像モデルに画像データを問い合わせる' do
220 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
221 get :show, :id => @rp.id, :format => :gif
223 it '画像モデルにMimeTypeを問い合わせる' do
224 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
225 get :show, :id => @rp.id, :format => :png
228 get :show, :id => @rp.id, :format => :gif
229 response.body.should eq 'bbb'
234 ResourcePicture.any_instance.stub(:mime_type).and_return('image/jpeg')
235 ResourcePicture.any_instance.stub(:restore).and_return('ccc')
237 it '画像モデルに画像データを問い合わせる' do
238 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
239 get :show, :id => @rp.id, :format => :jpeg
241 it '画像モデルにMimeTypeを問い合わせる' do
242 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
243 get :show, :id => @rp.id, :format => :png
246 get :show, :id => @rp.id, :format => :jpeg
247 response.body.should eq 'ccc'
251 context '作家権限がないとき' do
256 it 'ステータスコード302 Foundを返す' do
257 get :show, :id => @rp.id
258 response.status.should eq 302
260 it 'サインインページへ遷移する' do
261 get :show, :id => @rp.id
262 response.body.should redirect_to '/users/sign_in'
266 it 'ステータスコード401 Unauthorizedを返す' do
267 get :show, :id => @rp.id, :format => :json
268 response.status.should eq 401
270 it '応答メッセージにUnauthorizedを返す' do
271 get :show, :id => @rp.id, :format => :json
272 response.message.should match(/Unauthorized/)
276 context '作家権限はないが管理者権限があるとき' do
281 it 'ステータスコード200 OKを返す' do
282 get :show, :id => @rp.id
283 response.should be_success
286 context '作家権限はないが借手権限があるとき' do
291 it 'ステータスコード200 OKを返す' do
292 get :show, :id => @rp.id
293 response.should be_success
297 context '対象素材がないとき' do
299 ResourcePicture.unstub(:show)
302 it '例外404 not_foundを返す' do
305 }.should raise_error(ActiveRecord::RecordNotFound)
309 it '例外404 not_foundを返す' do
311 get :show, :id => 0, :format => :json
312 }.should raise_error(ActiveRecord::RecordNotFound)
316 context '他人の素材を見ようとしたとき' do
318 ResourcePicture.stub(:show).and_return(@rp)
319 ResourcePicture.any_instance.stub(:own?).with(any_args()).and_return(false)
322 it '例外403 forbiddenを返す' do
324 get :show, :id => @rp.id
325 }.should raise_error(ActiveRecord::Forbidden)
329 it '例外403 forbiddenを返す' do
331 get :show, :id => @rp.id, :format => :json
332 }.should raise_error(ActiveRecord::Forbidden)
339 describe '素材数取得に於いて' do
341 ResourcePicture.should_receive(:visible_count).and_return(3)
344 context 'つつがなく終わるとき' do
345 it 'ステータスコード200 OKを返す' do
346 get :count, :format => :json
347 response.should be_success
351 get :count, :format => :json
352 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
354 it 'データがHash構造になっていてコマ絵数が3である' do
355 get :count, :format => :json
356 json = JSON.parse response.body
357 json["count"].should == 3
363 describe 'クレジット表示に於いて' do
365 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
366 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
368 ResourcePicture.stub(:show).with(@rp.id.to_s, @author).and_return(@rp)
369 ResourcePicture.stub(:show).with(@rp.id.to_s, nil).and_return(@rp)
371 context 'つつがなく終わるとき' do
372 it '素材モデルに単体取得を問い合わせている' do
373 ResourcePicture.should_receive(:show).exactly(1)
374 get :credit, :id => @rp.id
376 it '@resource_pictureにアレを取得している' do
377 get :credit, :id => @rp.id
378 assigns(:resource_picture).id.should eq(@rp.id)
381 it 'ステータスコード200 OKを返す' do
382 get :credit, :id => @rp.id
383 response.should be_success
385 it 'creditテンプレートを描画する' do
386 get :credit, :id => @rp.id
387 response.should render_template("credit")
391 it 'ステータスコード200 OKを返す' do
392 get :credit, :id => @rp.id, :format => :json
393 response.should be_success
396 get :credit, :id => @rp.id, :format => :json
397 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
399 it '素材モデルにjson単体出力オプションを問い合わせている' do
400 ResourcePicture.should_receive(:show_json_opt).exactly(1)
401 get :credit, :id => @rp.id, :format => :json
404 get :credit, :id => @rp.id, :format => :json
405 json = JSON.parse response.body
406 json["ext"].should match(/png/)
407 json["md5"].should_not be_nil
408 json["picture_id"].should_not be_nil
412 context '作家権限がないとき' do
417 it 'ステータスコード302 Foundを返す' do
418 get :credit, :id => @rp.id
419 response.status.should eq 302
421 it 'サインインページへ遷移する' do
422 get :credit, :id => @rp.id
423 response.body.should redirect_to '/users/sign_in'
427 it 'ステータスコード401 Unauthorizedを返す' do
428 get :credit, :id => @rp.id, :format => :json
429 response.status.should eq 401
431 it '応答メッセージにUnauthorizedを返す' do
432 get :credit, :id => @rp.id, :format => :json
433 response.message.should match(/Unauthorized/)
437 context '作家権限はないが管理者権限があるとき' do
442 it 'ステータスコード200 OKを返す' do
443 get :credit, :id => @rp.id
444 response.should be_success
447 context '作家権限はないが借手権限があるとき' do
452 it 'ステータスコード200 OKを返す' do
453 get :credit, :id => @rp.id
454 response.should be_success
458 context '対象素材がないとき' do
460 ResourcePicture.unstub(:show)
463 it '例外404 not_foundを返す' do
466 }.should raise_error(ActiveRecord::RecordNotFound)
470 it '例外404 not_foundを返す' do
472 get :show, :id => 0, :format => :json
473 }.should raise_error(ActiveRecord::RecordNotFound)
480 #原画にライセンスを与えるため際の確認フォーム
481 describe '新規作成フォーム表示に於いて' do
484 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
485 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
486 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
487 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
488 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
489 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
490 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
491 @imager = ImagerTest.load("abc\ndef\nghi")
493 context '事前チェックしておく' do
495 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
496 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
497 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
498 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
499 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
500 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
501 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
503 it '原画モデルに編集取得を依頼してしている' do
504 OriginalPicture.should_receive(:edit).with(@op.id.to_s, @artist).exactly(1)
507 it '原画モデルに画像データを問い合わせている' do
508 OriginalPicture.any_instance.should_receive(:restore).with(any_args()).exactly(1)
511 it '画像ライブラリをロードしている' do
512 PettanImager.should_receive(:load).with(any_args()).exactly(1)
515 it 'ライセンスグループモデルに単体取得を依頼している' do
516 LicenseGroup.should_receive(:show).with(any_args()).exactly(1)
519 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
520 it '素材モデルにデフォルト値補充を依頼している' do
521 ResourcePicture.any_instance.should_receive(:supply_default).with(any_args()).exactly(1)
525 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
526 it '素材モデルにデフォルト値補充を依頼してない' do
527 ResourcePicture.any_instance.should_not_receive(:supply_default).with(any_args())
531 it '素材モデルに上書き補充を依頼している' do
532 ResourcePicture.any_instance.should_receive(:overwrite).with(@op).exactly(1)
536 context 'つつがなく終わるとき' do
538 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
539 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
540 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
541 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
542 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
543 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
544 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
546 it '@original_pictureに原画を取得している' do
548 assigns(:original_picture).should eq @op
550 it '@imagerに画像ライブラリをロードしている' do
552 assigns(:imager).should eq @imager
554 it '@original_picture_license_groupに新規原画ライセンスグループデータを用意している' do
556 assigns(:original_picture_license_group).should be_a_new(OriginalPictureLicenseGroup)
558 it '@license_groupにライセンスグループを取得している' do
560 assigns(:license_group).should eq @lg
562 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
563 it '@resource_pictureに新規素材データを用意している' do
565 assigns(:resource_picture).should be_a_new(ResourcePicture)
568 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
569 it '@resource_pictureに素材データを用意している' do
571 assigns(:resource_picture).is_a?(ResourcePicture).should be_true
572 assigns(:resource_picture).should_not be_a_new(ResourcePicture)
576 it 'ステータスコード200 OKを返す' do
578 response.should be_success
580 it 'ページテンプレートnewを描画する' do
582 response.should render_template("new")
587 @attr.merge!({:format => :js})
589 it 'ステータスコード200 OKを返す' do
591 response.should be_success
593 it '部分テンプレートnew.jsを描画する' do
595 response.should render_template("new")
599 context '作家権限がないとき' do
604 it 'ステータスコード302 Foundを返す' do
606 response.status.should eq 302
608 it 'サインインページへ遷移する' do
610 response.body.should redirect_to '/users/sign_in'
615 @attr.merge!({:format => :js})
617 it 'ステータスコード401 Unauthorizedを返す' do
619 response.status.should eq 401
621 it '応答メッセージにUnauthorizedを返す' do
623 response.message.should match(/Unauthorized/)
627 context '作家権限はないが管理者権限があるとき' do
633 it 'ステータスコード302 Foundを返す' do
635 response.status.should eq 302
637 it 'サインインページへ遷移する' do
639 response.body.should redirect_to '/users/sign_in'
643 context '作家権限はないが借手権限があるとき' do
649 it 'ステータスコード302 Foundを返す' do
651 response.status.should eq 302
653 it 'サインインページへ遷移する' do
655 response.body.should redirect_to '/users/sign_in'
659 context '作家が絵師でないとき' do
661 Author.any_instance.stub(:artist?).and_return(false)
664 it 'ステータスコード302 Foundを返す' do
666 response.status.should eq 302
670 response.should redirect_to new_artist_path
675 @attr.merge!({:format => :js})
677 it 'ステータスコード200 Okを返す' do
679 response.status.should eq 200
681 it '絵師登録部分テンプレートartists/new.jsを描画する' do
683 response.should render_template("artists/new")
687 context '対象ライセンスグループがないとき' do
689 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => 0},
690 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
691 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
692 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
693 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
696 it '例外404 not_foundを返す' do
699 }.should raise_error(ActiveRecord::RecordNotFound)
704 @attr.merge!({:format => :js})
706 it '例外404 not_foundを返す' do
709 }.should raise_error(ActiveRecord::RecordNotFound)
715 describe '新規作成に於いて' do
718 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
719 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
720 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
721 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":0}' }}
722 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
723 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
724 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":1}' }}
725 @imager = ImagerTest.load("abc\ndef\nghi")
727 context '事前チェックしておく' do
729 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
730 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
731 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
732 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
733 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
734 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
735 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
736 ResourcePicture.any_instance.stub(:store).with(@imager).and_return(true)
738 it '原画モデルに編集取得を依頼してしている' do
739 OriginalPicture.should_receive(:edit).with(@op.id.to_s, @artist).exactly(1)
742 it '原画モデルに画像データを問い合わせている' do
743 OriginalPicture.any_instance.should_receive(:restore).with(any_args()).exactly(1)
746 it '画像ライブラリをロードしている' do
747 PettanImager.should_receive(:load).with(any_args()).exactly(1)
750 it 'ライセンスグループモデルに単体取得を依頼している' do
751 LicenseGroup.should_receive(:show).with(any_args()).exactly(1)
754 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
755 it '素材モデルにデフォルト値補充を依頼している' do
756 ResourcePicture.any_instance.should_receive(:supply_default).with(any_args()).exactly(1)
757 post :create, @newattr
760 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
761 it '素材モデルにデフォルト値補充を依頼してない' do
762 ResourcePicture.any_instance.should_not_receive(:supply_default).with(any_args())
766 it '素材モデルに上書き補充を依頼している' do
767 ResourcePicture.any_instance.should_receive(:overwrite).with(@op).exactly(1)
770 it '素材モデルに保存を依頼している' do
771 ResourcePicture.any_instance.should_receive(:store).with(@imager).exactly(1)
775 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が素材を作成してない]' do
777 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
778 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
779 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
780 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
781 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
782 assigns(:resource_picture).attributes = @newattr[:resource_picture]
783 assigns(:resource_picture).overwrite @newop
784 assigns(:resource_picture).picture_id = @p.id
785 assigns(:resource_picture).save!
789 it '@original_pictureに原画を取得している' do
790 post :create, @newattr
791 assigns(:original_picture).should eq @newop
793 it '@imagerに画像ライブラリをロードしている' do
794 post :create, @newattr
795 assigns(:imager).should eq @imager
797 it '@original_picture_license_groupに新規原画ライセンスグループデータを用意している' do
798 post :create, @newattr
799 assigns(:original_picture_license_group).should be_a_new(OriginalPictureLicenseGroup)
801 it '@license_groupにライセンスグループを取得している' do
802 post :create, @newattr
803 assigns(:license_group).should eq @lg
805 it '素材データにPOSTデータの素材情報を適用している' do
806 post :create, @newattr
807 assigns(:resource_picture).license_id.should eq @license.id
808 assigns(:resource_picture).artist_name.should eq @artist.name
809 assigns(:resource_picture).credit.should eq '{}'
810 assigns(:resource_picture).settings.should eq '{"new":1}'
812 it "作成された素材がDBにある" do
814 post :create, @newattr
815 }.should change(ResourcePicture, :count)
818 it 'ステータスコード302 Foundを返す' do
819 post :create, @newattr
820 response.status.should eq 302
822 it '作成された素材の表示ページへ遷移する' do
823 post :create, @newattr
824 response.should redirect_to(ResourcePicture.last)
829 @newattr.merge!({:format => :json})
831 it 'ステータスコード200 OKを返す' do
832 post :create, @newattr
833 response.should be_success
835 it '作成された素材をjsonデータで返す' do
836 post :create, @newattr
837 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
839 it '素材モデルにjson単体出力オプションを問い合わせている' do
840 ResourcePicture.should_receive(:show_json_opt).exactly(1)
841 post :create, @newattr
844 post :create, @newattr
845 json = JSON.parse response.body
846 json["ext"].should match(/png/)
847 json["md5"].should_not be_nil
848 json["picture_id"].should_not be_nil
852 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が既に素材を作成している]' do
854 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
855 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
856 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
857 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
858 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
859 assigns(:resource_picture).attributes = @attr[:resource_picture]
860 assigns(:resource_picture).overwrite @op
861 assigns(:resource_picture).save!
865 it '@original_pictureに原画を取得している' do
867 assigns(:original_picture).should eq @op
869 it '素材データにPOSTデータの素材情報を適用している' do
871 assigns(:resource_picture).license_id.should eq @license.id
872 assigns(:resource_picture).artist_name.should eq @artist.name
873 assigns(:resource_picture).credit.should eq '{}'
874 assigns(:resource_picture).settings.should eq '{"new":0}'
878 r = ResourcePicture.find(@rp.id)
879 r.settings.should eq '{"new":0}'
881 it "上書きなので件数は変化しない" do
884 }.should_not change(ResourcePicture, :count)
887 context '作家権限がないとき' do
892 it 'ステータスコード302 Foundを返す' do
894 response.status.should eq 302
896 it 'サインインページへ遷移する' do
898 response.body.should redirect_to '/users/sign_in'
903 @attr.merge!({:format => :js})
905 it 'ステータスコード401 Unauthorizedを返す' do
907 response.status.should eq 401
909 it '応答メッセージにUnauthorizedを返す' do
911 response.message.should match(/Unauthorized/)
915 context '作家権限はないが管理者権限があるとき' do
921 it 'ステータスコード302 Foundを返す' do
923 response.status.should eq 302
925 it 'サインインページへ遷移する' do
927 response.body.should redirect_to '/users/sign_in'
931 context '作家権限はないが借手権限があるとき' do
937 it 'ステータスコード302 Foundを返す' do
939 response.status.should eq 302
941 it 'サインインページへ遷移する' do
943 response.body.should redirect_to '/users/sign_in'
947 context '作家が絵師でないとき' do
949 Author.any_instance.stub(:artist?).and_return(false)
952 it 'ステータスコード302 Foundを返す' do
954 response.status.should eq 302
958 response.should redirect_to new_artist_path
963 @attr.merge!({:format => :json})
965 it '応答メッセージにUnauthorizedを返す' do
967 response.message.should match(/Unauthorized/)
971 context '検証、保存に失敗した' do
973 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
974 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
975 ResourcePicture.any_instance.stub(:store).and_return(false)
977 it "未保存の素材を保持している" do
978 post :create, @newattr
979 assigns(:resource_picture).should be_a_new(ResourcePicture)
982 it 'ステータスコード200 OKを返す' do
983 post :create, @newattr
984 response.status.should eq 200
987 post :create, @newattr
988 response.should render_template("new")
993 @newattr.merge!({:format => :json})
995 it 'ステータスコード422 unprocessable_entity を返す' do
996 post :create, @newattr
997 response.status.should eq 422
999 it '応答メッセージUnprocessable Entityを返す' do
1000 post :create, @newattr
1001 response.message.should match(/Unprocessable/)
1007 describe '削除に於いて' do
1009 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1010 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1013 context '事前チェックしておく' do
1015 ResourcePicture.stub(:edit).with(any_args()).and_return @rp
1016 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1018 it '素材モデルに編集取得を問い合わせている' do
1019 ResourcePicture.should_receive(:edit).exactly(1)
1020 delete :destroy, :id => @rp.id
1023 ResourcePicture.any_instance.should_receive(:unpublish).exactly(1)
1024 delete :destroy, :id => @rp.id
1026 it '@resource_pictureにアレを取得している' do
1027 delete :destroy, :id => @rp.id
1028 assigns(:resource_picture).id.should eq(@rp.id)
1031 context 'つつがなく終わるとき' do
1033 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1036 it 'ステータスコード302 Foundを返す' do
1037 delete :destroy, :id => @rp.id
1038 response.status.should eq 302
1040 it 'マイ素材の一覧ページへ遷移する' do
1041 delete :destroy, :id => @rp.id
1042 response.should redirect_to('/home/resource_picture')
1046 it 'ステータスコード200 OKを返す' do
1047 delete :destroy, :id => @rp.id, :format => :json
1048 response.should be_success
1050 it 'ページ本体は特に返さない' do
1051 delete :destroy, :id => @rp.id, :format => :json
1052 response.body.should match /./
1056 context '作家権限がないとき' do
1061 it 'ステータスコード302 Foundを返す' do
1062 delete :destroy, :id => @rp.id
1063 response.status.should eq 302
1065 it 'サインインページへ遷移する' do
1066 delete :destroy, :id => @rp.id
1067 response.body.should redirect_to '/users/sign_in'
1071 it '応答メッセージにUnauthorizedを返す' do
1072 delete :destroy, :id => @rp.id, :format => :json
1073 response.message.should match(/Unauthorized/)
1077 context '作家権限はないが管理者権限があるとき' do
1083 it 'ステータスコード302 Foundを返す' do
1084 delete :destroy, :id => @rp.id
1085 response.status.should eq 302
1087 it 'サインインページへ遷移する' do
1088 delete :destroy, :id => @rp.id
1089 response.body.should redirect_to '/users/sign_in'
1093 context '作家権限はないが借手権限があるとき' do
1096 sign_in @demand_user
1099 it 'ステータスコード302 Foundを返す' do
1100 delete :destroy, :id => @rp.id
1101 response.status.should eq 302
1103 it 'サインインページへ遷移する' do
1104 delete :destroy, :id => @rp.id
1105 response.body.should redirect_to '/users/sign_in'
1109 context '作家が絵師でないとき' do
1111 Author.any_instance.stub(:artist?).and_return(false)
1114 it 'ステータスコード302 Foundを返す' do
1115 delete :destroy, :id => @rp.id
1116 response.status.should eq 302
1118 it '絵師登録ページへ遷移する' do
1119 delete :destroy, :id => @rp.id
1120 response.should redirect_to new_artist_path
1124 it '応答メッセージにUnauthorizedを返す' do
1125 delete :destroy, :id => @rp.id, :format => :json
1126 response.message.should match(/Unauthorized/)
1130 context '削除に失敗したとき' do
1132 ResourcePicture.any_instance.stub(:unpublish).and_return(false)
1135 it 'ステータスコード302 Foundを返す' do
1136 delete :destroy, :id => @rp.id
1137 response.status.should eq 302
1139 it 'その素材の詳細ページへ遷移する' do
1140 delete :destroy, :id => @rp.id
1141 response.should redirect_to(resource_picture_path(@rp))
1145 it 'ステータスコード422 unprocessable_entity を返す' do
1146 delete :destroy, :id => @rp.id, :format => :json
1147 response.status.should eq 422
1149 it '応答メッセージUnprocessable Entityを返す' do
1150 delete :destroy, :id => @rp.id, :format => :json
1151 response.message.should match(/Unprocessable/)
1158 describe '一覧表示に於いて' do
1160 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1161 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1163 ResourcePicture.stub(:list).and_return([@rp, @rp, @rp])
1165 context 'つつがなく終わるとき' do
1167 it 'ステータスコード200 OKを返す' do
1169 response.should be_success
1171 it 'indexテンプレートを描画する' do
1173 response.should render_template("index")
1177 it 'ステータスコード200 OKを返す' do
1178 get :index, :format => :json
1179 response.should be_success
1182 get :index, :format => :json
1183 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1187 context '作家権限がないとき' do
1192 it 'ステータスコード200 OKを返す' do
1194 response.should be_success
1196 it 'indexテンプレートを描画する' do
1198 response.should render_template("index")
1202 it 'ステータスコード200 OKを返す' do
1203 get :index, :format => :json
1204 response.should be_success
1207 get :index, :format => :json
1208 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1214 describe '単体表示に於いて' do
1216 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1217 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1219 ResourcePicture.stub(:show).with(@rp.id.to_s, @author).and_return(@rp)
1220 ResourcePicture.stub(:show).with(@rp.id.to_s, nil).and_return(@rp)
1222 context 'つつがなく終わるとき' do
1224 it 'ステータスコード200 OKを返す' do
1225 get :show, :id => @rp.id
1226 response.should be_success
1228 it 'showテンプレートを描画する' do
1229 get :show, :id => @rp.id
1230 response.should render_template("show")
1234 it 'ステータスコード200 OKを返す' do
1235 get :show, :id => @rp.id, :format => :json
1236 response.should be_success
1239 get :show, :id => @rp.id, :format => :json
1240 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1244 context '作家権限がないとき' do
1249 it 'ステータスコード200 OKを返す' do
1250 get :show, :id => @rp.id
1251 response.should be_success
1253 it 'showテンプレートを描画する' do
1254 get :show, :id => @rp.id
1255 response.should render_template("show")
1259 it 'ステータスコード200 OKを返す' do
1260 get :show, :id => @rp.id, :format => :json
1261 response.should be_success
1264 get :show, :id => @rp.id, :format => :json
1265 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1271 describe '素材数取得に於いて' do
1273 ResourcePicture.should_receive(:visible_count).and_return(3)
1276 context 'つつがなく終わるとき' do
1277 it 'ステータスコード200 OKを返す' do
1278 get :count, :format => :json
1279 response.should be_success
1283 get :count, :format => :json
1284 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1290 describe 'クレジット表示に於いて' do
1292 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1293 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1295 ResourcePicture.stub(:show).with(@rp.id.to_s, @author).and_return(@rp)
1296 ResourcePicture.stub(:show).with(@rp.id.to_s, nil).and_return(@rp)
1298 context 'つつがなく終わるとき' do
1300 it 'ステータスコード200 OKを返す' do
1301 get :credit, :id => @rp.id
1302 response.should be_success
1304 it 'creditテンプレートを描画する' do
1305 get :credit, :id => @rp.id
1306 response.should render_template("credit")
1310 it 'ステータスコード200 OKを返す' do
1311 get :credit, :id => @rp.id, :format => :json
1312 response.should be_success
1315 get :credit, :id => @rp.id, :format => :json
1316 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1320 context '作家権限がないとき' do
1325 it 'ステータスコード200 OKを返す' do
1326 get :credit, :id => @rp.id
1327 response.should be_success
1329 it 'creditテンプレートを描画する' do
1330 get :credit, :id => @rp.id
1331 response.should render_template("credit")
1335 it 'ステータスコード200 OKを返す' do
1336 get :credit, :id => @rp.id, :format => :json
1337 response.should be_success
1340 get :credit, :id => @rp.id, :format => :json
1341 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1347 #原画にライセンスを与えるため際の確認フォーム
1348 describe '新規作成フォーム表示に於いて' do
1351 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1352 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1353 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
1354 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
1355 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
1356 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
1357 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
1358 @imager = ImagerTest.load("abc\ndef\nghi")
1360 context 'つつがなく終わるとき' do
1362 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
1363 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
1364 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
1365 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
1366 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
1367 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
1368 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
1371 it 'ステータスコード200 OKを返す' do
1373 response.should be_success
1375 it 'ページテンプレートnewを描画する' do
1377 response.should render_template("new")
1382 @attr.merge!({:format => :js})
1384 it 'ステータスコード200 OKを返す' do
1386 response.should be_success
1388 it '部分テンプレートnew.jsを描画する' do
1390 response.should render_template("new")
1394 context '作家権限がないとき' do
1399 it 'ステータスコード302 Foundを返す' do
1401 response.status.should eq 302
1403 it 'サインインページへ遷移する' do
1405 response.body.should redirect_to '/users/sign_in'
1410 @attr.merge!({:format => :js})
1412 it 'ステータスコード401 Unauthorizedを返す' do
1414 response.status.should eq 401
1416 it '応答メッセージにUnauthorizedを返す' do
1418 response.message.should match(/Unauthorized/)
1424 describe '新規作成に於いて' do
1427 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1428 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1429 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
1430 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":0}' }}
1431 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
1432 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
1433 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":1}' }}
1434 @imager = ImagerTest.load("abc\ndef\nghi")
1436 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が素材を作成してない]' do
1438 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
1439 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
1440 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
1441 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
1442 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
1443 assigns(:resource_picture).attributes = @newattr[:resource_picture]
1444 assigns(:resource_picture).overwrite @newop
1445 assigns(:resource_picture).picture_id = @p.id
1446 assigns(:resource_picture).save!
1451 it 'ステータスコード302 Foundを返す' do
1452 post :create, @newattr
1453 response.status.should eq 302
1455 it '作成された素材の表示ページへ遷移する' do
1456 post :create, @newattr
1457 response.should redirect_to(ResourcePicture.last)
1462 @newattr.merge!({:format => :json})
1464 it 'ステータスコード200 OKを返す' do
1465 post :create, @newattr
1466 response.should be_success
1468 it '作成された素材をjsonデータで返す' do
1469 post :create, @newattr
1470 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1476 describe '削除に於いて' do
1478 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1479 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1482 context 'つつがなく終わるとき' do
1484 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1487 it 'ステータスコード302 Foundを返す' do
1488 delete :destroy, :id => @rp.id
1489 response.status.should eq 302
1491 it 'マイ素材の一覧ページへ遷移する' do
1492 delete :destroy, :id => @rp.id
1493 response.should redirect_to('/home/resource_picture')
1497 it 'ステータスコード200 OKを返す' do
1498 delete :destroy, :id => @rp.id, :format => :json
1499 response.should be_success
1501 it 'ページ本体は特に返さない' do
1502 delete :destroy, :id => @rp.id, :format => :json
1503 response.body.should match /./
1507 context '作家権限がないとき' do
1511 it 'ステータスコード302 Foundを返す' do
1512 delete :destroy, :id => @rp.id
1513 response.status.should eq 302
1516 it 'サインインページへ遷移する' do
1517 delete :destroy, :id => @rp.id
1518 response.body.should redirect_to '/users/sign_in'
1522 it '応答メッセージにUnauthorizedを返す' do
1523 delete :destroy, :id => @rp.id, :format => :json
1524 response.message.should match(/Unauthorized/)