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 '@paginateにページ制御を取得している' do
64 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
66 it 'ステータスコード200 OKを返す' do
68 response.should be_success
70 it 'indexテンプレートを描画する' do
72 response.should render_template("index")
76 it 'ステータスコード200 OKを返す' do
77 get :index, :format => :json
78 response.should be_success
81 get :index, :format => :json
82 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
84 it '素材モデルにjson一覧出力オプションを問い合わせている' do
85 ResourcePicture.should_receive(:list_json_opt).exactly(1)
86 get :index, :format => :json
88 it 'データがリスト構造になっている' do
89 get :index, :format => :json
90 json = JSON.parse response.body
91 json.should have_at_least(3).items
93 it 'リストの先頭くらいは素材っぽいものであって欲しい' do
94 get :index, :format => :json
95 json = JSON.parse response.body
96 json.first.has_key?("ext").should be_true
97 json.first.has_key?("md5").should be_true
98 json.first.has_key?("picture_id").should be_true
102 context 'ユーザ権限がないとき' do
107 it 'ステータスコード302 Foundを返す' do
109 response.status.should eq 302
111 it 'サインインページへ遷移する' do
113 response.should redirect_to '/users/sign_in'
117 it 'ステータスコード401 Unauthorizedを返す' do
118 get :index, :format => :json
119 response.status.should eq 401
121 it '応答メッセージにUnauthorizedを返す' do
122 get :index, :format => :json
123 response.message.should match(/Unauthorized/)
127 context 'ユーザ権限はないが管理者権限があるとき' do
132 it 'ステータスコード200 OKを返す' do
134 response.should be_success
137 context 'ユーザ権限はないが借手権限があるとき' do
142 it 'ステータスコード200 OKを返す' do
144 response.should be_success
147 context 'ユーザだが作家登録していないとき' do
151 it 'ステータスコード200 OKを返す' do
153 response.should be_success
158 describe '単体表示に於いて' do
160 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
161 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
163 ResourcePicture.stub(:show).with(@rp.id.to_s, [@user, nil, nil]).and_return(@rp)
164 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, @admin, nil]).and_return(@rp)
165 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, @demand_user]).and_return(@rp)
167 context 'つつがなく終わるとき' do
168 it '素材モデルに単体取得を問い合わせている' do
169 ResourcePicture.should_receive(:show).exactly(1)
170 get :show, :id => @rp.id
172 it '@resource_pictureにアレを取得している' do
173 get :show, :id => @rp.id
174 assigns(:resource_picture).id.should eq(@rp.id)
177 it 'ステータスコード200 OKを返す' do
178 get :show, :id => @rp.id
179 response.should be_success
181 it 'showテンプレートを描画する' do
182 get :show, :id => @rp.id
183 response.should render_template("show")
187 it 'ステータスコード200 OKを返す' do
188 get :show, :id => @rp.id, :format => :json
189 response.should be_success
192 get :show, :id => @rp.id, :format => :json
193 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
195 it '素材モデルにjson単体出力オプションを問い合わせている' do
196 ResourcePicture.should_receive(:show_json_opt).exactly(1)
197 get :show, :id => @rp.id, :format => :json
200 get :show, :id => @rp.id, :format => :json
201 json = JSON.parse response.body
202 json["ext"].should match(/png/)
203 json["md5"].should_not be_nil
204 json["picture_id"].should_not be_nil
207 #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
208 #renderが働かず、エラーとなってしまう。そこで、素材のファイル取得部分に
209 #スタブをおいてsend_dataがデータを返す体裁でテストする。
212 ResourcePicture.any_instance.stub(:mime_type).and_return('image/png')
213 ResourcePicture.any_instance.stub(:restore).and_return('aaa')
215 it '画像モデルに画像データを問い合わせる' do
216 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
217 get :show, :id => @rp.id, :format => :png
219 it '画像モデルにMimeTypeを問い合わせる' do
220 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
221 get :show, :id => @rp.id, :format => :png
224 get :show, :id => @rp.id, :format => :png
225 response.body.should eq 'aaa'
230 ResourcePicture.any_instance.stub(:mime_type).and_return('image/gif')
231 ResourcePicture.any_instance.stub(:restore).and_return('bbb')
233 it '画像モデルに画像データを問い合わせる' do
234 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
235 get :show, :id => @rp.id, :format => :gif
237 it '画像モデルにMimeTypeを問い合わせる' do
238 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
239 get :show, :id => @rp.id, :format => :png
242 get :show, :id => @rp.id, :format => :gif
243 response.body.should eq 'bbb'
248 ResourcePicture.any_instance.stub(:mime_type).and_return('image/jpeg')
249 ResourcePicture.any_instance.stub(:restore).and_return('ccc')
251 it '画像モデルに画像データを問い合わせる' do
252 ResourcePicture.any_instance.should_receive(:restore).exactly(1)
253 get :show, :id => @rp.id, :format => :jpeg
255 it '画像モデルにMimeTypeを問い合わせる' do
256 ResourcePicture.any_instance.should_receive(:mime_type).exactly(1)
257 get :show, :id => @rp.id, :format => :png
260 get :show, :id => @rp.id, :format => :jpeg
261 response.body.should eq 'ccc'
265 context 'ユーザ権限がないとき' do
270 it 'ステータスコード302 Foundを返す' do
271 get :show, :id => @rp.id
272 response.status.should eq 302
274 it 'サインインページへ遷移する' do
275 get :show, :id => @rp.id
276 response.body.should redirect_to '/users/sign_in'
280 it 'ステータスコード401 Unauthorizedを返す' do
281 get :show, :id => @rp.id, :format => :json
282 response.status.should eq 401
284 it '応答メッセージにUnauthorizedを返す' do
285 get :show, :id => @rp.id, :format => :json
286 response.message.should match(/Unauthorized/)
290 context 'ユーザ権限はないが管理者権限があるとき' do
295 it 'ステータスコード200 OKを返す' do
296 get :show, :id => @rp.id
297 response.should be_success
300 context 'ユーザ権限はないが借手権限があるとき' do
305 it 'ステータスコード200 OKを返す' do
306 get :show, :id => @rp.id
307 response.should be_success
310 context 'ユーザだが作家登録していないとき' do
314 it 'ステータスコード200 OKを返す' do
315 get :show, :id => @rp.id
316 response.should be_success
320 context '対象素材がないとき' do
322 ResourcePicture.unstub(:show)
325 it '例外404 not_foundを返す' do
328 }.should raise_error(ActiveRecord::RecordNotFound)
332 it '例外404 not_foundを返す' do
334 get :show, :id => 0, :format => :json
335 }.should raise_error(ActiveRecord::RecordNotFound)
339 context '他人の素材を見ようとしたとき' do
341 ResourcePicture.stub(:show).and_return(@rp)
342 ResourcePicture.any_instance.stub(:own?).with(any_args()).and_return(false)
345 it '例外403 forbiddenを返す' do
347 get :show, :id => @rp.id
348 }.should raise_error(ActiveRecord::Forbidden)
352 it '例外403 forbiddenを返す' do
354 get :show, :id => @rp.id, :format => :json
355 }.should raise_error(ActiveRecord::Forbidden)
362 describe '素材数取得に於いて' do
364 ResourcePicture.should_receive(:visible_count).and_return(3)
367 context 'つつがなく終わるとき' do
368 it 'ステータスコード200 OKを返す' do
369 get :count, :format => :json
370 response.should be_success
374 get :count, :format => :json
375 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
377 it 'データがHash構造になっていてコマ絵数が3である' do
378 get :count, :format => :json
379 json = JSON.parse response.body
380 json["count"].should == 3
386 describe 'クレジット表示に於いて' do
388 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
389 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
391 ResourcePicture.stub(:show).with(@rp.id.to_s, [@user, nil, nil]).and_return(@rp)
392 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, @admin, nil]).and_return(@rp)
393 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, @demand_user]).and_return(@rp)
395 context 'つつがなく終わるとき' do
396 it '素材モデルに単体取得を問い合わせている' do
397 ResourcePicture.should_receive(:show).exactly(1)
398 get :credit, :id => @rp.id
400 it '@resource_pictureにアレを取得している' do
401 get :credit, :id => @rp.id
402 assigns(:resource_picture).id.should eq(@rp.id)
405 it 'ステータスコード200 OKを返す' do
406 get :credit, :id => @rp.id
407 response.should be_success
409 it 'creditテンプレートを描画する' do
410 get :credit, :id => @rp.id
411 response.should render_template("credit")
415 it 'ステータスコード200 OKを返す' do
416 get :credit, :id => @rp.id, :format => :json
417 response.should be_success
420 get :credit, :id => @rp.id, :format => :json
421 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
423 it '素材モデルにjson単体出力オプションを問い合わせている' do
424 ResourcePicture.should_receive(:show_json_opt).exactly(1)
425 get :credit, :id => @rp.id, :format => :json
428 get :credit, :id => @rp.id, :format => :json
429 json = JSON.parse response.body
430 json["ext"].should match(/png/)
431 json["md5"].should_not be_nil
432 json["picture_id"].should_not be_nil
436 context 'ユーザ権限がないとき' do
441 it 'ステータスコード302 Foundを返す' do
442 get :credit, :id => @rp.id
443 response.status.should eq 302
445 it 'サインインページへ遷移する' do
446 get :credit, :id => @rp.id
447 response.body.should redirect_to '/users/sign_in'
451 it 'ステータスコード401 Unauthorizedを返す' do
452 get :credit, :id => @rp.id, :format => :json
453 response.status.should eq 401
455 it '応答メッセージにUnauthorizedを返す' do
456 get :credit, :id => @rp.id, :format => :json
457 response.message.should match(/Unauthorized/)
461 context 'ユーザ権限はないが管理者権限があるとき' do
466 it 'ステータスコード200 OKを返す' do
467 get :credit, :id => @rp.id
468 response.should be_success
471 context 'ユーザ権限はないが借手権限があるとき' do
476 it 'ステータスコード200 OKを返す' do
477 get :credit, :id => @rp.id
478 response.should be_success
481 context 'ユーザだが作家登録していないとき' do
485 it 'ステータスコード200 OKを返す' do
486 get :credit, :id => @rp.id
487 response.should be_success
491 context '対象素材がないとき' do
493 ResourcePicture.unstub(:show)
496 it '例外404 not_foundを返す' do
499 }.should raise_error(ActiveRecord::RecordNotFound)
503 it '例外404 not_foundを返す' do
505 get :show, :id => 0, :format => :json
506 }.should raise_error(ActiveRecord::RecordNotFound)
513 #原画にライセンスを与えるため際の確認フォーム
514 describe '新規作成フォーム表示に於いて' do
517 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
518 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
519 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
520 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
521 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
522 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
523 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
524 @imager = ImagerTest.load("abc\ndef\nghi")
526 context '事前チェックしておく' do
528 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
529 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
530 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
531 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
532 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
533 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
534 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
536 it '原画モデルに編集取得を依頼してしている' do
537 OriginalPicture.should_receive(:edit).with(@op.id.to_s, @artist).exactly(1)
540 it '原画モデルに画像データを問い合わせている' do
541 OriginalPicture.any_instance.should_receive(:restore).with(any_args()).exactly(1)
544 it '画像ライブラリをロードしている' do
545 PettanImager.should_receive(:load).with(any_args()).exactly(1)
548 it 'ライセンスグループモデルに単体取得を依頼している' do
549 LicenseGroup.should_receive(:show).with(any_args()).exactly(1)
552 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
553 it '素材モデルにデフォルト値補充を依頼している' do
554 ResourcePicture.any_instance.should_receive(:supply_default).with(any_args()).exactly(1)
558 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
559 it '素材モデルにデフォルト値補充を依頼してない' do
560 ResourcePicture.any_instance.should_not_receive(:supply_default).with(any_args())
564 it '素材モデルに上書き補充を依頼している' do
565 ResourcePicture.any_instance.should_receive(:overwrite).with(@op).exactly(1)
569 context 'つつがなく終わるとき' do
571 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
572 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
573 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
574 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
575 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
576 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
577 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
579 it '@original_pictureに原画を取得している' do
581 assigns(:original_picture).should eq @op
583 it '@imagerに画像ライブラリをロードしている' do
585 assigns(:imager).should eq @imager
587 it '@original_picture_license_groupに新規原画ライセンスグループデータを用意している' do
589 assigns(:original_picture_license_group).should be_a_new(OriginalPictureLicenseGroup)
591 it '@license_groupにライセンスグループを取得している' do
593 assigns(:license_group).should eq @lg
595 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
596 it '@resource_pictureに新規素材データを用意している' do
598 assigns(:resource_picture).should be_a_new(ResourcePicture)
601 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
602 it '@resource_pictureに素材データを用意している' do
604 assigns(:resource_picture).is_a?(ResourcePicture).should be_true
605 assigns(:resource_picture).should_not be_a_new(ResourcePicture)
609 it 'ステータスコード200 OKを返す' do
611 response.should be_success
613 it 'ページテンプレートnewを描画する' do
615 response.should render_template("new")
620 @attr.merge!({:format => :js})
622 it 'ステータスコード200 OKを返す' do
624 response.should be_success
626 it '部分テンプレートnew.jsを描画する' do
628 response.should render_template("new")
632 context 'ユーザ権限がないとき' do
637 it 'ステータスコード302 Foundを返す' do
639 response.status.should eq 302
641 it 'サインインページへ遷移する' do
643 response.body.should redirect_to '/users/sign_in'
648 @attr.merge!({:format => :js})
650 it 'ステータスコード401 Unauthorizedを返す' do
652 response.status.should eq 401
654 it '応答メッセージにUnauthorizedを返す' do
656 response.message.should match(/Unauthorized/)
660 context 'ユーザ権限はないが管理者権限があるとき' do
666 it 'ステータスコード302 Foundを返す' do
668 response.status.should eq 302
670 it 'サインインページへ遷移する' do
672 response.body.should redirect_to '/users/sign_in'
676 context 'ユーザ権限はないが借手権限があるとき' do
682 it 'ステータスコード302 Foundを返す' do
684 response.status.should eq 302
686 it 'サインインページへ遷移する' do
688 response.body.should redirect_to '/users/sign_in'
692 context 'ユーザが絵師でないとき' do
697 it 'ステータスコード302 Foundを返す' do
699 response.status.should eq 302
703 response.should redirect_to new_artist_path
708 @attr.merge!({:format => :js})
710 it 'ステータスコード200 Okを返す' do
712 response.status.should eq 200
714 it '絵師登録部分テンプレートartists/new.jsを描画する' do
716 response.should render_template("artists/new")
720 context '対象ライセンスグループがないとき' do
722 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => 0},
723 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
724 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
725 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
726 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
729 it '例外404 not_foundを返す' do
732 }.should raise_error(ActiveRecord::RecordNotFound)
737 @attr.merge!({:format => :js})
739 it '例外404 not_foundを返す' do
742 }.should raise_error(ActiveRecord::RecordNotFound)
748 describe '新規作成に於いて' do
751 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
752 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
753 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
754 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":0}' }}
755 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
756 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
757 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":1}' }}
758 @imager = ImagerTest.load("abc\ndef\nghi")
760 context '事前チェックしておく' do
762 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
763 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
764 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
765 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
766 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
767 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
768 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
769 ResourcePicture.any_instance.stub(:store).with(@imager).and_return(true)
771 it '原画モデルに編集取得を依頼してしている' do
772 OriginalPicture.should_receive(:edit).with(@op.id.to_s, @artist).exactly(1)
775 it '原画モデルに画像データを問い合わせている' do
776 OriginalPicture.any_instance.should_receive(:restore).with(any_args()).exactly(1)
779 it '画像ライブラリをロードしている' do
780 PettanImager.should_receive(:load).with(any_args()).exactly(1)
783 it 'ライセンスグループモデルに単体取得を依頼している' do
784 LicenseGroup.should_receive(:show).with(any_args()).exactly(1)
787 context 'ライセンスを与えようとしている原画が素材を作成してないとき' do
788 it '素材モデルにデフォルト値補充を依頼している' do
789 ResourcePicture.any_instance.should_receive(:supply_default).with(any_args()).exactly(1)
790 post :create, @newattr
793 context 'ライセンスを与えようとしている原画が既に素材を作成しているとき' do
794 it '素材モデルにデフォルト値補充を依頼してない' do
795 ResourcePicture.any_instance.should_not_receive(:supply_default).with(any_args())
799 it '素材モデルに上書き補充を依頼している' do
800 ResourcePicture.any_instance.should_receive(:overwrite).with(@op).exactly(1)
803 it '素材モデルに保存を依頼している' do
804 ResourcePicture.any_instance.should_receive(:store).with(@imager).exactly(1)
808 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が素材を作成してない]' do
810 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
811 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
812 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
813 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
814 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
815 assigns(:resource_picture).attributes = @newattr[:resource_picture]
816 assigns(:resource_picture).overwrite @newop
817 assigns(:resource_picture).picture_id = @p.id
818 assigns(:resource_picture).save!
822 it '@original_pictureに原画を取得している' do
823 post :create, @newattr
824 assigns(:original_picture).should eq @newop
826 it '@imagerに画像ライブラリをロードしている' do
827 post :create, @newattr
828 assigns(:imager).should eq @imager
830 it '@original_picture_license_groupに新規原画ライセンスグループデータを用意している' do
831 post :create, @newattr
832 assigns(:original_picture_license_group).should be_a_new(OriginalPictureLicenseGroup)
834 it '@license_groupにライセンスグループを取得している' do
835 post :create, @newattr
836 assigns(:license_group).should eq @lg
838 it '素材データにPOSTデータの素材情報を適用している' do
839 post :create, @newattr
840 assigns(:resource_picture).license_id.should eq @license.id
841 assigns(:resource_picture).artist_name.should eq @artist.name
842 assigns(:resource_picture).credit.should eq '{}'
843 assigns(:resource_picture).settings.should eq '{"new":1}'
845 it "作成された素材がDBにある" do
847 post :create, @newattr
848 }.should change(ResourcePicture, :count)
851 it 'ステータスコード302 Foundを返す' do
852 post :create, @newattr
853 response.status.should eq 302
855 it '作成された素材の表示ページへ遷移する' do
856 post :create, @newattr
857 response.should redirect_to(ResourcePicture.last)
862 @newattr.merge!({:format => :json})
864 it 'ステータスコード200 OKを返す' do
865 post :create, @newattr
866 response.should be_success
868 it '作成された素材をjsonデータで返す' do
869 post :create, @newattr
870 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
872 it '素材モデルにjson単体出力オプションを問い合わせている' do
873 ResourcePicture.should_receive(:show_json_opt).exactly(1)
874 post :create, @newattr
877 post :create, @newattr
878 json = JSON.parse response.body
879 json["ext"].should match(/png/)
880 json["md5"].should_not be_nil
881 json["picture_id"].should_not be_nil
885 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が既に素材を作成している]' do
887 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
888 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
889 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
890 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
891 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
892 assigns(:resource_picture).attributes = @attr[:resource_picture]
893 assigns(:resource_picture).overwrite @op
894 assigns(:resource_picture).save!
898 it '@original_pictureに原画を取得している' do
900 assigns(:original_picture).should eq @op
902 it '素材データにPOSTデータの素材情報を適用している' do
904 assigns(:resource_picture).license_id.should eq @license.id
905 assigns(:resource_picture).artist_name.should eq @artist.name
906 assigns(:resource_picture).credit.should eq '{}'
907 assigns(:resource_picture).settings.should eq '{"new":0}'
911 r = ResourcePicture.find(@rp.id)
912 r.settings.should eq '{"new":0}'
914 it "上書きなので件数は変化しない" do
917 }.should_not change(ResourcePicture, :count)
920 context 'ユーザ権限がないとき' do
925 it 'ステータスコード302 Foundを返す' do
927 response.status.should eq 302
929 it 'サインインページへ遷移する' do
931 response.body.should redirect_to '/users/sign_in'
936 @attr.merge!({:format => :js})
938 it 'ステータスコード401 Unauthorizedを返す' do
940 response.status.should eq 401
942 it '応答メッセージにUnauthorizedを返す' do
944 response.message.should match(/Unauthorized/)
948 context 'ユーザ権限はないが管理者権限があるとき' do
954 it 'ステータスコード302 Foundを返す' do
956 response.status.should eq 302
958 it 'サインインページへ遷移する' do
960 response.body.should redirect_to '/users/sign_in'
964 context 'ユーザ権限はないが借手権限があるとき' do
970 it 'ステータスコード302 Foundを返す' do
972 response.status.should eq 302
974 it 'サインインページへ遷移する' do
976 response.body.should redirect_to '/users/sign_in'
980 context 'ユーザが絵師でないとき' do
985 it 'ステータスコード302 Foundを返す' do
987 response.status.should eq 302
991 response.should redirect_to new_artist_path
995 it '例外403 forbiddenを返す' do
996 @attr.merge!({:format => :json})
999 }.should raise_error(ActiveRecord::Forbidden)
1003 context '検証、保存に失敗した' do
1005 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
1006 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
1007 ResourcePicture.any_instance.stub(:store).and_return(false)
1009 it "未保存の素材を保持している" do
1010 post :create, @newattr
1011 assigns(:resource_picture).should be_a_new(ResourcePicture)
1014 it 'ステータスコード200 OKを返す' do
1015 post :create, @newattr
1016 response.status.should eq 200
1019 post :create, @newattr
1020 response.should render_template("new")
1025 @newattr.merge!({:format => :json})
1027 it 'ステータスコード422 unprocessable_entity を返す' do
1028 post :create, @newattr
1029 response.status.should eq 422
1031 it '応答メッセージUnprocessable Entityを返す' do
1032 post :create, @newattr
1033 response.message.should match(/Unprocessable/)
1039 describe '削除に於いて' do
1041 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1042 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1045 context '事前チェックしておく' do
1047 ResourcePicture.stub(:edit).with(any_args()).and_return @rp
1048 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1050 it '素材モデルに編集取得を問い合わせている' do
1051 ResourcePicture.should_receive(:edit).exactly(1)
1052 delete :destroy, :id => @rp.id
1055 ResourcePicture.any_instance.should_receive(:unpublish).exactly(1)
1056 delete :destroy, :id => @rp.id
1058 it '@resource_pictureにアレを取得している' do
1059 delete :destroy, :id => @rp.id
1060 assigns(:resource_picture).id.should eq(@rp.id)
1063 context 'つつがなく終わるとき' do
1065 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1068 it 'ステータスコード302 Foundを返す' do
1069 delete :destroy, :id => @rp.id
1070 response.status.should eq 302
1072 it 'マイ素材の一覧ページへ遷移する' do
1073 delete :destroy, :id => @rp.id
1074 response.should redirect_to('/home/resource_picture')
1078 it 'ステータスコード200 OKを返す' do
1079 delete :destroy, :id => @rp.id, :format => :json
1080 response.should be_success
1082 it 'ページ本体は特に返さない' do
1083 delete :destroy, :id => @rp.id, :format => :json
1084 response.body.should match /./
1088 context 'ユーザ権限がないとき' do
1093 it 'ステータスコード302 Foundを返す' do
1094 delete :destroy, :id => @rp.id
1095 response.status.should eq 302
1097 it 'サインインページへ遷移する' do
1098 delete :destroy, :id => @rp.id
1099 response.body.should redirect_to '/users/sign_in'
1103 it '応答メッセージにUnauthorizedを返す' do
1104 delete :destroy, :id => @rp.id, :format => :json
1105 response.message.should match(/Unauthorized/)
1109 context 'ユーザ権限はないが管理者権限があるとき' do
1115 it 'ステータスコード302 Foundを返す' do
1116 delete :destroy, :id => @rp.id
1117 response.status.should eq 302
1119 it 'サインインページへ遷移する' do
1120 delete :destroy, :id => @rp.id
1121 response.body.should redirect_to '/users/sign_in'
1125 context 'ユーザ権限はないが借手権限があるとき' do
1128 sign_in @demand_user
1131 it 'ステータスコード302 Foundを返す' do
1132 delete :destroy, :id => @rp.id
1133 response.status.should eq 302
1135 it 'サインインページへ遷移する' do
1136 delete :destroy, :id => @rp.id
1137 response.body.should redirect_to '/users/sign_in'
1141 context 'ユーザが絵師でないとき' do
1146 it 'ステータスコード302 Foundを返す' do
1147 delete :destroy, :id => @rp.id
1148 response.status.should eq 302
1150 it '絵師登録ページへ遷移する' do
1151 delete :destroy, :id => @rp.id
1152 response.should redirect_to new_artist_path
1156 it '例外403 forbiddenを返す' do
1158 delete :destroy, :id => @rp.id, :format => :json
1159 }.should raise_error(ActiveRecord::Forbidden)
1163 context '削除に失敗したとき' do
1165 ResourcePicture.any_instance.stub(:unpublish).and_return(false)
1168 it 'ステータスコード302 Foundを返す' do
1169 delete :destroy, :id => @rp.id
1170 response.status.should eq 302
1172 it 'その素材の詳細ページへ遷移する' do
1173 delete :destroy, :id => @rp.id
1174 response.should redirect_to(resource_picture_path(@rp))
1178 it 'ステータスコード422 unprocessable_entity を返す' do
1179 delete :destroy, :id => @rp.id, :format => :json
1180 response.status.should eq 422
1182 it '応答メッセージUnprocessable Entityを返す' do
1183 delete :destroy, :id => @rp.id, :format => :json
1184 response.message.should match(/Unprocessable/)
1191 describe '一覧表示に於いて' do
1193 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1194 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1196 ResourcePicture.stub(:list).and_return([@rp, @rp, @rp])
1198 context 'つつがなく終わるとき' do
1200 it 'ステータスコード200 OKを返す' do
1202 response.should be_success
1204 it 'indexテンプレートを描画する' do
1206 response.should render_template("index")
1210 it 'ステータスコード200 OKを返す' do
1211 get :index, :format => :json
1212 response.should be_success
1215 get :index, :format => :json
1216 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1220 context 'ユーザ権限がないとき' do
1225 it 'ステータスコード200 OKを返す' do
1227 response.should be_success
1229 it 'indexテンプレートを描画する' do
1231 response.should render_template("index")
1235 it 'ステータスコード200 OKを返す' do
1236 get :index, :format => :json
1237 response.should be_success
1240 get :index, :format => :json
1241 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1247 describe '単体表示に於いて' do
1249 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1250 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1252 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, nil]).and_return(@rp)
1253 ResourcePicture.stub(:show).with(@rp.id.to_s, [@user, nil, nil]).and_return(@rp)
1254 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, @admin, nil]).and_return(@rp)
1255 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, @demand_user]).and_return(@rp)
1257 context 'つつがなく終わるとき' do
1259 it 'ステータスコード200 OKを返す' do
1260 get :show, :id => @rp.id
1261 response.should be_success
1263 it 'showテンプレートを描画する' do
1264 get :show, :id => @rp.id
1265 response.should render_template("show")
1269 it 'ステータスコード200 OKを返す' do
1270 get :show, :id => @rp.id, :format => :json
1271 response.should be_success
1274 get :show, :id => @rp.id, :format => :json
1275 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1279 context 'ユーザ権限がないとき' do
1284 it 'ステータスコード200 OKを返す' do
1285 get :show, :id => @rp.id
1286 response.should be_success
1288 it 'showテンプレートを描画する' do
1289 get :show, :id => @rp.id
1290 response.should render_template("show")
1294 it 'ステータスコード200 OKを返す' do
1295 get :show, :id => @rp.id, :format => :json
1296 response.should be_success
1299 get :show, :id => @rp.id, :format => :json
1300 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1306 describe '素材数取得に於いて' do
1308 ResourcePicture.should_receive(:visible_count).and_return(3)
1311 context 'つつがなく終わるとき' do
1312 it 'ステータスコード200 OKを返す' do
1313 get :count, :format => :json
1314 response.should be_success
1318 get :count, :format => :json
1319 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1325 describe 'クレジット表示に於いて' do
1327 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1328 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1330 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, nil]).and_return(@rp)
1331 ResourcePicture.stub(:show).with(@rp.id.to_s, [@user, nil, nil]).and_return(@rp)
1332 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, @admin, nil]).and_return(@rp)
1333 ResourcePicture.stub(:show).with(@rp.id.to_s, [nil, nil, @demand_user]).and_return(@rp)
1335 context 'つつがなく終わるとき' do
1337 it 'ステータスコード200 OKを返す' do
1338 get :credit, :id => @rp.id
1339 response.should be_success
1341 it 'creditテンプレートを描画する' do
1342 get :credit, :id => @rp.id
1343 response.should render_template("credit")
1347 it 'ステータスコード200 OKを返す' do
1348 get :credit, :id => @rp.id, :format => :json
1349 response.should be_success
1352 get :credit, :id => @rp.id, :format => :json
1353 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1357 context 'ユーザ権限がないとき' do
1362 it 'ステータスコード200 OKを返す' do
1363 get :credit, :id => @rp.id
1364 response.should be_success
1366 it 'creditテンプレートを描画する' do
1367 get :credit, :id => @rp.id
1368 response.should render_template("credit")
1372 it 'ステータスコード200 OKを返す' do
1373 get :credit, :id => @rp.id, :format => :json
1374 response.should be_success
1377 get :credit, :id => @rp.id, :format => :json
1378 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1384 #原画にライセンスを与えるため際の確認フォーム
1385 describe '新規作成フォーム表示に於いて' do
1388 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1389 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1390 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
1391 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
1392 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
1393 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
1394 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{}' }}
1395 @imager = ImagerTest.load("abc\ndef\nghi")
1397 context 'つつがなく終わるとき' do
1399 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
1400 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
1401 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
1402 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
1403 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
1404 ResourcePicture.any_instance.stub(:overwrite).with(@op).and_return(true)
1405 ResourcePicture.any_instance.stub(:overwrite).with(@newop).and_return(true)
1408 it 'ステータスコード200 OKを返す' do
1410 response.should be_success
1412 it 'ページテンプレートnewを描画する' do
1414 response.should render_template("new")
1419 @attr.merge!({:format => :js})
1421 it 'ステータスコード200 OKを返す' do
1423 response.should be_success
1425 it '部分テンプレートnew.jsを描画する' do
1427 response.should render_template("new")
1431 context 'ユーザ権限がないとき' do
1436 it 'ステータスコード302 Foundを返す' do
1438 response.status.should eq 302
1440 it 'サインインページへ遷移する' do
1442 response.body.should redirect_to '/users/sign_in'
1447 @attr.merge!({:format => :js})
1449 it 'ステータスコード401 Unauthorizedを返す' do
1451 response.status.should eq 401
1453 it '応答メッセージにUnauthorizedを返す' do
1455 response.message.should match(/Unauthorized/)
1461 describe '新規作成に於いて' do
1464 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1465 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1466 @attr = {:original_picture_id => @op.id, :original_picture_license_group => {:original_picture_id => @op.id, :license_group_id => @lg.id},
1467 :resource_picture => {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":0}' }}
1468 @newop = FactoryGirl.create :original_picture, :artist_id => @artist.id
1469 @newattr = {:original_picture_id => @newop.id, :original_picture_license_group => {:original_picture_id => @newop.id, :license_group_id => @lg.id},
1470 :resource_picture => {:original_picture_id => @newop.id, :license_id => @license.id, :artist_name => @artist.name, :credit => '{}', :settings => '{"new":1}' }}
1471 @imager = ImagerTest.load("abc\ndef\nghi")
1473 context 'つつがなく終わるとき[ライセンスを与えようとしている原画が素材を作成してない]' do
1475 OriginalPicture.stub(:edit).with(@newop.id.to_s, @artist).and_return(@newop)
1476 OriginalPicture.any_instance.stub(:restore).with(any_args()).and_return(@imager.binary)
1477 PettanImager.stub(:load).with(@imager.binary).and_return(@imager)
1478 LicenseGroup.stub(:show).with(@lg.id).and_return(@lg)
1479 ResourcePicture.any_instance.stub(:store).with(@imager).and_return {
1480 assigns(:resource_picture).attributes = @newattr[:resource_picture]
1481 assigns(:resource_picture).overwrite @newop
1482 assigns(:resource_picture).picture_id = @p.id
1483 assigns(:resource_picture).save!
1488 it 'ステータスコード302 Foundを返す' do
1489 post :create, @newattr
1490 response.status.should eq 302
1492 it '作成された素材の表示ページへ遷移する' do
1493 post :create, @newattr
1494 response.should redirect_to(ResourcePicture.last)
1499 @newattr.merge!({:format => :json})
1501 it 'ステータスコード200 OKを返す' do
1502 post :create, @newattr
1503 response.should be_success
1505 it '作成された素材をjsonデータで返す' do
1506 post :create, @newattr
1507 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1511 context 'ユーザ権限がないとき' do
1516 it 'ステータスコード302 Foundを返す' do
1517 post :create, @newattr
1518 response.status.should eq 302
1520 it 'サインインページへ遷移する' do
1521 post :create, @newattr
1522 response.body.should redirect_to '/users/sign_in'
1528 describe '削除に於いて' do
1530 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
1531 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
1534 context 'つつがなく終わるとき' do
1536 ResourcePicture.any_instance.stub(:unpublish).with(any_args()).and_return(true)
1539 it 'ステータスコード302 Foundを返す' do
1540 delete :destroy, :id => @rp.id
1541 response.status.should eq 302
1543 it 'マイ素材の一覧ページへ遷移する' do
1544 delete :destroy, :id => @rp.id
1545 response.should redirect_to('/home/resource_picture')
1549 it 'ステータスコード200 OKを返す' do
1550 delete :destroy, :id => @rp.id, :format => :json
1551 response.should be_success
1553 it 'ページ本体は特に返さない' do
1554 delete :destroy, :id => @rp.id, :format => :json
1555 response.body.should match /./
1559 context 'ユーザ権限がないとき' do
1563 it 'ステータスコード302 Foundを返す' do
1564 delete :destroy, :id => @rp.id
1565 response.status.should eq 302
1568 it 'サインインページへ遷移する' do
1569 delete :destroy, :id => @rp.id
1570 response.body.should redirect_to '/users/sign_in'
1574 it '応答メッセージにUnauthorizedを返す' do
1575 delete :destroy, :id => @rp.id, :format => :json
1576 response.message.should match(/Unauthorized/)