- describe '更新に於いて' do\r
- before do\r
- @panel = Factory :panel, :author => @author.id, :comic_id => @comic.id\r
- sign_in @user\r
- end\r
- context '事前チェックしておく' do\r
- it 'コマモデルに単体取得を問い合わせている' do\r
- Panel.stub(:show).with(any_args()).and_return @panel\r
- Panel.should_receive(:show).exactly(1)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- end\r
- it 'モデルに更新を依頼する' do\r
- Panel.any_instance.should_receive(:update_attributes).with(any_args)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- end\r
- it '@panelにアレを取得している' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- assigns(:panel).id.should eq(@panel.id)\r
- end\r
- end\r
- context 'つつがなく終わるとき' do\r
- it '更新される' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- Panel.find(@panel.id).visible.should eq 0\r
- end\r
- context 'html形式' do\r
- it 'ステータスコード302 Foundを返す' do\r
- Panel.any_instance.stub(:update_attributes).with(any_args()).and_return(true)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.status.should eq 302\r
- end\r
- it '更新されたコマの表示ページへ遷移する' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.should redirect_to(@panel)\r
- end\r
- end\r
- context 'json形式' do\r
- it 'ステータスコード200 OKを返す' do\r
- Panel.any_instance.stub(:update_attributes).with(any_args()).and_return(true)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id), :format => :json\r
- response.should be_success \r
- end\r
- it 'ページ本体は特に返さない' do\r
- Panel.any_instance.stub(:update_attributes).with(any_args()).and_return(true)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id), :format => :json\r
- response.body.should match /./\r
- end\r
- end\r
- end\r
- context '作家権限がないとき' do\r
- before do\r
- sign_out @user\r
- end\r
- it 'ステータスコード302 Foundを返す' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.status.should eq 302\r
- end\r
- context 'html形式' do\r
- it 'サインインページへ遷移する' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.body.should redirect_to '/users/sign_in'\r
- end\r
- end\r
- context 'json形式' do\r
- it '応答メッセージにUnauthorizedを返す' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id), :format => :json\r
- response.message.should match(/Unauthorized/)\r
- end\r
- end\r
- end\r
- context '検証、保存に失敗したとき' do\r
- before do\r
- Panel.any_instance.stub(:update_attributes).and_return(false)\r
- end\r
- context 'html形式' do\r
- it 'ステータスコード200 Okを返す' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.status.should eq 200\r
- end\r
- it '編集ページを描画する' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id)\r
- response.should render_template("edit")\r
- end\r
- end\r
- context 'json形式' do\r
- it 'ステータスコード422 unprocessable_entity を返す' do\r
- Panel.any_instance.stub(:update_attributes).and_return(false)\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id), :format => :json\r
- response.status.should eq 422\r
- end\r
- it '応答メッセージUnprocessable Entityを返す' do\r
- put :update, :id => @panel.id, :panel => Factory.attributes_for(:panel, :author => @author.id), :format => :json\r
- response.message.should match(/Unprocessable/)\r
- end\r
- end\r
- end\r
- end\r
- \r