このページの内容は以下のリポジトリに1日遅れで反映されます(記事執筆前に前日分をコミットしています)。
https://github.com/hkob/hkob_blog
はじめに
Rails Tips の 80 回目です。昨日は所有しないオブジェクトに対する edit の対応を行いました。すでに共有実装部分を修正したので、update や destroy も対応が済んでいます。念のため、テストで対応が済んでいることを確認しましょう。
article_spec
update も object の部分を one に変えて、それを let で切り替えます。
describe "PATCH #update" do subject { -> { patch article_path(one), params: {article: attrs} } } context "when owned object" do let(:one) { object } let(:return_path) { article_path(object) } context "正しいパラメータに対して" do before { attrs["title"] = "ABC" } it_behaves_like "レスポンスコード確認", 302 it_behaves_like "オブジェクト属性が変化した?", Article, :title, "ABC" it_behaves_like "リダイレクト確認" it_behaves_like "Notice メッセージ確認", "記事を更新しました。" end context "不正なパラメータに対して" do before { attrs["title"] = "" } it_behaves_like "レスポンスコード確認", 422 it_behaves_like "オブジェクト属性が変化しない?", Article, :title it_behaves_like "Alert メッセージ確認", "記事の更新に失敗しました。" end end context "when not owned object" do let(:one) { not_mine } it_behaves_like "レスポンスコード確認", 302 it_behaves_like "rootリダイレクト確認" end end
これで not_mine の時に正しく処理されていることがわかります。同様に destroy のテストも修正しましょう。
describe "DELETE #destroy" do subject { -> { delete article_path(one) } } context "when owned object" do let(:one) { object } let(:return_path) { articles_path } it_behaves_like "レスポンスコード確認", 303 it_behaves_like "オブジェクトが1減るか?", Article it_behaves_like "リダイレクト確認" it_behaves_like "Notice メッセージ確認", "記事を削除しました。" end context "when not owned object" do let(:one) { not_mine } it_behaves_like "レスポンスコード確認", 302 it_behaves_like "rootリダイレクト確認" end end
こちらも無事にテストが通過しています。
おわりに
これで article に関する所有権のテストが完了しました。明日はこれに合わせて index などの描画を修正します。