Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#58comment delete api #70

Merged
merged 5 commits into from
Aug 25, 2024
Merged

Conversation

kuri0616
Copy link
Collaborator

対応するissue

対応内容

  • routesにcommentsのdestroyのルーティングを追加
  • comments_controllerにコメントを削除するdestroyアクションを追加
  • comments_specにコメント削除APIのテストケースを追加

@kuri0616 kuri0616 self-assigned this Jul 30, 2024
@kuri0616 kuri0616 added the backend バックエンドのissues label Jul 30, 2024
@kuri0616 kuri0616 requested a review from kakeru-one July 30, 2024 12:37
Copy link
Contributor

@kakeru-one kakeru-one left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rikuya98
コメントしました!

Comment on lines 15 to 20
def destroy
memo = Memo.find(params[:memo_id])
comment = memo.comments.find(params[:id])
comment.destroy
head :no_content
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

承知しました!
ありがとうございます!
こちらfalseの時に422を返すように実装したのですが、テストはどのように記載したら良いのでしょうか?

allow_any_instance_ofメソッドでスタブにしてdestroy呼び出したとき、Falseに返すようにと思ったのですが、調べると指定した全てのインスタンスに対して行われ多くのバグを生むので非推奨と出てきまして・・・

Rspecで異常系の処理を意図的に発生させテスト実施させる方法、教えていただきたいです!

Copy link
Contributor

@kakeru-one kakeru-one Aug 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

allow_any_instance_ofメソッドでスタブにしてdestroy呼び出したとき、Falseに返すようにと思ったのですが、調べると指定した全てのインスタンスに対して行われ多くのバグを生むので非推奨と出てきまして・・・

前提として、allow_any_instance_ofを利用したとしても一つのテストケースに閉じるので、
allow_any_instance_ofでも良いですが、以下のようにすることができると思います。
(ちょっと動くか試してないので、修正が必要かも?)

before do
  find_by = comment
  allow(comment).to receive(:destroy).and_return(false)
  allow(Comment).to receive(:find_by).and_return(find_by)
end

end
end

context 'コメントが存在しない場合' do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO

memoが存在しない場合もテストしたいですね!
また、コメントが存在しない場合は、以下のようなリクエストが適切かなと思います!
delete "/memos/#{memo.id}/comments/0", as: :json

Copy link
Contributor

@kakeru-one kakeru-one left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rikuya98
追加でコメントしました!

Comment on lines 16 to 17
memo = Memo.find(params[:memo_id])
comment = memo.comments.find(params[:id])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performant/Simple

以下のように書くとクエリの発行数が2回から1回になって少しだけパフォーマンスがいいと思います。

Suggested change
memo = Memo.find(params[:memo_id])
comment = memo.comments.find(params[:id])
comment = \
Comment.find_by(id: params[:id], memo_id: params[:memo_id])

Copy link
Contributor

@kakeru-one kakeru-one left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rikuya98
LGTM!

@kuri0616 kuri0616 merged commit 3cce98f into main Aug 25, 2024
1 check passed
@kuri0616 kuri0616 deleted the feature/#58comment-delete-api branch August 25, 2024 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend バックエンドのissues
Projects
None yet
Development

Successfully merging this pull request may close these issues.

コメント削除機能の実装
2 participants