+ 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