OSDN Git Service

try paging
[pettanr/pettanr.git] / spec / models / balloon_spec.rb
index 9749500..96f3be2 100644 (file)
@@ -30,6 +30,7 @@ describe Balloon do
         @balloon.y = 0\r
         @balloon.width = 1\r
         @balloon.height = 1\r
+        @balloon.r = 0\r
         @balloon.should be_valid\r
       end\r
       it '上限データが通る' do\r
@@ -37,6 +38,7 @@ describe Balloon do
         @balloon.y = 99999\r
         @balloon.width = 99999\r
         @balloon.height = 99999\r
+        @balloon.r = 99999\r
         @balloon.should be_valid\r
       end\r
     end\r
@@ -138,7 +140,51 @@ describe Balloon do
         @balloon.should_not be_valid\r
       end\r
     end\r
+    context 'rを検証するとき' do\r
+      it 'nullなら失敗する' do\r
+        @balloon.r = nil\r
+        @balloon.should_not be_valid\r
+      end\r
+      it '数値でなければ失敗する' do\r
+        @balloon.r = 'a'\r
+        @balloon.should_not be_valid\r
+      end\r
+      it '0なら通る' do\r
+        @balloon.r = '0'\r
+        @balloon.should be_valid\r
+      end\r
+      it '負でも通る' do\r
+        @balloon.r = -1\r
+        @balloon.should be_valid\r
+      end\r
+    end\r
+    context 'settingsを検証するとき' do\r
+    end\r
+  end\r
+  \r
+  describe '文字コード検証に於いて' do\r
+    before do\r
+      @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id\r
+      @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id\r
+      @balloon = FactoryGirl.build :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id\r
+    end\r
+    \r
+    context 'captionを検証するとき' do\r
+      it 'Shift JISなら失敗する' do\r
+        @balloon.caption = "\x83G\x83r\x83]\x83D"\r
+        lambda{\r
+          @balloon.valid_encode\r
+        }.should raise_error(Pettanr::BadRequest)\r
+      end\r
+    end\r
+    \r
     context 'settingsを検証するとき' do\r
+      it 'Shift JISなら失敗する' do\r
+        @balloon.settings = "\x83G\x83r\x83]\x83D"\r
+        lambda{\r
+          @balloon.valid_encode\r
+        }.should raise_error(Pettanr::BadRequest)\r
+      end\r
     end\r
   end\r
   \r
@@ -148,58 +194,79 @@ describe Balloon do
       @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id\r
       @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id\r
     end\r
-    context '検査対象がnil(ゲスト)のとき' do\r
-      context 'クローズドモードのとき' do\r
-        before do\r
-          MagicNumber['run_mode'] = 1\r
-        end\r
-        it '不許可を返す。' do\r
-          r = @balloon.visible?(nil)\r
-          r.should be_false\r
-        end\r
+    context 'オープンモードのとき' do\r
+      before do\r
+        MagicNumber['run_mode'] = 0\r
       end\r
-      context 'オープンモードのとき' do\r
-        before do\r
-          MagicNumber['run_mode'] = 0\r
-        end\r
-        it '公開されたコマのフキダシ枠なら許可する' do\r
-          SpeechBalloon.any_instance.stub(:visible?).with(any_args).and_return(true)\r
-          r = @balloon.visible?(nil)\r
-          r.should be_true\r
-        end\r
-        it 'れ以外なら不許可を返す' do\r
-          SpeechBalloon.any_instance.stub(:visible?).with(any_args).and_return(false)\r
-          r = @balloon.visible?(nil)\r
-          r.should be_false\r
-        end\r
+      it '自身にゲスト用ロールチェックを問い合わせしている' do\r
+        Balloon.any_instance.stub(:guest_role_check).and_return(true)\r
+        Balloon.any_instance.should_receive(:guest_role_check).with(any_args).exactly(1)\r
+        r = @balloon.visible?([@author])\r
+      end\r
+      it 'ゲスト用ロールチェックが失敗したとき、falseを返す' do\r
+        Balloon.any_instance.stub(:guest_role_check).and_return(false)\r
+        r = @balloon.visible?([@author])\r
+        r.should be_false\r
       end\r
     end\r
-    context '検査対象が作家のとき' do\r
-      it '公開されたコマのフキダシ枠なら許可する' do\r
-        SpeechBalloon.any_instance.stub(:visible?).with(any_args).and_return(true)\r
-        r = @balloon.visible?(@author)\r
-        r.should be_true\r
+    context 'クローズドモードのとき' do\r
+      before do\r
+        MagicNumber['run_mode'] = 1\r
       end\r
-      it 'れ以外なら不許可を返す' do\r
-        SpeechBalloon.any_instance.stub(:visible?).with(any_args).and_return(false)\r
-        r = @balloon.visible?(@author)\r
+      it '自身に読者用ロールチェックを問い合わせしている' do\r
+        Balloon.any_instance.stub(:reader_role_check).and_return(true)\r
+        Balloon.any_instance.should_receive(:reader_role_check).with(any_args).exactly(1)\r
+        r = @balloon.visible?([@author])\r
+      end\r
+      it '読者用ロールチェックが失敗したとき、falseを返す' do\r
+        Balloon.any_instance.stub(:reader_role_check).and_return(false)\r
+        r = @balloon.visible?([@author])\r
         r.should be_false\r
       end\r
     end\r
-    context '検査対象が管理者のとき' do\r
-      it '許可を返す。' do\r
-        SpeechBalloon.any_instance.stub(:visible?).with(any_args).and_return(false)\r
-        r = @balloon.visible?(@admin)\r
-        r.should be_true\r
+    context '事前チェックする' do\r
+      before do\r
+        MagicNumber['run_mode'] = 1\r
+        Balloon.any_instance.stub(:reader_role_check).and_return(true)\r
+      end\r
+      it '自身のコマに所持判定を問い合わせしている' do\r
+        Panel.any_instance.stub(:own?).and_return(true)\r
+        Panel.any_instance.should_receive(:own?).with(any_args).exactly(1)\r
+        r = @balloon.visible?([@author])\r
+      end\r
+      it '自身のコマに閲覧許可を問い合わせしている' do\r
+        Panel.any_instance.stub(:own?).and_return(false)\r
+        Panel.any_instance.stub(:visible?).and_return(true)\r
+        Panel.any_instance.should_receive(:visible?).with(any_args).exactly(1)\r
+        r = @balloon.visible?([@author])\r
       end\r
     end\r
-    context '検査対象がそれ以外のとき' do\r
-      it '不許可を返す。' do\r
-        r = @balloon.visible?(1)\r
+    context 'つつがなく終わるとき' do\r
+      before do\r
+        MagicNumber['run_mode'] = 1\r
+        Panel.any_instance.stub(:reader_role_check).and_return(true)\r
+      end\r
+      it '自分のコマのコマ絵なら許可する' do\r
+        Panel.any_instance.stub(:own?).and_return(true)\r
+        Panel.any_instance.stub(:visible?).and_return(false)\r
+        r = @balloon.visible?([@author])\r
+        r.should be_true\r
+      end\r
+      it '他人の非公開コマのコマ絵なら許可しない' do\r
+        Panel.any_instance.stub(:own?).and_return(false)\r
+        Panel.any_instance.stub(:visible?).and_return(false)\r
+        r = @balloon.visible?([@author])\r
         r.should be_false\r
       end\r
+      it '他人のコマのコマ絵でも公開なら許可する' do\r
+        Panel.any_instance.stub(:own?).and_return(false)\r
+        Panel.any_instance.stub(:visible?).and_return(true)\r
+        r = @balloon.visible?([@author])\r
+        r.should be_true\r
+      end\r
     end\r
   end\r
+  \r
   describe '一覧取得に於いて' do\r
     before do\r
       @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id\r