# -*- encoding: utf-8 -*-\r
-require 'spec_helper'
-
-describe Panel do
- before do
- Factory :admin
- @license = Factory :license
- @user = Factory( :user_yas)
- @author = @user.author
+require 'spec_helper'\r
+#コマ\r
+describe Panel do\r
+ before do\r
+ Factory :admin\r
+ @license = Factory :license\r
+ @user = Factory( :user_yas)\r
+ @author = @user.author\r
@artist = Factory :artist_yas, :author_id => @author.id\r
- @other_user = Factory( :user_yas)
- @other_author = @other_user.author
- @other_artist = Factory :artist_yas, :author_id => @other_author.id
+ @other_user = Factory( :user_yas)\r
+ @other_author = @other_user.author\r
+ @other_artist = Factory :artist_yas, :author_id => @other_author.id\r
@op = Factory :original_picture, :artist_id => @artist.id, :license_id => @license.id\r
- @rp = Factory :resource_picture, :original_picture_id => @op.id, :license_id => @license.id
+ @rp = Factory :resource_picture, :original_picture_id => @op.id, :license_id => @license.id\r
+ @sbt = Factory :speech_balloon_template\r
end\r
-
- describe '検証に於いて' do
+ \r
+ describe '検証に於いて' do\r
before do\r
- @comic = Factory :comic, :author_id => @author.id
- end
-
- it 'オーソドックスなデータなら通る' do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- @panel.should be_valid
- end
-
- context 'comic_idを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => nil
- end
- it 'テストデータの確認' do
- @panel.comic_id = @comic.id
- @panel.should be_valid
- end
- it 'nullなら失敗する' do
- @panel.comic_id = nil
- @panel.should_not be_valid
- end
- it '数値でなければ失敗する' do
- @panel.comic_id = 'a'
- @panel.should_not be_valid
- end
- it '存在するコミックでなければ失敗する' do
- @panel.comic_id = 0
- @panel.should_not be_valid
- end
- it 'コミックidとtが重複していると失敗する' do
- @panel.save\r
- @panel2 = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- @panel2.should_not be_valid
- end
- end
- context 'resource_picture_idを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.resource_picture_id = @rp.id
- @panel.should be_valid
- end
- it 'nullなら通る' do
- @panel.resource_picture_id = nil
- @panel.should be_valid
- end
- it '数値でなければ失敗する' do
- @panel.resource_picture_id = 'a'
- @panel.should_not be_valid
- end
- end
- context 'widthを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.width = 1
- @panel.should be_valid
- end
- it 'nullなら失敗する' do
- @panel.width = nil
- @panel.should_not be_valid
- end
- it '数値でなければ失敗する' do
- @panel.width = 'a'
- @panel.should_not be_valid
- end
- it '0なら失敗する' do
- @panel.width = '0'
- @panel.should_not be_valid
- end
- it '負でも失敗する' do
- @panel.width = -1
- @panel.should_not be_valid
- end
- end
- context 'heightを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.height = '1'
- @panel.should be_valid
- end
- it 'nullなら失敗する' do
- @panel.height = nil
- @panel.should_not be_valid
- end
- it '数値でなければ失敗する' do
- @panel.height = 'a'
- @panel.should_not be_valid
- end
- it '0なら失敗する' do
- @panel.height = '0'
- @panel.should_not be_valid
- end
- it '負でも失敗する' do
- @panel.height = -1
- @panel.should_not be_valid
- end
- end
- context 'borderを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.border = '1'
- @panel.should be_valid
- end
- it 'nullなら失敗する' do
- @panel.border = nil
- @panel.should_not be_valid
- end
- it '数値でなければ失敗する' do
- @panel.border = 'a'
- @panel.should_not be_valid
- end
- it '負なら失敗する' do
- @panel.border = '-1'
- @panel.should_not be_valid
- end
- it '0なら通る' do
- @panel.border = 0
- @panel.should be_valid
- end
- end
- context 'xを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.x = '1'
- @panel.should be_valid
- end
- it '数値でなければ失敗する' do
- @panel.x = 'a'
- @panel.should_not be_valid
- end
- it '0なら通る' do
- @panel.x = '0'
- @panel.should be_valid
- end
- it '負でも通る' do
- @panel.x = -1
- @panel.should be_valid
- end
- end
- context 'yを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.y = '1'
- @panel.should be_valid
- end
- it '数値でなければ失敗する' do
- @panel.y = 'a'
- @panel.should_not be_valid
- end
- it '0なら通る' do
- @panel.y = '0'
- @panel.should be_valid
- end
- it '負でも通る' do
- @panel.y = -1
- @panel.should be_valid
- end
- end
- context 'zを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.z = '1'
- @panel.should be_valid
- end
- it '数値でなければ失敗する' do
- @panel.z = 'a'
- @panel.should_not be_valid
- end
- it '0なら失敗する' do
- @panel.z = '0'
- @panel.should_not be_valid
- end
- it '負なら失敗する' do
- @panel.z = -1
- @panel.should_not be_valid
- end
- end
- context 'tを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.t = '1'
- @panel.should be_valid
- end
- it '数値でなければ失敗する' do
- @panel.t = 'a'
- @panel.should_not be_valid
- end
- it '0なら通る' do
- @panel.t = '0'
- @panel.should be_valid
- end
- it '負でも失敗する' do
- @panel.t = -1
- @panel.should_not be_valid
- end
- end
- context 'author_idを検証するとき' do
- before do
- @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- it 'テストデータの確認' do
- @panel.author_id = @author.id
- @panel.should be_valid
- end
- it 'nullなら失敗する' do
- @panel.author_id = nil
- @panel.should_not be_valid
- end
- it '数値でなければ失敗する' do
- @panel.author_id = 'a'
- @panel.should_not be_valid
- end
- it '存在する絵師でなければ失敗する' do
- @panel.author_id = 0
- @panel.should_not be_valid
- end
- end
- context '全体を検証するとき' do
- before do
- @panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
- end
- end
- end
-
- describe 'データ補充に於いて' do
+ @comic = Factory :comic, :author_id => @author.id\r
+ end\r
+ \r
+ it 'オーソドックスなデータなら通る' do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ @panel.should be_valid\r
+ end\r
+ \r
+ context 'comic_idを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => nil\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.comic_id = @comic.id\r
+ @panel.should be_valid\r
+ end\r
+ end\r
+ context 'widthを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.width = 1\r
+ @panel.should be_valid\r
+ end\r
+ it 'nullなら失敗する' do\r
+ @panel.width = nil\r
+ @panel.should_not be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.width = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら失敗する' do\r
+ @panel.width = '0'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '負でも失敗する' do\r
+ @panel.width = -1\r
+ @panel.should_not be_valid\r
+ end\r
+ end\r
+ context 'heightを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.height = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it 'nullなら失敗する' do\r
+ @panel.height = nil\r
+ @panel.should_not be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.height = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら失敗する' do\r
+ @panel.height = '0'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '負でも失敗する' do\r
+ @panel.height = -1\r
+ @panel.should_not be_valid\r
+ end\r
+ end\r
+ context 'borderを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.border = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it 'nullなら失敗する' do\r
+ @panel.border = nil\r
+ @panel.should_not be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.border = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '負なら失敗する' do\r
+ @panel.border = '-1'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら通る' do\r
+ @panel.border = 0\r
+ @panel.should be_valid\r
+ end\r
+ end\r
+ context 'xを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.x = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.x = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら通る' do\r
+ @panel.x = '0'\r
+ @panel.should be_valid\r
+ end\r
+ it '負でも通る' do\r
+ @panel.x = -1\r
+ @panel.should be_valid\r
+ end\r
+ end\r
+ context 'yを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.y = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.y = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら通る' do\r
+ @panel.y = '0'\r
+ @panel.should be_valid\r
+ end\r
+ it '負でも通る' do\r
+ @panel.y = -1\r
+ @panel.should be_valid\r
+ end\r
+ end\r
+ context 'zを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.z = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.z = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら失敗する' do\r
+ @panel.z = '0'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '負なら失敗する' do\r
+ @panel.z = -1\r
+ @panel.should_not be_valid\r
+ end\r
+ end\r
+ context 'tを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.t = '1'\r
+ @panel.should be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.t = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '0なら通る' do\r
+ @panel.t = '0'\r
+ @panel.should be_valid\r
+ end\r
+ it '負でも失敗する' do\r
+ @panel.t = -1\r
+ @panel.should_not be_valid\r
+ end\r
+ end\r
+ context 'author_idを検証するとき' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ it 'テストデータの確認' do\r
+ @panel.author_id = @author.id\r
+ @panel.should be_valid\r
+ end\r
+ it 'nullなら失敗する' do\r
+ @panel.author_id = nil\r
+ @panel.should_not be_valid\r
+ end\r
+ it '数値でなければ失敗する' do\r
+ @panel.author_id = 'a'\r
+ @panel.should_not be_valid\r
+ end\r
+ it '存在する絵師でなければ失敗する' do\r
+ @panel.author_id = 0\r
+ @panel.should_not be_valid\r
+ end\r
+ end\r
+ context '全体を検証するとき' do\r
+ before do\r
+ @panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ end\r
+ end\r
+ end\r
+ \r
+ describe 'データ補充に於いて' do\r
before do\r
- @comic = Factory :comic, :author_id => @author.id
- @panel = Factory.build :panel, :comic_id => @comic.id
- end
- context 'widthを補充' do
+ @comic = Factory :comic, :author_id => @author.id\r
+ @panel = Factory.build :panel, :comic_id => @comic.id\r
+ end\r
+ context 'widthを補充' do\r
it '空の時はコミックから補充する' do\r
- @panel.width = nil
+ @panel.width = nil\r
@panel.supply_default @author\r
- @panel.width.should eq @comic.width
- end
+ @panel.width.should eq @comic.width\r
+ end\r
it '空の時でもコミックが不在なら補充しない' do\r
- @panel.width = nil
- @panel.comic_id = nil
+ @panel.width = nil\r
+ @panel.comic_id = nil\r
@panel.supply_default @author\r
- @panel.width.should be_nil
- end
- it '空でない時は変化しない' do
+ @panel.width.should be_nil\r
+ end\r
+ it '空でない時は変化しない' do\r
@panel.width = 45\r
- lambda {
+ lambda {\r
@panel.supply_default @author\r
- }.should_not change @panel, :width
- end
- end
- context 'heightを補充' do
- it '空の時はコミックから補充する' do
- @panel.height = nil
+ }.should_not change @panel, :width\r
+ end\r
+ end\r
+ context 'heightを補充' do\r
+ it '空の時はコミックから補充する' do\r
+ @panel.height = nil\r
@panel.supply_default @author\r
- @panel.height.should eq @comic.height
- end
+ @panel.height.should eq @comic.height\r
+ end\r
it '空の時でもコミックが不在なら補充しない' do\r
- @panel.height = nil
- @panel.comic_id = nil
+ @panel.height = nil\r
+ @panel.comic_id = nil\r
@panel.supply_default @author\r
- @panel.height.should be_nil
- end
- it '空でない時は変化しない' do
+ @panel.height.should be_nil\r
+ end\r
+ it '空でない時は変化しない' do\r
@panel.height = 87\r
- lambda {
+ lambda {\r
@panel.supply_default @author\r
- }.should_not change @panel, :height
- end
- end
- context 'borderを補充' do
- it '空の時は0を補充する' do
- @panel.border = nil
+ }.should_not change @panel, :height\r
+ end\r
+ end\r
+ context 'borderを補充' do\r
+ it '空の時は0を補充する' do\r
+ @panel.border = nil\r
@panel.supply_default @author\r
- @panel.border.should eq 0
- end
- it '空でない時は変化しない' do
+ @panel.border.should eq 0\r
+ end\r
+ it '空でない時は変化しない' do\r
@panel.border = 1\r
- lambda {
+ lambda {\r
@panel.supply_default @author\r
- }.should_not change @panel, :border
- end
- end
- context 'tを補充' do
- it '空の時はコミック内のtの最大値+1を補充する' do
+ }.should_not change @panel, :border\r
+ end\r
+ end\r
+ context 'tを補充' do\r
+ it '空の時はコミック内のtの最大値+1を補充する' do\r
pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 0\r
- @panel.t = nil
+ @panel.t = nil\r
@panel.supply_default @author\r
- @panel.t.should eq 1
- end
- it '空でコミック初のコマなら0を補充する' do
- @panel.t = nil
+ @panel.t.should eq 1\r
+ end\r
+ it '空でコミック初のコマなら0を補充する' do\r
+ @panel.t = nil\r
@panel.supply_default @author\r
- @panel.t.should eq 0
- end
- it '空の時でも更新ケースなら補充しない' do
+ @panel.t.should eq 0\r
+ end\r
+ it '空の時でも更新ケースなら補充しない' do\r
pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 1\r
pl.t = nil\r
- lambda {
+ lambda {\r
pl.supply_default @author\r
- }.should_not change pl, :t
- end
- it '空でない時は変化しない' do
+ }.should_not change pl, :t\r
+ end\r
+ it '空でない時は変化しない' do\r
@panel.t = 1\r
- lambda {
+ lambda {\r
@panel.supply_default @author\r
- }.should_not change @panel, :t
- end
- end
- context 'author_idを補充' do
- it 'ログイン中の作家idを補充する' do
- @panel.author_id = nil
+ }.should_not change @panel, :t\r
+ end\r
+ end\r
+ context 'author_idを補充' do\r
+ it 'ログイン中の作家idを補充する' do\r
+ @panel.author_id = nil\r
@panel.supply_default @author\r
- @panel.author_id.should eq @author.id
- end
- end
-
- end
+ @panel.author_id.should eq @author.id\r
+ end\r
+ end\r
+ \r
+ end\r
\r
- describe '作者判定に於いて' do
- before do
- @comic = Factory :comic, :author_id => @author.id
- end
- it '自作のコマならyes' do
- panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
- panel.own?(@author).should == true
- end
- it '他人のコマならno' do
- panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
- panel.own?(@author).should == false
- end
- it '作家が不明ならno' do
- panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
- panel.own?(nil).should == false
- end
- end
- describe '閲覧許可に於いて' do
- before do
- @comic = Factory :comic, :author_id => @author.id
- end
- it '自作の公開コミックのコマを見るときは許可する' do
- Comic.any_instance.stub(:visible?).and_return(true)
- panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
- panel.visible?(@author).should == true
- end
- it '自作のコマは非公開コミックでも許可する' do
- Comic.any_instance.stub(:visible?).and_return(false)
- panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
- panel.visible?(@author).should == true
- end
- it '他人のコマでも公開コミックなら許可する' do
- Comic.any_instance.stub(:visible?).and_return(true)
- panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
- panel.visible?(@author).should == true
- end
- it '他人のコマで非公開コミックなら許可しない' do
- Comic.any_instance.stub(:visible?).and_return(false)
- panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
- panel.visible?(@author).should == false
- end
- end
- describe '単体取得に於いて' do
- before do
- @comic = Factory :comic, :author_id => @author.id
- @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
- end
- it '指定のコマを返す' do
- Comic.any_instance.stub(:visible?).and_return(true)
- pl = Panel.show @panel.id, @author
- pl.should eq @panel
- end
- context '他人の非公開コミックのコマを開こうとしたとき' do
- it '403Forbidden例外を返す' do
- Panel.any_instance.stub(:visible?).and_return(false)
- lambda{
- Panel.show @panel.id, @author
- }.should raise_error(ActiveRecord::Forbidden)
- end
- end
- context '存在しないコマを開こうとしたとき' do
- it '404RecordNotFound例外を返す' do
- lambda{
- Panel.show 110, @author
- }.should raise_error(ActiveRecord::RecordNotFound)
- end
- end
- end
- describe '関連テーブルプションに於いて' do
- context 'オプションがないとき' do
- it '4つの項目を含んでいる' do
- r = Panel.show_include_opt
+ describe '作者判定に於いて' do\r
+ before do\r
+ @comic = Factory :comic, :author_id => @author.id\r
+ end\r
+ it '自作のコマならyes' do\r
+ panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ panel.own?(@author).should == true\r
+ end\r
+ it '他人のコマならno' do\r
+ panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id\r
+ panel.own?(@author).should == false\r
+ end\r
+ it '作家が不明ならno' do\r
+ panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ panel.own?(nil).should == false\r
+ end\r
+ end\r
+ describe '閲覧許可に於いて' do\r
+ before do\r
+ @comic = Factory :comic, :author_id => @author.id\r
+ end\r
+ it '自作の公開コミックのコマを見るときは許可する' do\r
+ Comic.any_instance.stub(:visible?).and_return(true)\r
+ panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ panel.visible?(@author).should == true\r
+ end\r
+ it '自作のコマは非公開コミックでも許可する' do\r
+ Comic.any_instance.stub(:visible?).and_return(false)\r
+ panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id\r
+ panel.visible?(@author).should == true\r
+ end\r
+ it '他人のコマでも公開コミックなら許可する' do\r
+ Comic.any_instance.stub(:visible?).and_return(true)\r
+ panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id\r
+ panel.visible?(@author).should == true\r
+ end\r
+ it '他人のコマで非公開コミックなら許可しない' do\r
+ Comic.any_instance.stub(:visible?).and_return(false)\r
+ panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id\r
+ panel.visible?(@author).should == false\r
+ end\r
+ end\r
+ describe '単体取得に於いて' do\r
+ before do\r
+ @comic = Factory :comic, :author_id => @author.id\r
+ @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id\r
+ end\r
+ it '指定のコマを返す' do\r
+ Comic.any_instance.stub(:visible?).and_return(true)\r
+ pl = Panel.show @panel.id, @author\r
+ pl.should eq @panel\r
+ end\r
+ context '他人の非公開コミックのコマを開こうとしたとき' do\r
+ it '403Forbidden例外を返す' do\r
+ Panel.any_instance.stub(:visible?).and_return(false)\r
+ lambda{\r
+ Panel.show @panel.id, @author\r
+ }.should raise_error(ActiveRecord::Forbidden)\r
+ end\r
+ end\r
+ context '存在しないコマを開こうとしたとき' do\r
+ it '404RecordNotFound例外を返す' do\r
+ lambda{\r
+ Panel.show 110, @author\r
+ }.should raise_error(ActiveRecord::RecordNotFound)\r
+ end\r
+ end\r
+ end\r
+ describe '関連テーブルプションに於いて' do\r
+ context 'オプションがないとき' do\r
+ it '4つの項目を含んでいる' do\r
+ r = Panel.show_include_opt\r
r.should have(4).items\r
- end
- it 'コミックを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'コミックを含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:comic).should be_true\r
- end
- it 'コマ絵を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'コマ絵を含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:panel_pictures).should be_true\r
- end
- it 'コマ絵は素材を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'コマ絵は素材を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:panel_pictures].has_key?(:resource_picture).should be_true\r
- end
- it '素材は絵師を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it '素材は絵師を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true\r
- end
- it '素材はライセンスを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it '素材はライセンスを含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:panel_pictures][:resource_picture].has_key?(:license).should be_true\r
- end
- it 'フキダシを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシを含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:speech_balloons).should be_true\r
- end
- it 'フキダシはフキダシ枠を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはフキダシ枠を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:balloons).should be_true\r
- end
- it 'フキダシはセリフを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはセリフを含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:speeches).should be_true\r
- end
- it '作家を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it '作家を含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:author).should be_true\r
- end
- end
- context 'オプションで原画を含ませたとき' do
- it '5つの項目を含んでいる' do
- r = Panel.show_include_opt(:include => {:test => {}})
+ end\r
+ end\r
+ context 'オプションで原画を含ませたとき' do\r
+ it '5つの項目を含んでいる' do\r
+ r = Panel.show_include_opt(:include => {:test => {}})\r
r.should have(5).items\r
- end
- it 'testを含んでいる' do
- r = Panel.show_include_opt(:include => {:test => {}})
+ end\r
+ it 'testを含んでいる' do\r
+ r = Panel.show_include_opt(:include => {:test => {}})\r
r.has_key?(:test).should be_true\r
- end
- end
- end
- describe 'json単体出力オプションに於いて' do
- it 'includeキーを含んでいる' do
- r = Panel.show_json_include_opt
- r.has_key?(:include).should be_true
- end
- it '4つの項目を含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ end\r
+ end\r
+ describe 'json単体出力オプションに於いて' do\r
+ it 'includeキーを含んでいる' do\r
+ r = Panel.show_json_include_opt\r
+ r.has_key?(:include).should be_true\r
+ end\r
+ it '4つの項目を含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r.should have(4).items\r
- end
- it 'コミックを含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it 'コミックを含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r.has_key?(:comic).should be_true\r
- end
- it 'コマ絵を含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it 'コマ絵を含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r.has_key?(:panel_pictures).should be_true\r
- end
- it 'コマ絵は素材を含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it 'コマ絵は素材を含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r[:panel_pictures].has_key?(:resource_picture).should be_true\r
- end
- it '素材は絵師を含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it '素材は絵師を含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true\r
- end
- it '素材はライセンスを含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it '素材はライセンスを含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:license).should be_true\r
- end
- it 'フキダシを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシを含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:speech_balloons).should be_true\r
- end
- it 'フキダシはフキダシ枠を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはフキダシ枠を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:balloons).should be_true\r
- end
- it 'フキダシはセリフを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはセリフを含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:speeches).should be_true\r
- end
- it '作家を含んでいる' do
- r = Panel.show_json_include_opt[:include]
+ end\r
+ it '作家を含んでいる' do\r
+ r = Panel.show_json_include_opt[:include]\r
r.has_key?(:author).should be_true\r
- end
- end
- describe '一覧取得に於いて' do
- before do
- @comic = Factory :comic, :author_id => @author.id
- @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
- end
- context 'page補正について' do
- it '文字列から数値に変換される' do
- Panel.page('8').should eq 8
- end
- it 'nilの場合は1になる' do
- Panel.page().should eq 1
- end
- it '0以下の場合は1になる' do
- Panel.page('0').should eq 1
- end
- end
- context 'page_size補正について' do
- it '文字列から数値に変換される' do
- Panel.page_size('7').should eq 7
- end
- it 'nilの場合はPanel.default_page_sizeになる' do
- Panel.page_size().should eq Panel.default_page_size
- end
- it '0以下の場合はPanel.default_page_sizeになる' do
- Panel.page_size('0').should eq Panel.default_page_size
- end
- it 'Panel.max_page_sizeを超えた場合はPanel.max_page_sizeになる' do
- Panel.page_size('1000').should eq Panel.max_page_size
- end
- end
- it 'リストを返す' do
- pl = Panel.list
- pl.should eq [@panel]
- end
- it '時系列で並んでいる' do
- npl = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
- pl = Panel.list
- pl.should eq [npl, @panel]
- end
- context 'DBに5件あって1ページの件数を2件に変えたとして' do
- before do
- @npl2 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
- @npl3 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 2
- @npl4 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 3
- @npl5 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 4
- Panel.stub(:default_page_size).and_return(2)
- end
- it '通常は2件を返す' do
- pl = Panel.list
- pl.should have(2).items
- end
- it 'page=1なら末尾2件を返す' do
- #時系列で並んでいる
- pl = Panel.list( {}, 1)
- pl.should eq [@npl5, @npl4]
- end
- it 'page=2なら中間2件を返す' do
- pl = Panel.list({}, 2)
- pl.should eq [@npl3, @npl2]
- end
- it 'page=3なら先頭1件を返す' do
- pl = Panel.list({}, 3)
- pl.should eq [@panel]
- end
- end
- end
- describe 'list関連テーブルプションに於いて' do
- it 'includeキーを含んでいる' do
- r = Panel.list_opt
- r.has_key?(:include).should be_true
- end
- it '4つの項目を含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ end\r
+ describe '一覧取得に於いて' do\r
+ before do\r
+ @comic = Factory :comic, :author_id => @author.id\r
+ @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id\r
+ end\r
+ context 'page補正について' do\r
+ it '文字列から数値に変換される' do\r
+ Panel.page('8').should eq 8\r
+ end\r
+ it 'nilの場合は1になる' do\r
+ Panel.page().should eq 1\r
+ end\r
+ it '0以下の場合は1になる' do\r
+ Panel.page('0').should eq 1\r
+ end\r
+ end\r
+ context 'page_size補正について' do\r
+ it '文字列から数値に変換される' do\r
+ Panel.page_size('7').should eq 7\r
+ end\r
+ it 'nilの場合はPanel.default_page_sizeになる' do\r
+ Panel.page_size().should eq Panel.default_page_size\r
+ end\r
+ it '0以下の場合はPanel.default_page_sizeになる' do\r
+ Panel.page_size('0').should eq Panel.default_page_size\r
+ end\r
+ it 'Panel.max_page_sizeを超えた場合はPanel.max_page_sizeになる' do\r
+ Panel.page_size('1000').should eq Panel.max_page_size\r
+ end\r
+ end\r
+ it 'リストを返す' do\r
+ pl = Panel.list\r
+ pl.should eq [@panel]\r
+ end\r
+ it '時系列で並んでいる' do\r
+ npl = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1\r
+ pl = Panel.list\r
+ pl.should eq [npl, @panel]\r
+ end\r
+ context 'DBに5件あって1ページの件数を2件に変えたとして' do\r
+ before do\r
+ @npl2 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1\r
+ @npl3 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 2\r
+ @npl4 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 3\r
+ @npl5 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 4\r
+ Panel.stub(:default_page_size).and_return(2)\r
+ end\r
+ it '通常は2件を返す' do\r
+ pl = Panel.list\r
+ pl.should have(2).items \r
+ end\r
+ it 'page=1なら末尾2件を返す' do\r
+ #時系列で並んでいる\r
+ pl = Panel.list( {}, 1)\r
+ pl.should eq [@npl5, @npl4]\r
+ end\r
+ it 'page=2なら中間2件を返す' do\r
+ pl = Panel.list({}, 2)\r
+ pl.should eq [@npl3, @npl2]\r
+ end\r
+ it 'page=3なら先頭1件を返す' do\r
+ pl = Panel.list({}, 3)\r
+ pl.should eq [@panel]\r
+ end\r
+ end\r
+ end\r
+ describe 'list関連テーブルプションに於いて' do\r
+ it 'includeキーを含んでいる' do\r
+ r = Panel.list_opt\r
+ r.has_key?(:include).should be_true\r
+ end\r
+ it '4つの項目を含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r.should have(4).items\r
- end
- it 'コミックを含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it 'コミックを含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r.has_key?(:comic).should be_true\r
- end
- it 'コマ絵を含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it 'コマ絵を含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r.has_key?(:panel_pictures).should be_true\r
- end
- it 'コマ絵は素材を含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it 'コマ絵は素材を含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r[:panel_pictures].has_key?(:resource_picture).should be_true\r
- end
- it '素材は絵師を含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it '素材は絵師を含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true\r
- end
- it '素材はライセンスを含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it '素材はライセンスを含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:license).should be_true\r
- end
- it 'フキダシを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシを含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:speech_balloons).should be_true\r
- end
- it 'フキダシはフキダシ枠を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはフキダシ枠を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:balloons).should be_true\r
- end
- it 'フキダシはセリフを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはセリフを含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:speeches).should be_true\r
- end
- it '作家を含んでいる' do
- r = Panel.list_opt[:include]
+ end\r
+ it '作家を含んでいる' do\r
+ r = Panel.list_opt[:include]\r
r.has_key?(:author).should be_true\r
- end
- end
- describe 'json一覧出力オプションに於いて' do
- it 'includeキーを含んでいる' do
- r = Panel.list_json_opt
- r.has_key?(:include).should be_true
- end
- it '4つの項目を含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ end\r
+ describe 'json一覧出力オプションに於いて' do\r
+ it 'includeキーを含んでいる' do\r
+ r = Panel.list_json_opt\r
+ r.has_key?(:include).should be_true\r
+ end\r
+ it '4つの項目を含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r.should have(4).items\r
- end
- it 'コミックを含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it 'コミックを含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r.has_key?(:comic).should be_true\r
- end
- it 'コマ絵を含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it 'コマ絵を含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r.has_key?(:panel_pictures).should be_true\r
- end
- it 'コマ絵は素材を含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it 'コマ絵は素材を含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r[:panel_pictures].has_key?(:resource_picture).should be_true\r
- end
- it '素材は絵師を含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it '素材は絵師を含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true\r
- end
- it '素材はライセンスを含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it '素材はライセンスを含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r[:panel_pictures][:resource_picture].has_key?(:license).should be_true\r
- end
- it 'フキダシを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシを含んでいる' do\r
+ r = Panel.show_include_opt\r
r.has_key?(:speech_balloons).should be_true\r
- end
- it 'フキダシはフキダシ枠を含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはフキダシ枠を含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:balloons).should be_true\r
- end
- it 'フキダシはセリフを含んでいる' do
- r = Panel.show_include_opt
+ end\r
+ it 'フキダシはセリフを含んでいる' do\r
+ r = Panel.show_include_opt\r
r[:speech_balloons].has_key?(:speeches).should be_true\r
- end
- it '作家を含んでいる' do
- r = Panel.list_json_opt[:include]
+ end\r
+ it '作家を含んでいる' do\r
+ r = Panel.list_json_opt[:include]\r
r.has_key?(:author).should be_true\r
- end
+ end\r
+ end\r
+ \r
+ #異常データ検出\r
+ #コマはコミックに従属しなくなったのでtで入れ替えるチェックは要らなくなった\r
+ #コマ絵とフキダシの整合チェックをする\r
+ describe 'id収集に於いて' do\r
+ context 'つつがなく終わるとき' do\r
+ it '第一パラメータで指定された配列中から第二引数のidを収集している' do\r
+ a = [[{:panel_id => 1, :a => 'a'}, {:panel_id => 2, :a => 'a'}], \r
+ [{:panel_id => 3, :a => 'a'}, {:panel_id => 4, :a => 'a'}]]\r
+ r = Panel.collect_element_value a, :panel_id\r
+ r.should eq [1, 2, 3, 4]\r
+ end\r
+ end\r
+ context 'Nil除外指示があるとき' do\r
+ it '収集したpanel_idのうちnilは除外している' do\r
+ a = [[{:panel_id => 1, :a => 'a'}, {:panel_id => 2, :a => 'a'}, {:panel_id => nil, :a => 'a'}], \r
+ [{:panel_id => 3, :a => 'a'}, {:panel_id => nil, :a => 'a'}, {:panel_id => 4, :a => 'a'}]]\r
+ r = Panel.collect_element_value a, :panel_id, true\r
+ r.should eq [1, 2, 3, 4]\r
+ end\r
+ end\r
+ end\r
+ describe 'id一致チェックに於いて' do\r
+ #parent.idがNilのときはすべてNil。数値のときは全一致\r
+ context '親が既存(idが数値)のとき' do\r
+ it 'すべてid一致するときTrueを返す' do\r
+ r = Panel.validate_id [1, 1, 1, 1], 1\r
+ r.should be_true\r
+ end\r
+ it 'idが一致する中にNilが混じってもTrueを返す' do\r
+ r = Panel.validate_id [1, 1, 1, 1, nil], 1\r
+ r.should be_true\r
+ end\r
+ it 'すべて数値でも一致しないときFalseを返す' do\r
+ r = Panel.validate_id [1, 1, 1, 1, 2], 1\r
+ r.should be_false\r
+ end\r
+ it '数値とNilが混ざってもIDが一致しないときFalseを返す' do\r
+ r = Panel.validate_id [1, 1, nil, 2], 1\r
+ r.should be_false\r
+ end\r
+ end\r
+ context '親が新規(idがNil)のとき' do\r
+ it 'すべてNilはTrueを返す' do\r
+ r = Panel.validate_id [ nil,nil,nil,nil], nil\r
+ r.should be_true\r
+ end\r
+ it 'すべてnilでなければFalseを返す' do\r
+ r = Panel.validate_id [nil,nil,nil,nil, 2], nil\r
+ r.should be_false\r
+ end\r
+ end\r
+ end\r
+ describe 'idチェック単体に於いて' do\r
+ before do\r
+# @pp = Factory :panel_picture, :panel_id => @panel.id, :t => 1\r
+ end\r
+ context 'つつがなく終わるとき' do\r
+ it 'idを収集依頼している' do\r
+ Panel.should_receive(:collect_element_value).with(any_args).exactly(1)\r
+ Panel.stub(:collect_element_value).with(any_args).and_return([])\r
+ Panel.stub(:validate_id).with(any_args).and_return(true)\r
+ r = Panel.validate_element_id [], :panel_id, nil\r
+ end\r
+ it '収集したidを一致チェック依頼している' do\r
+ Panel.should_receive(:validate_id).with(any_args).exactly(1)\r
+ Panel.stub(:collect_element_value).with(any_args).and_return([])\r
+ Panel.stub(:validate_id).with(any_args).and_return(true)\r
+ r = Panel.validate_element_id [], :panel_id, nil\r
+ end\r
+ end\r
+ #実データでチェック\r
+ #依頼チェックだけでは不安なので最低限のチェックを\r
+ context 'コマ新規のとき' do\r
+ it 'コマ絵で正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => nil, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ r = Panel.validate_element_id [@panel.panel_pictures, @panel.speech_balloons], :panel_id, @panel.id\r
+ r.should be_true\r
+ end\r
+ it 'フキダシで正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => nil, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ r = Panel.validate_element_id [@panel.panel_pictures, @panel.speech_balloons], :panel_id, @panel.id\r
+ r.should be_true\r
+ end\r
+ end\r
+ context 'コマ既存のとき' do\r
+ it 'コマ絵で正常通過している' do\r
+ @panel = Factory :panel, :author_id => @author.id\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ r = Panel.validate_element_id [@panel.panel_pictures, @panel.speech_balloons], :panel_id, @panel.id\r
+ r.should be_true\r
+ end\r
+ it 'フキダシで正常通過している' do\r
+ @panel = Factory :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ r = Panel.validate_element_id [@panel.panel_pictures, @panel.speech_balloons], :panel_id, @panel.id\r
+ r.should be_true\r
+ end\r
+ end\r
+ context 'フキダシ新規のとき' do\r
+ it 'バルーンで正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => nil, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ @panel.speech_balloons.first.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => nil)\r
+ )\r
+ r = Panel.validate_element_id [@panel.speech_balloons.first.speeches, @panel.speech_balloons.first.balloons], :speech_balloon_id, @panel.speech_balloons.first.id\r
+ r.should be_true\r
+ end\r
+ it 'セリフで正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => nil, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ @panel.speech_balloons.first.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => nil)\r
+ )\r
+ r = Panel.validate_element_id [@panel.speech_balloons.first.speeches, @panel.speech_balloons.first.balloons], :speech_balloon_id, @panel.speech_balloons.first.id\r
+ r.should be_true\r
+ end\r
+ end\r
+ end\r
+ describe 'idチェックリスト生成に於いて' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ end\r
+ context 'つつがなく終わるとき' do\r
+ it 'コマ部品とフキダシ部品のトータル2を返す' do\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => nil, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => nil, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ @panel.speech_balloons.first.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => nil)\r
+ )\r
+ @panel.speech_balloons.first.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => nil)\r
+ )\r
+ r = @panel.validate_id_list\r
+ r.should have(2).items\r
+ end\r
+ it 'コマ部品とフキダシ部品[複数:2]のケースでトータル3を返す' do\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ sb1 = @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ sb1.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
+ )\r
+ sb1.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
+ )\r
+ sb2 = @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ sb2.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => sb2.id)\r
+ )\r
+ sb2.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => sb2.id)\r
+ )\r
+ r = @panel.validate_id_list\r
+ r.should have(3).items\r
+ end\r
+ end\r
+ end\r
+ describe 'idチェック複合に於いて' do\r
+ before do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ end\r
+ context 'つつがなく終わるとき' do\r
+ it 'コマ部品とフキダシ部品の二回チェック依頼している' do\r
+ Panel.should_receive(:validate_element_id).with(any_args).exactly(2)\r
+ Panel.stub(:validate_element_id).with(any_args).and_return(true)\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ sb1 = @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id)\r
+ )\r
+ sb1.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
+ )\r
+ sb1.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
+ )\r
+ r = Panel.validate_elements_id(@panel.validate_id_list)\r
+ end\r
+ end\r
+ end\r
+ describe 'シリアライズチェックに於いて' do\r
+ context 'つつがなく終わるとき' do\r
+ it '0からシリアライズされているならTrueを返す' do\r
+ r = Panel.validate_t [0, 1, 2]\r
+ r.should be_true\r
+ end\r
+ it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do\r
+ r = Panel.validate_t [0, 2, 1]\r
+ r.should be_true\r
+ end\r
+ it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do\r
+ r = Panel.validate_t [ 2, 1, 4, 3, 0]\r
+ r.should be_true\r
+ end\r
+ end\r
+ context '異常なとき' do\r
+ it '0から始まらないならFalseを返す' do\r
+ r = Panel.validate_t [1, 2, 3]\r
+ r.should be_false\r
+ end\r
+ it '連続していないならFalseを返す' do\r
+ r = Panel.validate_t [0, 1, 2, 4]\r
+ r.should be_false\r
+ end\r
+ it '連続していないならFalseを返す' do\r
+ r = Panel.validate_t [0, 1, 2, 4, 5]\r
+ r.should be_false\r
+ end\r
+ end\r
+ end\r
+ describe 'tチェック単体に於いて' do\r
+ before do\r
+ end\r
+ context 'つつがなく終わるとき' do\r
+ it 'コマ絵とフキダシのtを収集依頼している' do\r
+ Panel.should_receive(:collect_element_value).with(any_args).exactly(1)\r
+ Panel.stub(:collect_element_value).with(any_args).and_return([])\r
+ Panel.stub(:validate_t).with(any_args).and_return(true)\r
+ r = Panel.validate_element_t [], :t\r
+ end\r
+ it '収集したtをシリアライズチェック依頼している' do\r
+ Panel.stub(:collect_element_value).with(any_args).and_return([])\r
+ Panel.should_receive(:validate_t).with(any_args).exactly(1)\r
+ Panel.stub(:validate_t).with(any_args).and_return(true)\r
+ r = Panel.validate_element_t [], :t\r
+ end\r
+ end\r
+ #実データでチェック\r
+ #依頼チェックだけでは不安なので最低限のチェックを\r
+ context '新規のとき' do\r
+ it 'コマ絵で正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => nil, :resource_picture_id => @rp.id, :t => nil)\r
+ )\r
+ r = Panel.validate_element_t [@panel.panel_pictures, @panel.speech_balloons], :t\r
+ r.should be_true\r
+ end\r
+ it 'フキダシで正常通過している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => nil, :speech_balloon_template_id => @sbt.id, :t => nil)\r
+ )\r
+ r = Panel.validate_element_t [@panel.panel_pictures, @panel.speech_balloons], :t\r
+ r.should be_true\r
+ end\r
+ end\r
+ context '既存のとき' do\r
+ it 'コマ絵で正常通過している' do\r
+ @panel = Factory :panel, :author_id => @author.id\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => 0)\r
+ )\r
+ r = Panel.validate_element_t [@panel.panel_pictures, @panel.speech_balloons], :t\r
+ r.should be_true\r
+ end\r
+ it 'フキダシで正常通過している' do\r
+ @panel = Factory :panel, :author_id => @author.id\r
+ @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0)\r
+ )\r
+ r = Panel.validate_element_t [@panel.panel_pictures, @panel.speech_balloons], :t\r
+ r.should be_true\r
+ end\r
+ end\r
+ end\r
+ describe '複合チェックに於いて' do\r
+ context 'つつがなく終わるとき' do\r
+ it 'している' do\r
+ @panel = Factory.build :panel, :author_id => @author.id\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => 0)\r
+ )\r
+ @panel.panel_pictures.build(\r
+ Factory.attributes_for(:panel_picture, :panel_id => @panel.id, :resource_picture_id => @rp.id, :t => 1)\r
+ )\r
+ sb1 = @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2)\r
+ )\r
+ sb1.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
+ )\r
+ sb1.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
+ )\r
+ sb2 = @panel.speech_balloons.build(\r
+ Factory.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3)\r
+ )\r
+ sb2.balloons.build(\r
+ Factory.attributes_for(:balloon, :speech_balloon_id => sb2.id)\r
+ )\r
+ sb2.speeches.build(\r
+ Factory.attributes_for(:speech, :speech_balloon_id => sb2.id)\r
+ )\r
+ r = @panel.validate_child\r
+ r.should be_true\r
+ end\r
+ end\r
end\r
-
-end
+end\r