1 # -*- encoding: utf-8 -*-
6 @admin = FactoryGirl.create :admin
7 @sp = FactoryGirl.create :system_picture
8 @lg = FactoryGirl.create :license_group
9 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
10 SpeechBalloonTemplate.delete_all
11 @speech_balloon_template = FactoryGirl.create :speech_balloon_template, "name" => "circle@pettan.com", "classname" => "CircleSpeechBalloon", "caption" => "cc", "system_picture_id" => @sp.id, "settings" => '{}'
12 @writing_format = FactoryGirl.create :writing_format
13 @user = FactoryGirl.create( :user_yas)
14 @author = FactoryGirl.create :author, :user_id => @user.id
15 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
16 @other_user = FactoryGirl.create( :user_yas)
17 @other_author = FactoryGirl.create :author, :user_id => @other_user.id
18 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
19 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
20 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
25 @comic = FactoryGirl.create :comic, :author_id => @author.id
26 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
27 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
28 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
31 context 'オーソドックスなデータのとき' do
34 @story_sheet.should be_valid
37 @story_sheet.t = 99999
38 @story_sheet.should be_valid
42 context 'story_idを検証するとき' do
44 @story_sheet.story_id = nil
45 @story_sheet.should_not be_valid
48 @story_sheet.story_id = 'a'
49 @story_sheet.should_not be_valid
51 it '存在するストーリーでなければ失敗する' do
52 @story_sheet.story_id = 0
53 @story_sheet.should_not be_valid
57 context 'sheet_idを検証するとき' do
59 @story_sheet.sheet_id = nil
60 @story_sheet.should_not be_valid
63 @story_sheet.sheet_id = 'a'
64 @story_sheet.should_not be_valid
66 it '存在する用紙でなければ失敗する' do
67 @story_sheet.sheet_id = 0
68 @story_sheet.should_not be_valid
75 @story_sheet.should_not be_valid
79 @story_sheet.should_not be_valid
83 @story_sheet.should_not be_valid
87 context 'author_idを検証するとき' do
89 @story_sheet.author_id = nil
90 @story_sheet.should_not be_valid
93 @story_sheet.author_id = 'a'
94 @story_sheet.should_not be_valid
96 it '存在する作家でなければ失敗する' do
97 @story_sheet.author_id = 0
98 @story_sheet.should_not be_valid
101 context '全体を検証するとき' do
105 describe 'デフォルト値補充に於いて' do
107 @comic = FactoryGirl.create :comic, :author_id => @author.id
108 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
109 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
112 #dbのデフォルト値が0だから明示的にnilにしないと追加ができない
114 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id
115 @story_sheet.supply_default
116 @story_sheet.t.should be_nil
121 describe '上書き補充に於いて' do
123 @comic = FactoryGirl.create :comic, :author_id => @author.id
124 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
125 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
128 context 'author_idを補充' do
129 it '問答無用でauthor_idを補充する' do
130 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id
131 @story_sheet.author_id = nil
132 @story_sheet.overwrite @author
133 @story_sheet.author_id.should eq @author.id
139 describe '所持判定に於いて' do
141 @comic = FactoryGirl.create :comic, :author_id => @author.id
142 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
143 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
144 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
145 @comico = FactoryGirl.create :comic, :author_id => @other_author.id
146 @storyo = FactoryGirl.create :story, :comic_id => @comico.id
147 @sheeto = FactoryGirl.create :sheet, :author_id => @other_author.id
148 @story_sheeto = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @storyo.id, :sheet_id => @sheeto.id
150 context '事前チェックする' do
151 it '自身にロールリストからの作家取得を依頼している' do
152 StorySheet.should_receive(:get_author_from_roles).with(any_args).exactly(1)
153 r = @story_sheet.own?([@author])
156 context 'ロール内作家が取得できるとき' do
159 it 'ロール内作家のidが自身の作家idと一致するなら許可する' do
160 StorySheet.stub(:get_author_from_roles).with(any_args).and_return(@author)
161 r = @story_sheet.own?([@author])
164 it 'ロール内作家のidが自身の作家idと一致しないならno' do
165 StorySheet.stub(:get_author_from_roles).with(any_args).and_return(@other_author)
166 @story_sheet.own?(@other_author).should be_false
169 context 'ロール内作家が取得できないとき' do
171 StorySheet.stub(:get_author_from_roles).with(any_args).and_return(nil)
174 r = @story_sheet.own?([@author])
180 describe '閲覧許可に於いて' do
182 @comic = FactoryGirl.create :comic, :author_id => @author.id
183 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
184 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
185 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
187 context 'オープンモードのとき' do
189 MagicNumber['run_mode'] = 0
191 it '自身にゲスト用ロールチェックを問い合わせしている' do
192 StorySheet.any_instance.stub(:guest_role_check).and_return(true)
193 StorySheet.any_instance.should_receive(:guest_role_check).with(any_args).exactly(1)
194 r = @story_sheet.visible?([@author])
196 it 'ゲスト用ロールチェックが失敗したとき、falseを返す' do
197 StorySheet.any_instance.stub(:guest_role_check).and_return(false)
198 r = @story_sheet.visible?([@author])
202 context 'クローズドモードのとき' do
204 MagicNumber['run_mode'] = 1
206 it '自身に読者用ロールチェックを問い合わせしている' do
207 StorySheet.any_instance.stub(:reader_role_check).and_return(true)
208 StorySheet.any_instance.should_receive(:reader_role_check).with(any_args).exactly(1)
209 r = @story_sheet.visible?([@author])
211 it '読者用ロールチェックが失敗したとき、falseを返す' do
212 StorySheet.any_instance.stub(:reader_role_check).and_return(false)
213 r = @story_sheet.visible?([@author])
217 context '事前チェックする' do
219 MagicNumber['run_mode'] = 1
220 StorySheet.any_instance.stub(:reader_role_check).and_return(true)
222 it '自身のストーリーに所持判定を問い合わせしている' do
223 Story.any_instance.stub(:own?).and_return(true)
224 Story.any_instance.should_receive(:own?).with(any_args).exactly(1)
225 r = @story_sheet.visible?([@author])
227 it '自身のストーリーに閲覧許可を問い合わせしている' do
228 Story.any_instance.stub(:own?).and_return(false)
229 Story.any_instance.stub(:visible?).and_return(true)
230 Story.any_instance.should_receive(:visible?).with(any_args).exactly(1)
231 r = @story_sheet.visible?([@author])
234 context 'つつがなく終わるとき' do
236 MagicNumber['run_mode'] = 1
237 StorySheet.any_instance.stub(:reader_role_check).and_return(true)
239 it '自分のストーリーのスト紙なら許可する' do
240 Story.any_instance.stub(:own?).and_return(true)
241 Story.any_instance.stub(:visible).and_return(0)
242 r = @story_sheet.visible?([@author])
245 it '他人の非公開ストーリーのスト紙なら許可しない' do
246 Story.any_instance.stub(:own?).and_return(false)
247 Story.any_instance.stub(:visible).and_return(0)
248 r = @story_sheet.visible?([@author])
251 it '他人のストーリーのスト紙でも公開なら許可する' do
252 Story.any_instance.stub(:own?).and_return(false)
253 Story.any_instance.stub(:visible).and_return(1)
254 r = @story_sheet.visible?([@author])
260 describe 'プレイリスト取得に於いて' do
262 @comic = FactoryGirl.create :comic, :author_id => @author.id
263 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
264 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
265 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
267 context 'つつがなく終わるとき' do
268 it '用紙に単体取得を問い合わせている' do
269 Sheet.stub(:show).with(any_args).and_return(@sheet)
270 Sheet.should_receive(:show).with(any_args).exactly(1)
271 r = StorySheet.play_sheet @story, @author
274 c = StorySheet.play_sheet @story, @author
277 it '削除された用紙は含んでいない' do
278 @sheet2 = FactoryGirl.create :sheet, :author_id => @author.id
279 h = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet2.id, :t => 1
281 c = StorySheet.play_sheet @story, @author, 2
285 context 'DBに5件あったとして' do
287 @sheet2 = FactoryGirl.create :sheet, :author_id => @author.id
288 @story_sheet2 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet2.id, :t => 1
289 @sheet3 = FactoryGirl.create :sheet, :author_id => @author.id
290 @story_sheet3 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet3.id, :t => 2
291 @sheet4 = FactoryGirl.create :sheet, :author_id => @author.id
292 @story_sheet4 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet4.id, :t => 3
293 @sheet5 = FactoryGirl.create :sheet, :author_id => @author.id
294 @story_sheet5 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet5.id, :t => 4
296 it 'page=1なら先頭を返す' do
298 c = StorySheet.play_sheet( @story, @author, 1)
301 it 'page=5なら末尾を返す' do
302 c = StorySheet.play_sheet(@story, @author, 5)
308 describe '一覧取得に於いて' do
310 @comic = FactoryGirl.create :comic, :author_id => @author.id
311 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
312 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
313 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
314 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
315 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :visible => 1
316 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id
317 @hidden_comic = FactoryGirl.create :comic, :author_id => @author.id
318 @hidden_story = FactoryGirl.create :story, :visible => 0
320 context 'page補正について' do
321 it '文字列から数値に変換される' do
322 StorySheet.page('8').should eq 8
325 StorySheet.page().should eq 1
328 StorySheet.page('0').should eq 1
331 context 'page_size補正について' do
332 it '文字列から数値に変換される' do
333 StorySheet.page_size('7').should eq 7
335 it 'nilの場合はStorySheet.default_page_sizeになる' do
336 StorySheet.page_size().should eq StorySheet.default_page_size
338 it '0以下の場合はStorySheet.default_page_sizeになる' do
339 StorySheet.page_size('0').should eq StorySheet.default_page_size
341 it 'StorySheet.max_page_sizeを超えた場合はStorySheet.max_page_sizeになる' do
342 StorySheet.page_size('1000').should eq StorySheet.max_page_size
347 c.should eq [@story_sheet]
350 #公開ストーリーのStorySheetは(他人のStorySheetであっても)含んでいる
351 v = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 0, :updated_at => Time.now + 100
353 c.should eq [ v, @story_sheet]
355 it '非公開のスト紙は(自分のスト紙であっても)含まない' do
356 h = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @hidden_story.id, :sheet_id => @sheet.id, :t => 0
358 c.should eq [ @story_sheet]
360 context 'DBに5件あって1ページの件数を2件に変えたとして' do
362 @story_sheet2 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1, :updated_at => Time.now + 100
363 @story_sheet3 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 2, :updated_at => Time.now + 200
364 @story_sheet4 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 3, :updated_at => Time.now + 300
365 @story_sheet5 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 4, :updated_at => Time.now + 400
368 l = StorySheet.list 1, 2
369 l.should have(2).items
371 it 'page=1なら末尾2件を返す' do
373 l = StorySheet.list 1, 2
374 l.should eq [@story_sheet5, @story_sheet4]
376 it 'page=2なら中間2件を返す' do
377 l = StorySheet.list 2, 2
378 l.should eq [@story_sheet3, @story_sheet2]
380 it 'page=3なら先頭1件を返す' do
381 l = StorySheet.list 3, 2
382 l.should eq [@story_sheet]
387 describe '自分のスト紙一覧取得に於いて' do
389 @comic = FactoryGirl.create :comic, :author_id => @author.id
390 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
391 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
392 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
393 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
394 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :visible => 1
395 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id, :visible => 1
396 @hcomic = FactoryGirl.create :comic, :author_id => @author.id
397 @hstory = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 0
398 @hsheet = FactoryGirl.create :sheet, :author_id => @author.id, :visible => 0
400 context 'つつがなく終わるとき' do
401 it '一覧取得オプションを利用している' do
402 StorySheet.stub(:list_opt).with(any_args).and_return({})
403 StorySheet.should_receive(:list_opt).with(any_args).exactly(1)
404 r = StorySheet.mylist @author
408 s = StorySheet.mylist @author
409 s.should eq [@story_sheet]
412 ns = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1, :updated_at => Time.now + 100
413 sl = StorySheet.mylist @author
414 sl.should eq [ns, @story_sheet]
416 it '他人のスト紙は用紙ストーリーともに公開でも含まない' do
417 so = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id
418 sl = StorySheet.mylist @author
419 sl.should eq [@story_sheet]
421 it '自分のスト紙は用紙ストーリーともに非公開でも含んでいる' do
422 hs = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @hstory.id, :sheet_id => @hsheet.id, :updated_at => Time.now + 100
423 sl = StorySheet.mylist @author
424 sl.should eq [hs, @story_sheet]
426 context 'DBに5件あって1ページの件数を2件に変えたとして' do
428 @story_sheet2 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1, :updated_at => Time.now + 100
429 @story_sheet3 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 2, :updated_at => Time.now + 200
430 @story_sheet4 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 3, :updated_at => Time.now + 300
431 @story_sheet5 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 4, :updated_at => Time.now + 400
432 StorySheet.stub(:default_page_size).and_return(2)
435 l = StorySheet.mylist @author, 1, 2
436 l.should have(2).items
438 it 'page=1なら末尾2件を返す' do
440 l = StorySheet.mylist @author, 1, 2
441 l.should eq [@story_sheet5, @story_sheet4]
443 it 'page=2なら中間2件を返す' do
444 l = StorySheet.mylist @author, 2, 2
445 l.should eq [@story_sheet3, @story_sheet2]
447 it 'page=3なら先頭1件を返す' do
448 l = StorySheet.mylist @author, 3, 2
449 l.should eq [@story_sheet]
454 describe '他作家のスト紙一覧取得に於いて' do
456 @comic = FactoryGirl.create :comic, :author_id => @author.id
457 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
458 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
459 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
460 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
461 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :visible => 1
462 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id, :visible => 1
463 @other_story_sheet = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id
466 r = StorySheet.himlist @other_author
467 r.should eq [@other_story_sheet]
470 ns = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 1, :updated_at => Time.now + 100
471 r = StorySheet.himlist @other_author
472 r.should eq [ns, @other_story_sheet]
475 @hstory = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 0
476 ns = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @hstory.id, :sheet_id => @other_sheet.id, :t => 1, :updated_at => Time.now + 100
477 r = StorySheet.himlist @other_author
478 r.should eq [@other_story_sheet]
480 context 'DBに5件あって1ページの件数を2件に変えたとして' do
482 @other_story_sheet2 = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 1, :updated_at => Time.now + 100
483 @other_story_sheet3 = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 2, :updated_at => Time.now + 200
484 @other_story_sheet4 = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 3, :updated_at => Time.now + 300
485 @other_story_sheet5 = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id, :t => 4, :updated_at => Time.now + 400
486 StorySheet.stub(:default_page_size).and_return(2)
489 l = StorySheet.himlist @other_author, 1, 2
490 l.should have(2).items
492 it 'page=1なら末尾2件を返す' do
494 l = StorySheet.himlist @other_author, 1, 2
495 l.should eq [@other_story_sheet5, @other_story_sheet4]
497 it 'page=2なら中間2件を返す' do
498 l = StorySheet.himlist @other_author, 2, 2
499 l.should eq [@other_story_sheet3, @other_story_sheet2]
501 it 'page=3なら先頭1件を返す' do
502 l = StorySheet.himlist @other_author, 3, 2
503 l.should eq [@other_story_sheet]
508 describe 'スト紙一覧ページ制御に於いて' do
510 StorySheet.stub(:count).with(any_args).and_return(100)
513 r = StorySheet.list_paginate
514 r.is_a?(Kaminari::PaginatableArray).should be_true
516 it 'スト紙一覧の取得条件を利用している' do
517 StorySheet.stub(:list_where).with(any_args).and_return('')
518 StorySheet.should_receive(:list_where).with(any_args).exactly(1)
519 r = StorySheet.list_paginate
521 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
522 r = StorySheet.list_paginate 3, 10
523 r.limit_value.should eq 10
524 r.offset_value.should eq 20
528 describe '自分のスト紙一覧ページ制御に於いて' do
530 StorySheet.stub(:count).with(any_args).and_return(100)
533 r = StorySheet.mylist_paginate @author
534 r.is_a?(Kaminari::PaginatableArray).should be_true
536 it '自分のスト紙一覧の取得条件を利用している' do
537 StorySheet.stub(:mylist_where).with(any_args).and_return('')
538 StorySheet.should_receive(:mylist_where).with(any_args).exactly(1)
539 r = StorySheet.mylist_paginate @author
541 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
542 r = StorySheet.mylist_paginate @author, 3, 10
543 r.limit_value.should eq 10
544 r.offset_value.should eq 20
548 describe '他作家のスト紙一覧ページ制御に於いて' do
550 StorySheet.stub(:count).with(any_args).and_return(100)
553 r = StorySheet.himlist_paginate @other_author
554 r.is_a?(Kaminari::PaginatableArray).should be_true
556 it '他作家のスト紙一覧の取得条件を利用している' do
557 StorySheet.stub(:himlist_where).with(any_args).and_return('')
558 StorySheet.should_receive(:himlist_where).with(any_args).exactly(1)
559 r = StorySheet.himlist_paginate @other_author
561 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
562 r = StorySheet.himlist_paginate @other_author, 3, 10
563 r.limit_value.should eq 10
564 r.offset_value.should eq 20
568 describe 'list関連テーブルプションに於いて' do
570 r = StorySheet.list_opt
571 r.should have(3).items
574 r = StorySheet.list_opt
575 r.has_key?(:story).should be_true
578 r = StorySheet.list_opt
579 r.has_key?(:author).should be_true
582 r = StorySheet.list_opt
583 r.has_key?(:sheet).should be_true
586 r = StorySheet.list_opt
587 r[:sheet].has_key?(:author).should be_true
590 describe 'json一覧出力オプションに於いて' do
592 @comic = FactoryGirl.create :comic, :author_id => @author.id
593 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
594 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
595 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
598 r = StorySheet.list.to_json StorySheet.list_json_opt
601 i.has_key?('story').should be_true
604 r = StorySheet.list.to_json StorySheet.list_json_opt
607 i.has_key?('sheet').should be_true
610 r = StorySheet.list.to_json StorySheet.list_json_opt
614 s.has_key?('author').should be_true
617 r = StorySheet.list.to_json StorySheet.list_json_opt
620 i.has_key?('author').should be_true
624 describe '単体取得に於いて' do
626 @comic = FactoryGirl.create :comic, :author_id => @author.id
627 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
628 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
629 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
631 context 'つつがなく終わるとき' do
632 it '単体取得オプションを利用している' do
633 StorySheet.stub(:show_opt).with(any_args).and_return({})
634 StorySheet.should_receive(:show_opt).with(any_args).exactly(1)
635 r = StorySheet.show @story_sheet.id, @author
637 it '閲覧許可を問い合わせている' do
638 StorySheet.any_instance.stub(:visible?).with(@author).and_return(true)
639 StorySheet.any_instance.should_receive(:visible?).with(@author).exactly(1)
640 r = StorySheet.show @story_sheet.id, @author
644 l = StorySheet.show @story_sheet.id, @author
645 l.should eq @story_sheet
647 context '他人のスト紙を開こうとしたとき' do
648 it '403Forbidden例外を返す' do
649 StorySheet.any_instance.stub(:visible?).with(@other_author).and_return(false)
651 StorySheet.show @story_sheet.id, @other_author
652 }.should raise_error(ActiveRecord::Forbidden)
655 context '存在しないスト紙を開こうとしたとき' do
656 it '404RecordNotFound例外を返す' do
658 StorySheet.show 110, @author
659 }.should raise_error(ActiveRecord::RecordNotFound)
664 describe '編集取得に於いて' do
666 @comic = FactoryGirl.create :comic, :author_id => @author.id
667 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
668 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
669 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
671 context 'つつがなく終わるとき' do
672 it '単体取得オプションを利用している' do
673 StorySheet.stub(:show_opt).with(any_args).and_return({})
674 StorySheet.should_receive(:show_opt).with(any_args).exactly(1)
675 r = StorySheet.edit @story_sheet.id, @author
677 it '所持判定を問い合わせている' do
678 StorySheet.any_instance.stub(:own?).with(any_args).and_return(true)
679 StorySheet.any_instance.should_receive(:own?).with(any_args).exactly(1)
680 r = StorySheet.edit @story_sheet.id, @author
684 l = StorySheet.edit @story_sheet.id, @author
685 l.should eq @story_sheet
687 context '他人のスト紙を開こうとしたとき' do
688 it '403Forbidden例外を返す' do
689 StorySheet.any_instance.stub(:own?).and_return(false)
691 StorySheet.edit @story_sheet.id, @author
692 }.should raise_error(ActiveRecord::Forbidden)
695 context '存在しないスト紙を開こうとしたとき' do
696 it '404RecordNotFound例外を返す' do
698 StorySheet.edit 110, @author
699 }.should raise_error(ActiveRecord::RecordNotFound)
704 describe '単体取得オプションに於いて' do
705 it 'includeキーを含んでいる' do
706 r = StorySheet.show_opt
707 r.has_key?(:include).should be_true
710 r = StorySheet.show_opt[:include]
711 r.should have(3).items
714 r = StorySheet.show_opt[:include]
715 r.has_key?(:story).should be_true
718 r = StorySheet.show_opt[:include]
719 r.has_key?(:author).should be_true
722 r = StorySheet.show_opt[:include]
723 r.has_key?(:sheet).should be_true
726 r = StorySheet.show_opt[:include]
727 r[:sheet].has_key?(:author).should be_true
730 describe 'json単体取得オプションに於いて' do
732 @comic = FactoryGirl.create :comic, :author_id => @author.id
733 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
734 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
735 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
738 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
741 i.has_key?('story').should be_true
744 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
747 i.has_key?('sheet').should be_true
750 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
754 s.has_key?('author').should be_true
757 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
760 i.has_key?('author').should be_true
764 describe 'スクコマのjson出力に於いて' do
767 @panel = FactoryGirl.create :panel, :author_id => @author.id
768 @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height
769 @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id
770 @speech = @sb.build_speech(
771 FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id)
773 @balloon = @sb.build_balloon(
774 FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id)
778 @gc = @panel.ground_colors.create(
779 FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id)
781 @gp = @panel.ground_pictures.create(
782 FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id)
785 @scroll = FactoryGirl.create :scroll, :author_id => @author.id
786 @scroll_panel = FactoryGirl.create :scroll_panel, :author_id => @author.id, :scroll_id => @scroll.id, :panel_id => @panel.id
788 context '事前チェックする' do
790 Panel.any_instance.stub(:elements).and_return('{}')
792 it 'コマ要素のjson出力を依頼している' do
793 Panel.any_instance.stub(:visible?).with(any_args).and_return(true)
794 Panel.any_instance.should_receive(:elements).with(any_args).exactly(1)
795 r = @scroll_panel.scroll_panel_as_json @author
798 it 'json textを返している' do
799 r = JSON.parse @scroll_panel.scroll_panel_as_json(@author)
800 r.is_a?(Hash).should be_true
802 it 'scroll,author,panel,コマ要素を含んでいる' do
803 r = JSON.parse @scroll_panel.scroll_panel_as_json(@author)
804 r.has_key?('scroll').should be_true
805 r['scroll'].has_key?('author').should be_true
806 r.has_key?('author').should be_true
807 r.has_key?('panel').should be_true
808 r['panel'].has_key?('author').should be_true
810 context 'コマ閲覧許可のとき' do
812 Panel.any_instance.stub(:visible?).with(any_args).and_return(true)
814 it 'コマ要素にコマ要素を追加している' do
815 r = JSON.parse @scroll_panel.scroll_panel_as_json(@author)
816 r['panel'].has_key?('elements').should be_true
817 r['panel']['elements'].should_not be_empty
820 context 'コマ閲覧不許可のとき' do
822 Panel.any_instance.stub(:visible?).with(any_args).and_return(false)
824 it 'コマ要素にデータを含ませない' do
825 r = JSON.parse @scroll_panel.scroll_panel_as_json(@author)
826 r['panel'].has_key?('elements').should be_false
831 describe 'スクコマリストのjson出力に於いて' do
833 @panel = FactoryGirl.create :panel, :author_id => @author.id
834 @scroll = FactoryGirl.create :scroll, :author_id => @author.id
835 @scroll_panel = FactoryGirl.create :scroll_panel, :author_id => @author.id, :scroll_id => @scroll.id, :panel_id => @panel.id
836 ScrollPanel.any_instance.stub(:scroll_panel_as_json).with(@author).and_return('{"s": 5}')
838 context 'つつがなく終わるとき' do
839 it 'スクコマのjson出力を依頼している' do
840 ScrollPanel.any_instance.should_receive(:scroll_panel_as_json).with(@author).exactly(1)
841 r = ScrollPanel.list_as_json_text [@scroll_panel], @author
844 it 'json textを返している' do
845 r = ScrollPanel.list_as_json_text [@scroll_panel], @author
847 j.is_a?(Array).should be_true
850 r = ScrollPanel.list_as_json_text [@scroll_panel], @author
852 j.first.has_key?('s').should be_true
856 describe 't補充値に於いて' do
858 @comic = FactoryGirl.create :comic, :author_id => @author.id
859 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
860 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
863 context 'ストーリー初の用紙なら' do
865 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
867 r = StorySheet.new_t @story_sheet.story_id
871 context 'ストーリーに一個用紙があるとき' do
873 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 0
874 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
876 r = StorySheet.new_t @story_sheet.story_id
880 context 'ストーリーに2個用紙があるとき' do
882 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 0
883 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1
884 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
886 r = StorySheet.new_t @story_sheet.story_id
891 describe 'シリアライズチェックに於いて' do
892 context 'つつがなく終わるとき' do
893 it '0からシリアライズされているならTrueを返す' do
894 r = StorySheet.serial? [0, 1, 2]
897 it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do
898 r = StorySheet.serial? [0, 2, 1]
901 it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do
902 r = StorySheet.serial? [ 2, 1, 4, 3, 0]
907 it '0から始まらないならFalseを返す' do
908 r = StorySheet.serial? [1, 2, 3]
911 it '連続していないならFalseを返す' do
912 r = StorySheet.serial? [0, 1, 2, 4]
915 it '連続していないならFalseを返す' do
916 r = StorySheet.serial? [0, 1, 2, 4, 5]
921 describe 't収集に於いて' do
923 @comic = FactoryGirl.create :comic, :author_id => @author.id
924 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
925 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
926 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
927 @story2 = FactoryGirl.create :story
928 @c2story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
930 context 'つつがなく終わるとき' do
931 it 'スト紙から同一ストーリーのtだけを収集している' do
932 r = StorySheet.collect_t @story_sheet
937 it 'スト紙から同一ストーリーのtだけを収集している' do
938 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
939 r = StorySheet.collect_t @story_sheet
940 r.sort.should eq [0, 1]
943 context '複数用紙でヨソのストーリーも混じっているとき' do
944 it 'スト紙から同一ストーリーのtだけを収集している' do
945 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
946 r = StorySheet.collect_t @story_sheet
947 r.sort.should eq [0, 1]
951 describe 'tチェックに於いて' do
953 @comic = FactoryGirl.create :comic, :author_id => @author.id
954 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
955 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
956 @story_sheet = FactoryGirl.build :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
958 context 'つつがなく終わるとき' do
960 StorySheet.should_receive(:collect_t).with(any_args).exactly(1)
961 StorySheet.stub(:collect_t).with(any_args).and_return([])
962 StorySheet.stub(:serial?).with(any_args).and_return(true)
963 r = StorySheet.validate_t @story_sheet
965 it '収集したtをシリアライズチェック依頼している' do
966 StorySheet.stub(:collect_t).with(any_args).and_return([])
967 StorySheet.should_receive(:serial?).with(any_args).exactly(1)
968 StorySheet.stub(:serial?).with(any_args).and_return(true)
969 r = StorySheet.validate_t @story_sheet
973 #依頼チェックだけでは不安なので最低限のチェックを
975 it '一件だけで正常通過している' do
976 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 0
977 r = StorySheet.validate_t @story_sheet
982 it '2件目を作っても正常通過している' do
983 @story_sheet = FactoryGirl.create :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 0
984 @story_sheet2 = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 1
985 r = StorySheet.validate_t @story_sheet2
990 describe '挿入シフトに於いて' do
992 @comic = FactoryGirl.create :comic, :author_id => @author.id
993 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
994 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
998 it 'Updateを依頼している' do
999 StorySheet.stub(:update_all).with(any_args)
1000 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
1001 @story_sheet = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1002 @story_sheet.insert_shift
1005 context 'テーブルに1件(t:0)で0に挿入したとき' do
1007 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1008 @story_sheet2 = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1010 it '既存の行を1にシフトしている' do
1011 @story_sheet2.insert_shift
1012 l = StorySheet.find :all
1013 l.first.t.should eq 1
1015 it 'これから挿入するt(0)が欠番になっている' do
1016 @story_sheet2.insert_shift
1017 l = StorySheet.find(:all).map {|s| s.t }
1018 l.include?(0).should_not be_true
1021 context 'テーブルに2件(t:0,1)で1に挿入したとき' do
1023 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1024 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1025 @story_sheet3 = FactoryGirl.build :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1027 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1028 @story_sheet3.insert_shift
1029 l = StorySheet.find(:all).map {|s| s.t }
1030 l.sort.should eq [0, 2]
1033 context 'テーブルに5件(t:0,1,2,3,4)で2に挿入したとき' do
1035 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1036 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1037 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1038 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1039 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1040 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1042 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1043 @story_sheet6.insert_shift
1044 l = StorySheet.find(:all).map {|s| s.t }
1045 l.sort.should eq [0, 1, 3, 4, 5]
1048 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1050 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1051 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1052 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1053 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1054 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1055 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1056 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1057 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1059 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1060 @story_sheet6.insert_shift
1061 l = StorySheet.find(:all, :conditions => ['story_id = ?', @story.id]).map {|s| s.t }
1062 l.sort.should eq [0, 1, 3, 4, 5]
1064 it '他のストーリーに影響がない' do
1065 ot = @story_sheetc2.t
1066 @story_sheet6.insert_shift
1067 @story_sheetc2.reload
1068 @story_sheetc2.t.should eq ot
1072 describe '少ない方に移動に於いて' do
1074 @comic = FactoryGirl.create :comic, :author_id => @author.id
1075 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1076 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1079 it 'Updateを依頼している' do
1080 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1081 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1082 StorySheet.stub(:update_all).with(any_args)
1083 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
1084 ot = @story_sheet2.t
1086 @story_sheet2.lesser_shift ot
1089 context 'テーブルに2件(t:0,1)で1を0に移動したとき' do
1091 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1092 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1093 @ot = @story_sheet2.t
1096 it '既存のt0を1にシフトしてこれから挿入するt(0)が欠番になっている' do
1098 @story_sheet2.lesser_shift @ot
1099 l = StorySheet.find(:all).map {|s| s.t }
1100 l.sort.should eq [1, 1]
1102 it '既存のt0を1にシフトしている' do
1103 @story_sheet2.lesser_shift @ot
1105 @story_sheet.t.should eq 1
1108 context 'テーブルに3件(t:0,1,2)で2を1に移動したとき' do
1110 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1111 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1112 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1113 @ot = @story_sheet3.t
1116 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1118 @story_sheet3.lesser_shift @ot
1119 l = StorySheet.find(:all).map {|s| s.t }
1120 l.sort.should eq [0, 2, 2]
1122 it '既存のt1を2にシフトしている' do
1123 @story_sheet3.lesser_shift @ot
1124 @story_sheet2.reload
1125 @story_sheet2.t.should eq 2
1128 context 'テーブルに5件(t:0,1,2,3,4)で3を1に移動したとき' do
1130 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1131 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1132 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1133 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1134 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1135 @ot = @story_sheet4.t
1138 it 'これから挿入するt(1)が欠番になっている' do
1140 @story_sheet4.lesser_shift @ot
1141 l = StorySheet.find(:all).map {|s| s.t }
1142 l.sort.should eq [0, 2, 3, 3, 4]
1144 it '既存のt0には変化がない' do
1145 @story_sheet4.lesser_shift @ot
1147 @story_sheet.t.should eq 0
1149 it '既存のt4には変化がない' do
1150 @story_sheet4.lesser_shift @ot
1151 @story_sheet5.reload
1152 @story_sheet5.t.should eq 4
1154 it '既存のt1を2にシフトしている' do
1155 @story_sheet4.lesser_shift @ot
1156 @story_sheet2.reload
1157 @story_sheet2.t.should eq 2
1159 it '既存のt2を3にシフトしている' do
1160 @story_sheet4.lesser_shift @ot
1161 @story_sheet3.reload
1162 @story_sheet3.t.should eq 3
1165 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1167 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1168 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1169 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1170 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1171 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1172 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1173 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1174 @ot = @story_sheet4.t
1177 it 'これから挿入するt(1)が欠番になっている' do
1178 @story_sheet4.lesser_shift @ot
1179 l = StorySheet.find(:all).map {|s| s.t }
1180 l.sort.should eq [0, 0, 2, 3, 3, 4]
1182 it '既存のt0には変化がない' do
1183 @story_sheet4.lesser_shift @ot
1185 @story_sheet.t.should eq 0
1187 it '既存のt4には変化がない' do
1188 @story_sheet4.lesser_shift @ot
1189 @story_sheet5.reload
1190 @story_sheet5.t.should eq 4
1192 it '既存のt1を2にシフトしている' do
1193 @story_sheet4.lesser_shift @ot
1194 @story_sheet2.reload
1195 @story_sheet2.t.should eq 2
1197 it '既存のt2を3にシフトしている' do
1198 @story_sheet4.lesser_shift @ot
1199 @story_sheet3.reload
1200 @story_sheet3.t.should eq 3
1202 it '他のストーリーに影響がない' do
1203 @story_sheet4.lesser_shift @ot
1204 @story_sheetc2.reload
1205 @story_sheetc2.t.should eq 0
1210 context 'テーブルに2件(t:0,1)で1を-1に移動したとき' do
1212 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1213 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1214 @ot = @story_sheet2.t
1215 @story_sheet2.t = -1
1217 it '既存のt0を1にシフトしてこれから挿入するt(0)が欠番になっている' do
1219 @story_sheet2.lesser_shift @ot
1220 l = StorySheet.find(:all).map {|s| s.t }
1221 l.sort.should eq [1, 1]
1223 it '既存のt0を1にシフトしている' do
1224 @story_sheet2.lesser_shift @ot
1226 @story_sheet.t.should eq 1
1228 it '既存のt1は0に補正されている' do
1229 @story_sheet2.lesser_shift @ot
1230 @story_sheet2.t.should eq 0
1234 describe '大きい方に移動に於いて' do
1236 @comic = FactoryGirl.create :comic, :author_id => @author.id
1237 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1238 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1241 it 'Updateを依頼している' do
1242 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1243 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1244 StorySheet.stub(:update_all).with(any_args)
1245 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
1248 @story_sheet.higher_shift ot
1251 context 'テーブルに2件(t:0,1)で0を1に移動したとき' do
1253 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1254 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1255 @ot = @story_sheet.t
1258 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1260 @story_sheet.higher_shift @ot
1261 l = StorySheet.find(:all).map {|s| s.t }
1262 l.sort.should eq [0, 0]
1264 it '既存のt1を0にシフトしている' do
1265 @story_sheet.higher_shift @ot
1266 @story_sheet2.reload
1267 @story_sheet2.t.should eq 0
1270 context 'テーブルに3件(t:0,1,2)で0を1に移動したとき' do
1272 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1273 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1274 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1275 @ot = @story_sheet.t
1278 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1280 @story_sheet.higher_shift @ot
1281 l = StorySheet.find(:all).map {|s| s.t }
1282 l.sort.should eq [0, 0, 2]
1284 it '既存のt1を0にシフトしている' do
1285 @story_sheet.higher_shift @ot
1286 @story_sheet2.reload
1287 @story_sheet2.t.should eq 0
1290 context 'テーブルに5件(t:0,1,2,3,4)で1を3に移動したとき' do
1292 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1293 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1294 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1295 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1296 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1297 @ot = @story_sheet2.t
1300 it 'これから挿入するt(3)が欠番になっている' do
1302 @story_sheet2.higher_shift @ot
1303 l = StorySheet.find(:all).map {|s| s.t }
1304 l.sort.should eq [0, 1, 1, 2, 4]
1306 it '既存のt0には変化がない' do
1307 @story_sheet2.higher_shift @ot
1309 @story_sheet.t.should eq 0
1311 it '既存のt4には変化がない' do
1312 @story_sheet2.higher_shift @ot
1313 @story_sheet5.reload
1314 @story_sheet5.t.should eq 4
1316 it '既存のt2を1にシフトしている' do
1317 @story_sheet2.higher_shift @ot
1318 @story_sheet3.reload
1319 @story_sheet3.t.should eq 1
1321 it '既存のt3を2にシフトしている' do
1322 @story_sheet2.higher_shift @ot
1323 @story_sheet4.reload
1324 @story_sheet4.t.should eq 2
1327 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1329 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1330 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1331 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1332 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1333 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1334 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1335 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1336 @ot = @story_sheet2.t
1339 it 'これから挿入するt(3)が欠番になっている' do
1341 @story_sheet2.higher_shift @ot
1342 l = StorySheet.find(:all).map {|s| s.t }
1343 l.sort.should eq [0, 0, 1, 1, 2, 4]
1345 it '既存のt0には変化がない' do
1346 @story_sheet2.higher_shift @ot
1348 @story_sheet.t.should eq 0
1350 it '既存のt4には変化がない' do
1351 @story_sheet2.higher_shift @ot
1352 @story_sheet5.reload
1353 @story_sheet5.t.should eq 4
1355 it '既存のt2を1にシフトしている' do
1356 @story_sheet2.higher_shift @ot
1357 @story_sheet3.reload
1358 @story_sheet3.t.should eq 1
1360 it '既存のt3を2にシフトしている' do
1361 @story_sheet2.higher_shift @ot
1362 @story_sheet4.reload
1363 @story_sheet4.t.should eq 2
1365 it '他のストーリーに影響がない' do
1366 @story_sheet2.higher_shift @ot
1367 @story_sheetc2.reload
1368 @story_sheetc2.t.should eq 0
1372 #max超えたときはmaxとして正常扱い
1373 context 'テーブルに2件(t:0,1)で0を2に移動したとき' do
1375 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1376 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1377 @ot = @story_sheet.t
1380 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1382 @story_sheet.higher_shift @ot
1383 l = StorySheet.find(:all).map {|s| s.t }
1384 l.sort.should eq [0, 0]
1386 it '既存のt1を0にシフトしている' do
1387 @story_sheet.higher_shift @ot
1388 @story_sheet2.reload
1389 @story_sheet2.t.should eq 0
1391 it '既存のt0は1に補正されている' do
1392 @story_sheet.higher_shift @ot
1393 @story_sheet.t.should eq 1
1397 describe '入れ替えに於いて' do
1399 @comic = FactoryGirl.create :comic, :author_id => @author.id
1400 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1401 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1402 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1403 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1405 context '新tが旧tより小さいとき' do
1406 it '少ない方に移動を依頼している' do
1407 StorySheet.any_instance.stub(:lesser_shift).with(any_args)
1408 StorySheet.any_instance.should_receive(:lesser_shift).with(any_args).exactly(1)
1409 ot = @story_sheet2.t
1411 @story_sheet2.update_shift ot
1414 context '新tが旧tより大きいとき' do
1415 it '大きい方に移動を依頼している' do
1416 StorySheet.any_instance.stub(:higher_shift).with(any_args)
1417 StorySheet.any_instance.should_receive(:higher_shift).with(any_args).exactly(1)
1420 @story_sheet.update_shift ot
1424 describe '順序入れ替えに於いて' do
1426 @comic = FactoryGirl.create :comic, :author_id => @author.id
1427 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1428 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1430 context 'オブジェクトが新規でtが空のとき' do
1431 it '末尾追加としてtを補充依頼している' do
1432 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1433 StorySheet.stub(:new_t).with(any_args).and_return(0)
1434 StorySheet.should_receive(:new_t).with(any_args).exactly(1)
1435 @story_sheet.t = nil
1436 r = @story_sheet.rotate
1439 context 'オブジェクトが新規でtが設定されているとき' do
1440 it '挿入追加として挿入シフトを依頼している' do
1441 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1442 StorySheet.any_instance.stub(:insert_shift).with(any_args)
1443 StorySheet.any_instance.should_receive(:insert_shift).with(any_args).exactly(1)
1445 r = @story_sheet.rotate
1448 context 'オブジェクトが新規でなくtが設定されているとき' do
1449 it '用紙移動として入れ替えを依頼している' do
1450 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1451 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1452 StorySheet.any_instance.stub(:update_shift).with(any_args)
1453 StorySheet.any_instance.should_receive(:update_shift).with(1).exactly(1)
1455 r = @story_sheet.rotate 1
1458 context 'オブジェクトが新規でなくtが空のとき' do
1459 it '入れ替えもシフトもせず、tを空のままにしている' do
1460 #結果、tに欠番が生じてシリアライズチェックでひっかかる
1464 describe '編集許可に於いて' do
1466 @comic = FactoryGirl.create :comic, :author_id => @author.id
1467 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1468 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1469 @story_sheet = FactoryGirl.build :story_sheet, :t => nil, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1471 context 'つつがなく終わるとき' do
1473 r = @story_sheet.allow?
1477 context 'ストーリーで引っかかるとき' do
1479 Sheet.any_instance.stub(:usable?).with(any_args).and_return(true)
1480 Story.any_instance.stub(:own?).with(any_args).and_return(false)
1481 r = @story_sheet.allow?
1485 context '用紙で引っかかるとき' do
1487 Story.any_instance.stub(:own?).with(any_args).and_return(true)
1488 Sheet.any_instance.stub(:usable?).with(any_args).and_return(false)
1489 r = @story_sheet.allow?
1493 context 'ストーリーまたは用紙が指定されていなかったとき' do
1495 Story.any_instance.stub(:own?).with(any_args).and_return(true)
1496 @story_sheet.sheet_id = nil
1497 r = @story_sheet.allow?
1501 Sheet.any_instance.stub(:usable?).with(any_args).and_return(true)
1502 @story_sheet.story_id = nil
1503 r = @story_sheet.allow?
1508 describe '保存に於いて' do
1510 @comic = FactoryGirl.create :comic, :author_id => @author.id
1511 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1512 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1513 @story_sheet = FactoryGirl.build :story_sheet, :t => nil, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1515 context 'つつがなく終わるとき' do
1516 it '編集許可チェックを依頼している' do
1517 StorySheet.any_instance.stub(:allow?).with(any_args).and_return(true)
1518 StorySheet.any_instance.should_receive(:allow?).with(any_args).exactly(1)
1519 r = @story_sheet.store
1521 it '順序入れ替えを依頼している' do
1522 StorySheet.any_instance.stub(:rotate).with(any_args).and_return(0)
1523 StorySheet.any_instance.should_receive(:rotate).with(any_args).exactly(1)
1524 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1525 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1526 r = @story_sheet.store
1529 StorySheet.stub(:new_t).with(any_args).and_return(0)
1530 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1531 StorySheet.any_instance.should_receive(:save).with(any_args).exactly(1)
1532 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1533 r = @story_sheet.store
1535 it 'tのシリアライズチェックを依頼している' do
1536 StorySheet.stub(:new_t).with(any_args).and_return(0)
1537 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1538 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1539 StorySheet.should_receive(:validate_t).with(any_args).exactly(1)
1540 r = @story_sheet.store
1543 #入れ替えテストと同じテストを実施。こちらはシフトだけでなく本尊も更新されている
1544 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で2に挿入したとき' do
1546 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1547 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1548 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1549 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1550 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1551 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1552 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1553 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1555 it '既存のt0には変化がない' do
1558 @story_sheet.t.should eq 0
1560 it '既存のt1には変化がない' do
1562 @story_sheet2.reload
1563 @story_sheet2.t.should eq 1
1565 it '既存のt2を3にシフトしている' do
1567 @story_sheet3.reload
1568 @story_sheet3.t.should eq 3
1570 it '既存のt3を4にシフトしている' do
1572 @story_sheet4.reload
1573 @story_sheet4.t.should eq 4
1575 it '既存のt5を5にシフトしている' do
1577 @story_sheet5.reload
1578 @story_sheet5.t.should eq 5
1580 it '新規のt2が作成されている' do
1582 @story_sheet6.reload
1583 @story_sheet6.t.should eq 2
1585 it '他のストーリーに影響がない' do
1586 @ot = @story_sheetc2.t
1588 @story_sheetc2.reload
1589 @story_sheetc2.t.should eq @ot
1592 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で3を1に移動したとき' do
1594 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1595 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1596 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1597 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1598 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1599 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1600 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1601 @ot = @story_sheet4.t
1604 it '既存のt0には変化がない' do
1605 @story_sheet4.store @ot
1607 @story_sheet.t.should eq 0
1609 it '既存のt4には変化がない' do
1610 @story_sheet4.store @ot
1611 @story_sheet5.reload
1612 @story_sheet5.t.should eq 4
1614 it '既存のt1を2にシフトしている' do
1615 @story_sheet4.store @ot
1616 @story_sheet2.reload
1617 @story_sheet2.t.should eq 2
1619 it '既存のt2を3にシフトしている' do
1620 @story_sheet4.store @ot
1621 @story_sheet3.reload
1622 @story_sheet3.t.should eq 3
1624 it '既存のt3を1にシフトしている' do
1625 @story_sheet4.store @ot
1626 @story_sheet4.reload
1627 @story_sheet4.t.should eq 1
1629 it '他のストーリーに影響がない' do
1630 @story_sheet4.store @ot
1631 @story_sheetc2.reload
1632 @story_sheetc2.t.should eq 0
1635 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で1を3に移動したとき' do
1637 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1638 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1639 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1640 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1641 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1642 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1643 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1644 @ot = @story_sheet2.t
1647 it '既存のt0には変化がない' do
1648 @story_sheet2.store @ot
1650 @story_sheet.t.should eq 0
1652 it '既存のt4には変化がない' do
1653 @story_sheet2.store @ot
1654 @story_sheet5.reload
1655 @story_sheet5.t.should eq 4
1657 it '既存のt1を3にシフトしている' do
1658 @story_sheet2.store @ot
1659 @story_sheet2.reload
1660 @story_sheet2.t.should eq 3
1662 it '既存のt2を1にシフトしている' do
1663 @story_sheet2.store @ot
1664 @story_sheet3.reload
1665 @story_sheet3.t.should eq 1
1667 it '既存のt3を2にシフトしている' do
1668 @story_sheet2.store @ot
1669 @story_sheet4.reload
1670 @story_sheet4.t.should eq 2
1672 it '他のストーリーに影響がない' do
1673 @story_sheet2.store @ot
1674 @story_sheetc2.reload
1675 @story_sheetc2.t.should eq 0
1678 #ロールバックテスト。入れ替えが直接DBをいじるので、すべてのケースで確実にロールバックを確認する
1679 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で2に挿入したが保存に失敗したとき' do
1681 StorySheet.any_instance.stub(:save).with(any_args).and_return(false)
1682 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1683 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1684 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1685 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1686 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1687 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1688 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1689 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1694 @story_sheet.t.should eq 0
1695 @story_sheet2.reload
1696 @story_sheet2.t.should eq 1
1697 @story_sheet3.reload
1698 @story_sheet3.t.should eq 2
1699 @story_sheet4.reload
1700 @story_sheet4.t.should eq 3
1701 @story_sheet5.reload
1702 @story_sheet5.t.should eq 4
1703 @story_sheetc2.reload
1704 @story_sheetc2.t.should eq 0
1707 r = @story_sheet6.store
1711 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で3を1に移動したがシリアルチェックに失敗したとき' do
1713 StorySheet.stub(:validate_t).with(any_args).and_return(false)
1714 @story2 = FactoryGirl.create :story, :comic_id => @comic.id
1715 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1716 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1717 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1718 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1719 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1720 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1721 @ot = @story_sheet4.t
1725 @story_sheet4.store @ot
1727 @story_sheet.t.should eq 0
1728 @story_sheet2.reload
1729 @story_sheet2.t.should eq 1
1730 @story_sheet3.reload
1731 @story_sheet3.t.should eq 2
1732 @story_sheet4.reload
1733 @story_sheet4.t.should eq 3
1734 @story_sheet5.reload
1735 @story_sheet5.t.should eq 4
1736 @story_sheetc2.reload
1737 @story_sheetc2.t.should eq 0
1740 r = @story_sheet4.store @ot
1743 it 'tにエラーメッセージが入っている' do
1744 @story_sheet4.store @ot
1745 @story_sheet4.errors[:t].should_not be_empty
1746 @story_sheet4.valid?.should be_true
1749 context '編集不可だったとき' do
1751 @story_sheet = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1752 StorySheet.any_instance.stub(:allow?).and_return(false)
1754 it '403Forbidden例外を返す' do
1757 }.should raise_error(ActiveRecord::Forbidden)
1761 describe '切り詰め処理つき削除に於いて' do
1763 @comic = FactoryGirl.create :comic, :author_id => @author.id
1764 @story = FactoryGirl.create :story, :comic_id => @comic.id, :visible => 1
1765 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1766 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1768 context 'つつがなく終わるとき' do
1771 @story_sheet.destroy_and_shorten
1772 }.should change(StorySheet, :count ).by(-1)
1775 r = @story_sheet.destroy_and_shorten
1779 context '削除に失敗したとき' do
1781 StorySheet.any_instance.stub(:destroy).and_return(false)
1785 @story_sheet.destroy_and_shorten
1786 }.should_not change(StorySheet, :count )
1789 r = @story_sheet.destroy_and_shorten
1793 #連携テスト。切り詰めが直接DBをいじる
1794 context '2件で先頭を削除したとき' do
1796 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1800 @story_sheet.destroy_and_shorten
1801 }.should change(StorySheet, :count ).by(-1)
1804 @story_sheet.destroy_and_shorten
1806 StorySheet.find @story_sheet.id
1807 }.should raise_error(ActiveRecord::RecordNotFound)
1810 @story_sheet.destroy_and_shorten
1811 @story_sheet2.reload
1812 @story_sheet2.t.should eq 0
1815 context '3件で先頭を削除したとき' do
1817 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1818 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1822 @story_sheet.destroy_and_shorten
1823 }.should change(StorySheet, :count ).by(-1)
1826 @story_sheet.destroy_and_shorten
1828 StorySheet.find @story_sheet.id
1829 }.should raise_error(ActiveRecord::RecordNotFound)
1832 @story_sheet.destroy_and_shorten
1833 @story_sheet2.reload
1834 @story_sheet2.t.should eq 0
1837 @story_sheet.destroy_and_shorten
1838 @story_sheet3.reload
1839 @story_sheet3.t.should eq 1
1842 context '5件で3件目を削除したとき' do
1844 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1845 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1846 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1847 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1851 @story_sheet3.destroy_and_shorten
1852 }.should change(StorySheet, :count ).by(-1)
1855 @story_sheet3.destroy_and_shorten
1857 @story_sheet.t.should eq 0
1860 @story_sheet3.destroy_and_shorten
1861 @story_sheet2.reload
1862 @story_sheet2.t.should eq 1
1865 @story_sheet3.destroy_and_shorten
1867 StorySheet.find @story_sheet3.id
1868 }.should raise_error(ActiveRecord::RecordNotFound)
1871 @story_sheet3.destroy_and_shorten
1872 @story_sheet4.reload
1873 @story_sheet4.t.should eq 2
1876 @story_sheet3.destroy_and_shorten
1877 @story_sheet5.reload
1878 @story_sheet5.t.should eq 3
1881 #ロールバックテスト。切り詰めが直接DBをいじるので、すべてのケースで確実にロールバックを確認する