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, :author_id => @author.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, :author_id => @author.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, :author_id => @author.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, :author_id => @author.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, :author_id => @other_author.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, :author_id => @author.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, :author_id => @author.id, :visible => 1
264 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
265 @sheet2 = FactoryGirl.create :sheet, :author_id => @author.id, :visible => 0
266 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
267 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
268 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :author_id => @other_author.id, :visible => 1
269 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id, :visible => 1
271 context 'offset補正について' do
272 it '文字列から数値に変換される' do
273 StorySheet.offset(100, '8').should eq 8
276 StorySheet.offset(100).should eq 0
278 #投稿された用紙数以上の値が指定されたときは、最後の用紙だけになる
280 it '1件のときオフセット1なら0になる' do
281 StorySheet.offset(1, '1').should eq 0
283 it '5件のときオフセット5なら4になる' do
284 StorySheet.offset(5, '5').should eq 4
286 # 負の値が指定されたときは、最後の用紙から数えて用紙を飛ばして表示する。
287 #-4のときは、最後から4つの用紙を表示する。
288 it '2件のときオフセット-1なら1になる' do
289 StorySheet.offset(2, '-1').should eq 1
291 it '5件のときオフセット-2なら3になる' do
292 StorySheet.offset(5, '-2').should eq 3
294 # 最終的なが負になるなど、不正な値が入ったときは0となる。
295 it '2件のときオフセット-5なら0になる' do
296 StorySheet.offset(2, '-5').should eq 0
299 context 'sheet_count補正について' do
300 it '文字列から数値に変換される' do
301 StorySheet.sheet_count(100, '7').should eq 7
303 it 'nilの場合はStorySheet.default_sheet_sizeになる' do
304 StorySheet.sheet_count(100).should eq StorySheet.default_sheet_size
306 it '0以下の場合はStorySheet.default_sheet_sizeになる' do
307 StorySheet.sheet_count(100, '0').should eq StorySheet.default_sheet_size
309 it 'StorySheet.max_sheet_sizeを超えた場合はStorySheet.max_sheet_sizeになる' do
310 StorySheet.sheet_count(100, '1000').should eq StorySheet.max_sheet_size
314 c = StorySheet.play_list @story, @author
315 c.should eq [@story_sheet]
318 #公開ストーリーの公開用紙は(他人のストーリーであっても)含んでいる
319 v = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1
320 c = StorySheet.play_list @story, @author
321 c.should eq [ @story_sheet, v]
324 h = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet2.id, :t => 1
325 c = StorySheet.play_list @story, @author
326 c.should eq [ @story_sheet, h]
328 context 'DBに5件あって1ページの件数を2件に変えたとして' do
330 @story_sheet2 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1
331 @story_sheet3 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 2
332 @story_sheet4 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 3
333 @story_sheet5 = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 4
335 it 'offset=0なら末尾2件を返す' do
337 c = StorySheet.play_list( @story, @author, 0, 2)
338 c.should eq [@story_sheet, @story_sheet2]
340 it 'offset=2なら中間2件を返す' do
341 c = StorySheet.play_list(@story, @author, 2, 2)
342 c.should eq [@story_sheet3, @story_sheet4]
344 it 'offset=4なら先頭1件を返す' do
345 c = StorySheet.play_list(@story, @author, 4, 2)
346 c.should eq [@story_sheet5]
351 describe '一覧取得に於いて' do
353 @comic = FactoryGirl.create :comic, :author_id => @author.id
354 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
355 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
356 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
357 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
358 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :author_id => @other_author.id, :visible => 1
359 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id
360 @hidden_comic = FactoryGirl.create :comic, :author_id => @author.id
361 @hidden_story = FactoryGirl.create :story, :author_id => @author.id, :visible => 0
363 context 'page補正について' do
364 it '文字列から数値に変換される' do
365 StorySheet.page('8').should eq 8
368 StorySheet.page().should eq 1
371 StorySheet.page('0').should eq 1
374 context 'page_size補正について' do
375 it '文字列から数値に変換される' do
376 StorySheet.page_size('7').should eq 7
378 it 'nilの場合はStorySheet.default_page_sizeになる' do
379 StorySheet.page_size().should eq StorySheet.default_page_size
381 it '0以下の場合はStorySheet.default_page_sizeになる' do
382 StorySheet.page_size('0').should eq StorySheet.default_page_size
384 it 'StorySheet.max_page_sizeを超えた場合はStorySheet.max_page_sizeになる' do
385 StorySheet.page_size('1000').should eq StorySheet.max_page_size
390 c.should eq [@story_sheet]
393 #公開ストーリーのStorySheetは(他人のStorySheetであっても)含んでいる
394 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
396 c.should eq [ v, @story_sheet]
398 it '非公開のスト紙は(自分のスト紙であっても)含まない' do
399 h = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @hidden_story.id, :sheet_id => @sheet.id, :t => 0
401 c.should eq [ @story_sheet]
403 context 'DBに5件あって1ページの件数を2件に変えたとして' do
405 @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
406 @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
407 @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
408 @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
411 l = StorySheet.list 1, 2
412 l.should have(2).items
414 it 'page=1なら末尾2件を返す' do
416 l = StorySheet.list 1, 2
417 l.should eq [@story_sheet5, @story_sheet4]
419 it 'page=2なら中間2件を返す' do
420 l = StorySheet.list 2, 2
421 l.should eq [@story_sheet3, @story_sheet2]
423 it 'page=3なら先頭1件を返す' do
424 l = StorySheet.list 3, 2
425 l.should eq [@story_sheet]
430 describe '自分のスト紙一覧取得に於いて' do
432 @comic = FactoryGirl.create :comic, :author_id => @author.id
433 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
434 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
435 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
436 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
437 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :author_id => @other_author.id, :visible => 1
438 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id, :visible => 1
439 @hcomic = FactoryGirl.create :comic, :author_id => @author.id
440 @hstory = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 0
441 @hsheet = FactoryGirl.create :sheet, :author_id => @author.id, :visible => 0
443 context 'つつがなく終わるとき' do
444 it '一覧取得オプションを利用している' do
445 StorySheet.stub(:list_opt).with(any_args).and_return({})
446 StorySheet.should_receive(:list_opt).with(any_args).exactly(1)
447 r = StorySheet.mylist @author
451 s = StorySheet.mylist @author
452 s.should eq [@story_sheet]
455 ns = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1, :updated_at => Time.now + 100
456 sl = StorySheet.mylist @author
457 sl.should eq [ns, @story_sheet]
459 it '他人のスト紙は用紙ストーリーともに公開でも含まない' do
460 so = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id
461 sl = StorySheet.mylist @author
462 sl.should eq [@story_sheet]
464 it '自分のスト紙は用紙ストーリーともに非公開でも含んでいる' do
465 hs = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @hstory.id, :sheet_id => @hsheet.id, :updated_at => Time.now + 100
466 sl = StorySheet.mylist @author
467 sl.should eq [hs, @story_sheet]
469 context 'DBに5件あって1ページの件数を2件に変えたとして' do
471 @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
472 @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
473 @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
474 @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
475 StorySheet.stub(:default_page_size).and_return(2)
478 l = StorySheet.mylist @author, 1, 2
479 l.should have(2).items
481 it 'page=1なら末尾2件を返す' do
483 l = StorySheet.mylist @author, 1, 2
484 l.should eq [@story_sheet5, @story_sheet4]
486 it 'page=2なら中間2件を返す' do
487 l = StorySheet.mylist @author, 2, 2
488 l.should eq [@story_sheet3, @story_sheet2]
490 it 'page=3なら先頭1件を返す' do
491 l = StorySheet.mylist @author, 3, 2
492 l.should eq [@story_sheet]
497 describe '他作家のスト紙一覧取得に於いて' do
499 @comic = FactoryGirl.create :comic, :author_id => @author.id
500 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
501 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
502 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
503 @other_comic = FactoryGirl.create :comic, :author_id => @other_author.id
504 @other_story = FactoryGirl.create :story, :comic_id => @other_comic.id, :author_id => @other_author.id, :visible => 1
505 @other_sheet = FactoryGirl.create :sheet, :author_id => @other_author.id, :visible => 1
506 @other_story_sheet = FactoryGirl.create :story_sheet, :author_id => @other_author.id, :story_id => @other_story.id, :sheet_id => @other_sheet.id
509 r = StorySheet.himlist @other_author
510 r.should eq [@other_story_sheet]
513 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
514 r = StorySheet.himlist @other_author
515 r.should eq [ns, @other_story_sheet]
518 @hstory = FactoryGirl.create :story, :author_id => @other_author.id, :visible => 0
519 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
520 r = StorySheet.himlist @other_author
521 r.should eq [@other_story_sheet]
523 context 'DBに5件あって1ページの件数を2件に変えたとして' do
525 @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
526 @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
527 @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
528 @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
529 StorySheet.stub(:default_page_size).and_return(2)
532 l = StorySheet.himlist @other_author, 1, 2
533 l.should have(2).items
535 it 'page=1なら末尾2件を返す' do
537 l = StorySheet.himlist @other_author, 1, 2
538 l.should eq [@other_story_sheet5, @other_story_sheet4]
540 it 'page=2なら中間2件を返す' do
541 l = StorySheet.himlist @other_author, 2, 2
542 l.should eq [@other_story_sheet3, @other_story_sheet2]
544 it 'page=3なら先頭1件を返す' do
545 l = StorySheet.himlist @other_author, 3, 2
546 l.should eq [@other_story_sheet]
551 describe 'スト紙一覧ページ制御に於いて' do
553 StorySheet.stub(:count).with(any_args).and_return(100)
556 r = StorySheet.list_paginate
557 r.is_a?(Kaminari::PaginatableArray).should be_true
559 it 'スト紙一覧の取得条件を利用している' do
560 StorySheet.stub(:list_where).with(any_args).and_return('')
561 StorySheet.should_receive(:list_where).with(any_args).exactly(1)
562 r = StorySheet.list_paginate
564 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
565 r = StorySheet.list_paginate 3, 10
566 r.limit_value.should eq 10
567 r.offset_value.should eq 20
571 describe '自分のスト紙一覧ページ制御に於いて' do
573 StorySheet.stub(:count).with(any_args).and_return(100)
576 r = StorySheet.mylist_paginate @author
577 r.is_a?(Kaminari::PaginatableArray).should be_true
579 it '自分のスト紙一覧の取得条件を利用している' do
580 StorySheet.stub(:mylist_where).with(any_args).and_return('')
581 StorySheet.should_receive(:mylist_where).with(any_args).exactly(1)
582 r = StorySheet.mylist_paginate @author
584 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
585 r = StorySheet.mylist_paginate @author, 3, 10
586 r.limit_value.should eq 10
587 r.offset_value.should eq 20
591 describe '他作家のスト紙一覧ページ制御に於いて' do
593 StorySheet.stub(:count).with(any_args).and_return(100)
596 r = StorySheet.himlist_paginate @other_author
597 r.is_a?(Kaminari::PaginatableArray).should be_true
599 it '他作家のスト紙一覧の取得条件を利用している' do
600 StorySheet.stub(:himlist_where).with(any_args).and_return('')
601 StorySheet.should_receive(:himlist_where).with(any_args).exactly(1)
602 r = StorySheet.himlist_paginate @other_author
604 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
605 r = StorySheet.himlist_paginate @other_author, 3, 10
606 r.limit_value.should eq 10
607 r.offset_value.should eq 20
611 describe 'list関連テーブルプションに於いて' do
613 r = StorySheet.list_opt
614 r.should have(3).items
617 r = StorySheet.list_opt
618 r.has_key?(:story).should be_true
620 it 'ストーリーは作家を含んでいる' do
621 r = StorySheet.list_opt
622 r[:story].has_key?(:author).should be_true
625 r = StorySheet.list_opt
626 r.has_key?(:author).should be_true
629 r = StorySheet.list_opt
630 r.has_key?(:sheet).should be_true
633 r = StorySheet.list_opt
634 r[:sheet].has_key?(:author).should be_true
637 describe 'json一覧出力オプションに於いて' do
639 @comic = FactoryGirl.create :comic, :author_id => @author.id
640 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
641 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
642 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
645 r = StorySheet.list.to_json StorySheet.list_json_opt
648 i.has_key?('story').should be_true
650 it 'ストーリーは作家を含んでいる' do
651 r = StorySheet.list.to_json StorySheet.list_json_opt
655 s.has_key?('author').should be_true
658 r = StorySheet.list.to_json StorySheet.list_json_opt
661 i.has_key?('sheet').should be_true
664 r = StorySheet.list.to_json StorySheet.list_json_opt
668 s.has_key?('author').should be_true
671 r = StorySheet.list.to_json StorySheet.list_json_opt
674 i.has_key?('author').should be_true
678 describe '単体取得に於いて' do
680 @comic = FactoryGirl.create :comic, :author_id => @author.id
681 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
682 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
683 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
685 context 'つつがなく終わるとき' do
686 it '単体取得オプションを利用している' do
687 StorySheet.stub(:show_opt).with(any_args).and_return({})
688 StorySheet.should_receive(:show_opt).with(any_args).exactly(1)
689 r = StorySheet.show @story_sheet.id, @author
691 it '閲覧許可を問い合わせている' do
692 StorySheet.any_instance.stub(:visible?).with(@author).and_return(true)
693 StorySheet.any_instance.should_receive(:visible?).with(@author).exactly(1)
694 r = StorySheet.show @story_sheet.id, @author
698 l = StorySheet.show @story_sheet.id, @author
699 l.should eq @story_sheet
701 context '他人のスト紙を開こうとしたとき' do
702 it '403Forbidden例外を返す' do
703 StorySheet.any_instance.stub(:visible?).with(@other_author).and_return(false)
705 StorySheet.show @story_sheet.id, @other_author
706 }.should raise_error(ActiveRecord::Forbidden)
709 context '存在しないスト紙を開こうとしたとき' do
710 it '404RecordNotFound例外を返す' do
712 StorySheet.show 110, @author
713 }.should raise_error(ActiveRecord::RecordNotFound)
718 describe '編集取得に於いて' do
720 @comic = FactoryGirl.create :comic, :author_id => @author.id
721 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
722 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
723 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
725 context 'つつがなく終わるとき' do
726 it '単体取得オプションを利用している' do
727 StorySheet.stub(:show_opt).with(any_args).and_return({})
728 StorySheet.should_receive(:show_opt).with(any_args).exactly(1)
729 r = StorySheet.edit @story_sheet.id, @author
731 it '所持判定を問い合わせている' do
732 StorySheet.any_instance.stub(:own?).with(any_args).and_return(true)
733 StorySheet.any_instance.should_receive(:own?).with(any_args).exactly(1)
734 r = StorySheet.edit @story_sheet.id, @author
738 l = StorySheet.edit @story_sheet.id, @author
739 l.should eq @story_sheet
741 context '他人のスト紙を開こうとしたとき' do
742 it '403Forbidden例外を返す' do
743 StorySheet.any_instance.stub(:own?).and_return(false)
745 StorySheet.edit @story_sheet.id, @author
746 }.should raise_error(ActiveRecord::Forbidden)
749 context '存在しないスト紙を開こうとしたとき' do
750 it '404RecordNotFound例外を返す' do
752 StorySheet.edit 110, @author
753 }.should raise_error(ActiveRecord::RecordNotFound)
758 describe '単体取得オプションに於いて' do
759 it 'includeキーを含んでいる' do
760 r = StorySheet.show_opt
761 r.has_key?(:include).should be_true
764 r = StorySheet.show_opt[:include]
765 r.should have(3).items
768 r = StorySheet.show_opt[:include]
769 r.has_key?(:story).should be_true
771 it 'ストーリーは作家を含んでいる' do
772 r = StorySheet.show_opt[:include]
773 r[:story].has_key?(:author).should be_true
776 r = StorySheet.show_opt[:include]
777 r.has_key?(:author).should be_true
780 r = StorySheet.show_opt[:include]
781 r.has_key?(:sheet).should be_true
784 r = StorySheet.show_opt[:include]
785 r[:sheet].has_key?(:author).should be_true
788 describe 'json単体取得オプションに於いて' do
790 @comic = FactoryGirl.create :comic, :author_id => @author.id
791 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
792 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
793 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
796 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
799 i.has_key?('story').should be_true
801 it 'ストーリーは作家を含んでいる' do
802 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
806 s.has_key?('author').should be_true
809 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
812 i.has_key?('sheet').should be_true
815 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
819 s.has_key?('author').should be_true
822 r = StorySheet.show(@story_sheet.id, @author).to_json StorySheet.show_json_opt
825 i.has_key?('author').should be_true
829 describe 't補充値に於いて' do
831 @comic = FactoryGirl.create :comic, :author_id => @author.id
832 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
833 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
836 context 'ストーリー初の用紙なら' do
838 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
840 r = StorySheet.new_t @story_sheet.story_id
844 context 'ストーリーに一個用紙があるとき' do
846 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 0
847 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
849 r = StorySheet.new_t @story_sheet.story_id
853 context 'ストーリーに2個用紙があるとき' do
855 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 0
856 FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id, :t => 1
857 @story_sheet = FactoryGirl.build :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
859 r = StorySheet.new_t @story_sheet.story_id
864 describe 'シリアライズチェックに於いて' do
865 context 'つつがなく終わるとき' do
866 it '0からシリアライズされているならTrueを返す' do
867 r = StorySheet.serial? [0, 1, 2]
870 it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do
871 r = StorySheet.serial? [0, 2, 1]
874 it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do
875 r = StorySheet.serial? [ 2, 1, 4, 3, 0]
880 it '0から始まらないならFalseを返す' do
881 r = StorySheet.serial? [1, 2, 3]
884 it '連続していないならFalseを返す' do
885 r = StorySheet.serial? [0, 1, 2, 4]
888 it '連続していないならFalseを返す' do
889 r = StorySheet.serial? [0, 1, 2, 4, 5]
894 describe 't収集に於いて' do
896 @comic = FactoryGirl.create :comic, :author_id => @author.id
897 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
898 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
899 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
900 @story2 = FactoryGirl.create :story, :author_id => @author.id
901 @c2story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
903 context 'つつがなく終わるとき' do
904 it 'スト紙から同一ストーリーのtだけを収集している' do
905 r = StorySheet.collect_t @story_sheet
910 it 'スト紙から同一ストーリーのtだけを収集している' do
911 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
912 r = StorySheet.collect_t @story_sheet
913 r.sort.should eq [0, 1]
916 context '複数用紙でヨソのストーリーも混じっているとき' do
917 it 'スト紙から同一ストーリーのtだけを収集している' do
918 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
919 r = StorySheet.collect_t @story_sheet
920 r.sort.should eq [0, 1]
924 describe 'tチェックに於いて' do
926 @comic = FactoryGirl.create :comic, :author_id => @author.id
927 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
928 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
929 @story_sheet = FactoryGirl.build :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
931 context 'つつがなく終わるとき' do
933 StorySheet.should_receive(:collect_t).with(any_args).exactly(1)
934 StorySheet.stub(:collect_t).with(any_args).and_return([])
935 StorySheet.stub(:serial?).with(any_args).and_return(true)
936 r = StorySheet.validate_t @story_sheet
938 it '収集したtをシリアライズチェック依頼している' do
939 StorySheet.stub(:collect_t).with(any_args).and_return([])
940 StorySheet.should_receive(:serial?).with(any_args).exactly(1)
941 StorySheet.stub(:serial?).with(any_args).and_return(true)
942 r = StorySheet.validate_t @story_sheet
946 #依頼チェックだけでは不安なので最低限のチェックを
948 it '一件だけで正常通過している' do
949 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 0
950 r = StorySheet.validate_t @story_sheet
955 it '2件目を作っても正常通過している' do
956 @story_sheet = FactoryGirl.create :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 0
957 @story_sheet2 = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id, :t => 1
958 r = StorySheet.validate_t @story_sheet2
963 describe '挿入シフトに於いて' do
965 @comic = FactoryGirl.create :comic, :author_id => @author.id
966 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
967 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
971 it 'Updateを依頼している' do
972 StorySheet.stub(:update_all).with(any_args)
973 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
974 @story_sheet = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
975 @story_sheet.insert_shift
978 context 'テーブルに1件(t:0)で0に挿入したとき' do
980 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
981 @story_sheet2 = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
983 it '既存の行を1にシフトしている' do
984 @story_sheet2.insert_shift
985 l = StorySheet.find :all
986 l.first.t.should eq 1
988 it 'これから挿入するt(0)が欠番になっている' do
989 @story_sheet2.insert_shift
990 l = StorySheet.find(:all).map {|s| s.t }
991 l.include?(0).should_not be_true
994 context 'テーブルに2件(t:0,1)で1に挿入したとき' do
996 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
997 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
998 @story_sheet3 = FactoryGirl.build :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1000 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1001 @story_sheet3.insert_shift
1002 l = StorySheet.find(:all).map {|s| s.t }
1003 l.sort.should eq [0, 2]
1006 context 'テーブルに5件(t:0,1,2,3,4)で2に挿入したとき' do
1008 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1009 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1010 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1011 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1012 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1013 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1015 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1016 @story_sheet6.insert_shift
1017 l = StorySheet.find(:all).map {|s| s.t }
1018 l.sort.should eq [0, 1, 3, 4, 5]
1021 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1023 @story2 = FactoryGirl.create :story, :author_id => @author.id
1024 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1025 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1026 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1027 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1028 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1029 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1030 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1032 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1033 @story_sheet6.insert_shift
1034 l = StorySheet.find(:all, :conditions => ['story_id = ?', @story.id]).map {|s| s.t }
1035 l.sort.should eq [0, 1, 3, 4, 5]
1037 it '他のストーリーに影響がない' do
1038 ot = @story_sheetc2.t
1039 @story_sheet6.insert_shift
1040 @story_sheetc2.reload
1041 @story_sheetc2.t.should eq ot
1045 describe '少ない方に移動に於いて' do
1047 @comic = FactoryGirl.create :comic, :author_id => @author.id
1048 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1049 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1052 it 'Updateを依頼している' do
1053 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1054 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1055 StorySheet.stub(:update_all).with(any_args)
1056 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
1057 ot = @story_sheet2.t
1059 @story_sheet2.lesser_shift ot
1062 context 'テーブルに2件(t:0,1)で1を0に移動したとき' do
1064 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1065 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1066 @ot = @story_sheet2.t
1069 it '既存のt0を1にシフトしてこれから挿入するt(0)が欠番になっている' do
1071 @story_sheet2.lesser_shift @ot
1072 l = StorySheet.find(:all).map {|s| s.t }
1073 l.sort.should eq [1, 1]
1075 it '既存のt0を1にシフトしている' do
1076 @story_sheet2.lesser_shift @ot
1078 @story_sheet.t.should eq 1
1081 context 'テーブルに3件(t:0,1,2)で2を1に移動したとき' do
1083 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1084 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1085 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1086 @ot = @story_sheet3.t
1089 it '既存のt1を2にシフトしてこれから挿入するt(1)が欠番になっている' do
1091 @story_sheet3.lesser_shift @ot
1092 l = StorySheet.find(:all).map {|s| s.t }
1093 l.sort.should eq [0, 2, 2]
1095 it '既存のt1を2にシフトしている' do
1096 @story_sheet3.lesser_shift @ot
1097 @story_sheet2.reload
1098 @story_sheet2.t.should eq 2
1101 context 'テーブルに5件(t:0,1,2,3,4)で3を1に移動したとき' do
1103 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1104 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1105 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1106 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1107 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1108 @ot = @story_sheet4.t
1111 it 'これから挿入するt(1)が欠番になっている' do
1113 @story_sheet4.lesser_shift @ot
1114 l = StorySheet.find(:all).map {|s| s.t }
1115 l.sort.should eq [0, 2, 3, 3, 4]
1117 it '既存のt0には変化がない' do
1118 @story_sheet4.lesser_shift @ot
1120 @story_sheet.t.should eq 0
1122 it '既存のt4には変化がない' do
1123 @story_sheet4.lesser_shift @ot
1124 @story_sheet5.reload
1125 @story_sheet5.t.should eq 4
1127 it '既存のt1を2にシフトしている' do
1128 @story_sheet4.lesser_shift @ot
1129 @story_sheet2.reload
1130 @story_sheet2.t.should eq 2
1132 it '既存のt2を3にシフトしている' do
1133 @story_sheet4.lesser_shift @ot
1134 @story_sheet3.reload
1135 @story_sheet3.t.should eq 3
1138 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1140 @story2 = FactoryGirl.create :story, :author_id => @author.id
1141 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1142 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1143 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1144 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1145 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1146 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1147 @ot = @story_sheet4.t
1150 it 'これから挿入するt(1)が欠番になっている' do
1151 @story_sheet4.lesser_shift @ot
1152 l = StorySheet.find(:all).map {|s| s.t }
1153 l.sort.should eq [0, 0, 2, 3, 3, 4]
1155 it '既存のt0には変化がない' do
1156 @story_sheet4.lesser_shift @ot
1158 @story_sheet.t.should eq 0
1160 it '既存のt4には変化がない' do
1161 @story_sheet4.lesser_shift @ot
1162 @story_sheet5.reload
1163 @story_sheet5.t.should eq 4
1165 it '既存のt1を2にシフトしている' do
1166 @story_sheet4.lesser_shift @ot
1167 @story_sheet2.reload
1168 @story_sheet2.t.should eq 2
1170 it '既存のt2を3にシフトしている' do
1171 @story_sheet4.lesser_shift @ot
1172 @story_sheet3.reload
1173 @story_sheet3.t.should eq 3
1175 it '他のストーリーに影響がない' do
1176 @story_sheet4.lesser_shift @ot
1177 @story_sheetc2.reload
1178 @story_sheetc2.t.should eq 0
1183 context 'テーブルに2件(t:0,1)で1を-1に移動したとき' do
1185 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1186 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1187 @ot = @story_sheet2.t
1188 @story_sheet2.t = -1
1190 it '既存のt0を1にシフトしてこれから挿入するt(0)が欠番になっている' do
1192 @story_sheet2.lesser_shift @ot
1193 l = StorySheet.find(:all).map {|s| s.t }
1194 l.sort.should eq [1, 1]
1196 it '既存のt0を1にシフトしている' do
1197 @story_sheet2.lesser_shift @ot
1199 @story_sheet.t.should eq 1
1201 it '既存のt1は0に補正されている' do
1202 @story_sheet2.lesser_shift @ot
1203 @story_sheet2.t.should eq 0
1207 describe '大きい方に移動に於いて' do
1209 @comic = FactoryGirl.create :comic, :author_id => @author.id
1210 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1211 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1214 it 'Updateを依頼している' do
1215 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1216 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1217 StorySheet.stub(:update_all).with(any_args)
1218 StorySheet.should_receive(:update_all).with(any_args).exactly(1)
1221 @story_sheet.higher_shift ot
1224 context 'テーブルに2件(t:0,1)で0を1に移動したとき' do
1226 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1227 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1228 @ot = @story_sheet.t
1231 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1233 @story_sheet.higher_shift @ot
1234 l = StorySheet.find(:all).map {|s| s.t }
1235 l.sort.should eq [0, 0]
1237 it '既存のt1を0にシフトしている' do
1238 @story_sheet.higher_shift @ot
1239 @story_sheet2.reload
1240 @story_sheet2.t.should eq 0
1243 context 'テーブルに3件(t:0,1,2)で0を1に移動したとき' do
1245 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1246 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1247 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1248 @ot = @story_sheet.t
1251 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1253 @story_sheet.higher_shift @ot
1254 l = StorySheet.find(:all).map {|s| s.t }
1255 l.sort.should eq [0, 0, 2]
1257 it '既存のt1を0にシフトしている' do
1258 @story_sheet.higher_shift @ot
1259 @story_sheet2.reload
1260 @story_sheet2.t.should eq 0
1263 context 'テーブルに5件(t:0,1,2,3,4)で1を3に移動したとき' do
1265 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1266 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1267 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1268 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1269 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1270 @ot = @story_sheet2.t
1273 it 'これから挿入するt(3)が欠番になっている' do
1275 @story_sheet2.higher_shift @ot
1276 l = StorySheet.find(:all).map {|s| s.t }
1277 l.sort.should eq [0, 1, 1, 2, 4]
1279 it '既存のt0には変化がない' do
1280 @story_sheet2.higher_shift @ot
1282 @story_sheet.t.should eq 0
1284 it '既存のt4には変化がない' do
1285 @story_sheet2.higher_shift @ot
1286 @story_sheet5.reload
1287 @story_sheet5.t.should eq 4
1289 it '既存のt2を1にシフトしている' do
1290 @story_sheet2.higher_shift @ot
1291 @story_sheet3.reload
1292 @story_sheet3.t.should eq 1
1294 it '既存のt3を2にシフトしている' do
1295 @story_sheet2.higher_shift @ot
1296 @story_sheet4.reload
1297 @story_sheet4.t.should eq 2
1300 context '先ほどのケース+他のストーリー1件で挿入したとき' do
1302 @story2 = FactoryGirl.create :story, :author_id => @author.id
1303 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1304 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1305 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1306 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1307 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1308 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1309 @ot = @story_sheet2.t
1312 it 'これから挿入するt(3)が欠番になっている' do
1314 @story_sheet2.higher_shift @ot
1315 l = StorySheet.find(:all).map {|s| s.t }
1316 l.sort.should eq [0, 0, 1, 1, 2, 4]
1318 it '既存のt0には変化がない' do
1319 @story_sheet2.higher_shift @ot
1321 @story_sheet.t.should eq 0
1323 it '既存のt4には変化がない' do
1324 @story_sheet2.higher_shift @ot
1325 @story_sheet5.reload
1326 @story_sheet5.t.should eq 4
1328 it '既存のt2を1にシフトしている' do
1329 @story_sheet2.higher_shift @ot
1330 @story_sheet3.reload
1331 @story_sheet3.t.should eq 1
1333 it '既存のt3を2にシフトしている' do
1334 @story_sheet2.higher_shift @ot
1335 @story_sheet4.reload
1336 @story_sheet4.t.should eq 2
1338 it '他のストーリーに影響がない' do
1339 @story_sheet2.higher_shift @ot
1340 @story_sheetc2.reload
1341 @story_sheetc2.t.should eq 0
1345 #max超えたときはmaxとして正常扱い
1346 context 'テーブルに2件(t:0,1)で0を2に移動したとき' do
1348 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1349 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1350 @ot = @story_sheet.t
1353 it '既存のt1を0にシフトしてこれから挿入するt(1)が欠番になっている' do
1355 @story_sheet.higher_shift @ot
1356 l = StorySheet.find(:all).map {|s| s.t }
1357 l.sort.should eq [0, 0]
1359 it '既存のt1を0にシフトしている' do
1360 @story_sheet.higher_shift @ot
1361 @story_sheet2.reload
1362 @story_sheet2.t.should eq 0
1364 it '既存のt0は1に補正されている' do
1365 @story_sheet.higher_shift @ot
1366 @story_sheet.t.should eq 1
1370 describe '入れ替えに於いて' do
1372 @comic = FactoryGirl.create :comic, :author_id => @author.id
1373 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1374 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
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
1378 context '新tが旧tより小さいとき' do
1379 it '少ない方に移動を依頼している' do
1380 StorySheet.any_instance.stub(:lesser_shift).with(any_args)
1381 StorySheet.any_instance.should_receive(:lesser_shift).with(any_args).exactly(1)
1382 ot = @story_sheet2.t
1384 @story_sheet2.update_shift ot
1387 context '新tが旧tより大きいとき' do
1388 it '大きい方に移動を依頼している' do
1389 StorySheet.any_instance.stub(:higher_shift).with(any_args)
1390 StorySheet.any_instance.should_receive(:higher_shift).with(any_args).exactly(1)
1393 @story_sheet.update_shift ot
1397 describe '順序入れ替えに於いて' do
1399 @comic = FactoryGirl.create :comic, :author_id => @author.id
1400 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1401 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1403 context 'オブジェクトが新規でtが空のとき' do
1404 it '末尾追加としてtを補充依頼している' do
1405 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1406 StorySheet.stub(:new_t).with(any_args).and_return(0)
1407 StorySheet.should_receive(:new_t).with(any_args).exactly(1)
1408 @story_sheet.t = nil
1409 r = @story_sheet.rotate
1412 context 'オブジェクトが新規でtが設定されているとき' do
1413 it '挿入追加として挿入シフトを依頼している' do
1414 @story_sheet = FactoryGirl.build :story_sheet, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1415 StorySheet.any_instance.stub(:insert_shift).with(any_args)
1416 StorySheet.any_instance.should_receive(:insert_shift).with(any_args).exactly(1)
1418 r = @story_sheet.rotate
1421 context 'オブジェクトが新規でなくtが設定されているとき' do
1422 it '用紙移動として入れ替えを依頼している' do
1423 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1424 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1425 StorySheet.any_instance.stub(:update_shift).with(any_args)
1426 StorySheet.any_instance.should_receive(:update_shift).with(1).exactly(1)
1428 r = @story_sheet.rotate 1
1431 context 'オブジェクトが新規でなくtが空のとき' do
1432 it '入れ替えもシフトもせず、tを空のままにしている' do
1433 #結果、tに欠番が生じてシリアライズチェックでひっかかる
1437 describe '編集許可に於いて' do
1439 @comic = FactoryGirl.create :comic, :author_id => @author.id
1440 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1441 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1442 @story_sheet = FactoryGirl.build :story_sheet, :t => nil, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1444 context 'つつがなく終わるとき' do
1446 r = @story_sheet.allow?
1450 context 'ストーリーで引っかかるとき' do
1452 Sheet.any_instance.stub(:usable?).with(any_args).and_return(true)
1453 Story.any_instance.stub(:own?).with(any_args).and_return(false)
1454 r = @story_sheet.allow?
1458 context '用紙で引っかかるとき' do
1460 Story.any_instance.stub(:own?).with(any_args).and_return(true)
1461 Sheet.any_instance.stub(:usable?).with(any_args).and_return(false)
1462 r = @story_sheet.allow?
1466 context 'ストーリーまたは用紙が指定されていなかったとき' do
1468 Story.any_instance.stub(:own?).with(any_args).and_return(true)
1469 @story_sheet.sheet_id = nil
1470 r = @story_sheet.allow?
1474 Sheet.any_instance.stub(:usable?).with(any_args).and_return(true)
1475 @story_sheet.story_id = nil
1476 r = @story_sheet.allow?
1481 describe '保存に於いて' do
1483 @comic = FactoryGirl.create :comic, :author_id => @author.id
1484 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1485 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1486 @story_sheet = FactoryGirl.build :story_sheet, :t => nil, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1488 context 'つつがなく終わるとき' do
1489 it '編集許可チェックを依頼している' do
1490 StorySheet.any_instance.stub(:allow?).with(any_args).and_return(true)
1491 StorySheet.any_instance.should_receive(:allow?).with(any_args).exactly(1)
1492 r = @story_sheet.store
1494 it '順序入れ替えを依頼している' do
1495 StorySheet.any_instance.stub(:rotate).with(any_args).and_return(0)
1496 StorySheet.any_instance.should_receive(:rotate).with(any_args).exactly(1)
1497 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1498 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1499 r = @story_sheet.store
1502 StorySheet.stub(:new_t).with(any_args).and_return(0)
1503 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1504 StorySheet.any_instance.should_receive(:save).with(any_args).exactly(1)
1505 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1506 r = @story_sheet.store
1508 it 'tのシリアライズチェックを依頼している' do
1509 StorySheet.stub(:new_t).with(any_args).and_return(0)
1510 StorySheet.any_instance.stub(:save).with(any_args).and_return(true)
1511 StorySheet.stub(:validate_t).with(any_args).and_return(true)
1512 StorySheet.should_receive(:validate_t).with(any_args).exactly(1)
1513 r = @story_sheet.store
1516 #入れ替えテストと同じテストを実施。こちらはシフトだけでなく本尊も更新されている
1517 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で2に挿入したとき' do
1519 @story2 = FactoryGirl.create :story, :author_id => @author.id
1520 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1521 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1522 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1523 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1524 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1525 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1526 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1528 it '既存のt0には変化がない' do
1531 @story_sheet.t.should eq 0
1533 it '既存のt1には変化がない' do
1535 @story_sheet2.reload
1536 @story_sheet2.t.should eq 1
1538 it '既存のt2を3にシフトしている' do
1540 @story_sheet3.reload
1541 @story_sheet3.t.should eq 3
1543 it '既存のt3を4にシフトしている' do
1545 @story_sheet4.reload
1546 @story_sheet4.t.should eq 4
1548 it '既存のt5を5にシフトしている' do
1550 @story_sheet5.reload
1551 @story_sheet5.t.should eq 5
1553 it '新規のt2が作成されている' do
1555 @story_sheet6.reload
1556 @story_sheet6.t.should eq 2
1558 it '他のストーリーに影響がない' do
1559 @ot = @story_sheetc2.t
1561 @story_sheetc2.reload
1562 @story_sheetc2.t.should eq @ot
1565 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で3を1に移動したとき' do
1567 @story2 = FactoryGirl.create :story, :author_id => @author.id
1568 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1569 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1570 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1571 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1572 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1573 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1574 @ot = @story_sheet4.t
1577 it '既存のt0には変化がない' do
1578 @story_sheet4.store @ot
1580 @story_sheet.t.should eq 0
1582 it '既存のt4には変化がない' do
1583 @story_sheet4.store @ot
1584 @story_sheet5.reload
1585 @story_sheet5.t.should eq 4
1587 it '既存のt1を2にシフトしている' do
1588 @story_sheet4.store @ot
1589 @story_sheet2.reload
1590 @story_sheet2.t.should eq 2
1592 it '既存のt2を3にシフトしている' do
1593 @story_sheet4.store @ot
1594 @story_sheet3.reload
1595 @story_sheet3.t.should eq 3
1597 it '既存のt3を1にシフトしている' do
1598 @story_sheet4.store @ot
1599 @story_sheet4.reload
1600 @story_sheet4.t.should eq 1
1602 it '他のストーリーに影響がない' do
1603 @story_sheet4.store @ot
1604 @story_sheetc2.reload
1605 @story_sheetc2.t.should eq 0
1608 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で1を3に移動したとき' do
1610 @story2 = FactoryGirl.create :story, :author_id => @author.id
1611 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1612 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1613 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1614 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1615 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1616 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1617 @ot = @story_sheet2.t
1620 it '既存のt0には変化がない' do
1621 @story_sheet2.store @ot
1623 @story_sheet.t.should eq 0
1625 it '既存のt4には変化がない' do
1626 @story_sheet2.store @ot
1627 @story_sheet5.reload
1628 @story_sheet5.t.should eq 4
1630 it '既存のt1を3にシフトしている' do
1631 @story_sheet2.store @ot
1632 @story_sheet2.reload
1633 @story_sheet2.t.should eq 3
1635 it '既存のt2を1にシフトしている' do
1636 @story_sheet2.store @ot
1637 @story_sheet3.reload
1638 @story_sheet3.t.should eq 1
1640 it '既存のt3を2にシフトしている' do
1641 @story_sheet2.store @ot
1642 @story_sheet4.reload
1643 @story_sheet4.t.should eq 2
1645 it '他のストーリーに影響がない' do
1646 @story_sheet2.store @ot
1647 @story_sheetc2.reload
1648 @story_sheetc2.t.should eq 0
1651 #ロールバックテスト。入れ替えが直接DBをいじるので、すべてのケースで確実にロールバックを確認する
1652 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で2に挿入したが保存に失敗したとき' do
1654 StorySheet.any_instance.stub(:save).with(any_args).and_return(false)
1655 @story2 = FactoryGirl.create :story, :author_id => @author.id
1656 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1657 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1658 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1659 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1660 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1661 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1662 @story_sheet6 = FactoryGirl.build :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1667 @story_sheet.t.should eq 0
1668 @story_sheet2.reload
1669 @story_sheet2.t.should eq 1
1670 @story_sheet3.reload
1671 @story_sheet3.t.should eq 2
1672 @story_sheet4.reload
1673 @story_sheet4.t.should eq 3
1674 @story_sheet5.reload
1675 @story_sheet5.t.should eq 4
1676 @story_sheetc2.reload
1677 @story_sheetc2.t.should eq 0
1680 r = @story_sheet6.store
1684 context 'テーブルに5件(t:0,1,2,3,4)+他のストーリー1件で3を1に移動したがシリアルチェックに失敗したとき' do
1686 StorySheet.stub(:validate_t).with(any_args).and_return(false)
1687 @story2 = FactoryGirl.create :story, :author_id => @author.id
1688 @story_sheetc2 = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story2.id, :sheet_id => @sheet.id, :author_id => @author.id
1689 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1690 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1691 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1692 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1693 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1694 @ot = @story_sheet4.t
1698 @story_sheet4.store @ot
1700 @story_sheet.t.should eq 0
1701 @story_sheet2.reload
1702 @story_sheet2.t.should eq 1
1703 @story_sheet3.reload
1704 @story_sheet3.t.should eq 2
1705 @story_sheet4.reload
1706 @story_sheet4.t.should eq 3
1707 @story_sheet5.reload
1708 @story_sheet5.t.should eq 4
1709 @story_sheetc2.reload
1710 @story_sheetc2.t.should eq 0
1713 r = @story_sheet4.store @ot
1716 it 'tにエラーメッセージが入っている' do
1717 @story_sheet4.store @ot
1718 @story_sheet4.errors[:t].should_not be_empty
1719 @story_sheet4.valid?.should be_true
1722 context '編集不可だったとき' do
1724 @story_sheet = FactoryGirl.build :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1725 StorySheet.any_instance.stub(:allow?).and_return(false)
1727 it '403Forbidden例外を返す' do
1730 }.should raise_error(ActiveRecord::Forbidden)
1734 describe '切り詰め処理つき削除に於いて' do
1736 @comic = FactoryGirl.create :comic, :author_id => @author.id
1737 @story = FactoryGirl.create :story, :comic_id => @comic.id, :author_id => @author.id, :visible => 1
1738 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
1739 @story_sheet = FactoryGirl.create :story_sheet, :t => 0, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1741 context 'つつがなく終わるとき' do
1744 @story_sheet.destroy_and_shorten
1745 }.should change(StorySheet, :count ).by(-1)
1748 r = @story_sheet.destroy_and_shorten
1752 context '削除に失敗したとき' do
1754 StorySheet.any_instance.stub(:destroy).and_return(false)
1758 @story_sheet.destroy_and_shorten
1759 }.should_not change(StorySheet, :count )
1762 r = @story_sheet.destroy_and_shorten
1766 #連携テスト。切り詰めが直接DBをいじる
1767 context '2件で先頭を削除したとき' do
1769 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1773 @story_sheet.destroy_and_shorten
1774 }.should change(StorySheet, :count ).by(-1)
1777 @story_sheet.destroy_and_shorten
1779 StorySheet.find @story_sheet.id
1780 }.should raise_error(ActiveRecord::RecordNotFound)
1783 @story_sheet.destroy_and_shorten
1784 @story_sheet2.reload
1785 @story_sheet2.t.should eq 0
1788 context '3件で先頭を削除したとき' do
1790 @story_sheet2 = FactoryGirl.create :story_sheet, :t => 1, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1791 @story_sheet3 = FactoryGirl.create :story_sheet, :t => 2, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1795 @story_sheet.destroy_and_shorten
1796 }.should change(StorySheet, :count ).by(-1)
1799 @story_sheet.destroy_and_shorten
1801 StorySheet.find @story_sheet.id
1802 }.should raise_error(ActiveRecord::RecordNotFound)
1805 @story_sheet.destroy_and_shorten
1806 @story_sheet2.reload
1807 @story_sheet2.t.should eq 0
1810 @story_sheet.destroy_and_shorten
1811 @story_sheet3.reload
1812 @story_sheet3.t.should eq 1
1815 context '5件で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
1819 @story_sheet4 = FactoryGirl.create :story_sheet, :t => 3, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1820 @story_sheet5 = FactoryGirl.create :story_sheet, :t => 4, :story_id => @story.id, :sheet_id => @sheet.id, :author_id => @author.id
1824 @story_sheet3.destroy_and_shorten
1825 }.should change(StorySheet, :count ).by(-1)
1828 @story_sheet3.destroy_and_shorten
1830 @story_sheet.t.should eq 0
1833 @story_sheet3.destroy_and_shorten
1834 @story_sheet2.reload
1835 @story_sheet2.t.should eq 1
1838 @story_sheet3.destroy_and_shorten
1840 StorySheet.find @story_sheet3.id
1841 }.should raise_error(ActiveRecord::RecordNotFound)
1844 @story_sheet3.destroy_and_shorten
1845 @story_sheet4.reload
1846 @story_sheet4.t.should eq 2
1849 @story_sheet3.destroy_and_shorten
1850 @story_sheet5.reload
1851 @story_sheet5.t.should eq 3
1854 #ロールバックテスト。切り詰めが直接DBをいじるので、すべてのケースで確実にロールバックを確認する