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

ユーザーの検索結果に、管理者でログインしたときだけそのユーザーの相談部屋へのリンクを表示 #4147

Merged

Conversation

ot0m1
Copy link
Contributor

@ot0m1 ot0m1 commented Feb 5, 2022

ref: #4068

要件

ユーザーの検索結果に、管理者でログインしたときだけそのユーザーの相談部屋へのリンクを表示する。

画面イメージ

変更前

スクリーンショット 2022-02-17 19 45 17

変更後

スクリーンショット 2022-02-10 23 30 00
スクリーンショット 2022-02-10 23 30 17

確認方法

  1. display-link-to-consultation-room-in-users-search-results ブランチをローカルに持ってくる(参考:https://qiita.com/great084/items/ad74dd064a2c2bc47cff
git fetch origin pull/{このプルリクエストのid}/head:{任意のブランチ名}
git checkout {上記でfetchした任意のブランチ名}
  1. 任意のアカウントでログイン
  2. 適当に検索したユーザーの検索結果( 一例:http://localhost:3000/searchables?document_type=users&word=a )画面で以下を確認
  • 管理者のアカウント(komagata,machita)であれば相談部屋を持っている全てのユーザーで相談部屋へのリンクが表示される
  • 管理者以外のアカウントであればユーザーの検索結果には相談部屋へのリンクが表示されない
  • ユーザー以外の検索結果には相談部屋へのリンクが表示されない

@ot0m1
Copy link
Contributor Author

ot0m1 commented Feb 9, 2022

ブランチ名に feature/ つけ忘れ…

@ot0m1 ot0m1 marked this pull request as ready for review February 14, 2022 12:28
@ot0m1
Copy link
Contributor Author

ot0m1 commented Feb 14, 2022

@haruguchi-yuma お疲れ様ですレビューお願いいたします。
一部通らないテストがあったので、 #4203 を先取って取り込んでいます。

Copy link
Contributor

@haruguchi-yuma haruguchi-yuma left a comment

Choose a reason for hiding this comment

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

レビュー遅くなりました!数点コメントしたのでご確認ください:bow:

全体的なところで1点。
相談部屋のリンクが表示される、されないは重要なことだと思いますのでテストがあってもいいのかなぁ〜と思いました!

よろしくお願いします🙏

Comment on lines 43 to 45
def talk?(searchable)
searchable.instance_of?(User) && Talk.find_by(user_id: searchable.id)
end
Copy link
Contributor

Choose a reason for hiding this comment

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

おそらくtalk?メソッドはbooleanを戻り値にしたいと思うんですが&&の右辺まで評価が進むと相談部屋オブジェクトが戻り値になるのでちょっと驚きがある気がします!

こんな感じはどうでしょうか?という提案です。またSQL叩かなくて済むというメリットもあります。

def talk?
  searchable.instance_of?(User) && searchable.talk.present?
end

Copy link
Contributor Author

Choose a reason for hiding this comment

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

右辺まで評価が進むと相談部屋オブジェクトが戻り値になるのでちょっと驚きがある

確かにその通りですね🙏 修正しました。

Comment on lines 47 to 49
def talk_id(searchable)
Talk.find_by(user_id: searchable.id).id
end
Copy link
Contributor

Choose a reason for hiding this comment

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

Viewに関することというよりはインスタンスに依存するコードなのでモデルに書いた方がいい気がするのですが、自信はないです😅

Copy link
Contributor

Choose a reason for hiding this comment

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

もしくは、現状talk_idというメソッドを使うところが他になさそうなのでjbuilderの方に直接

if talk?(searchable) && display_talk?(searchable)
  json.talk_id searchable.talk.id
end

と記述してもいいかもしれません。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

talk_id というメソッド名がご指摘いただいたようなコードを読んでいてのひっかかりポイントになっているのかなと考え、メソッド名の変更で対応しました。

Copy link
Contributor

Choose a reason for hiding this comment

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

@ot0m1
返事遅くなりました!

伝え方が悪くて申し訳ないです😅

メソッド名が引っかかっているというよりはhelperメソッドは見た目の部分に関することを記述すると思うのでtalk_idを取得するようなコード(SQLを叩くコード)はここに記述しない方がいいのでは?という疑問から発言しました。

2つ目のコメントはtalk_idを返すメソッドにそこまで汎用性がなさそうなのでjbuiderの方に記述すればメソッドを定義しなくても済むのかなぁと思ってコメントさせてもらいました!

Copy link
Contributor Author

@ot0m1 ot0m1 Feb 22, 2022

Choose a reason for hiding this comment

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

User は talk というカラムを持っていないのでメソッドにして Talk.find_by(user_id: searchable.id).id を実行しないといけないと思い込んでいた(そのため #4147 (comment) みたいなコメントをしている)ので、ご指摘の通りに修正いたしました。

モデルで belongs_to :userhas_one :talk, dependent: :destroy という宣言が行われていたのを把握しておらず、ずれた方向でリファクタリングを進めてしまっておりました🙏

@ot0m1
Copy link
Contributor Author

ot0m1 commented Feb 19, 2022

@haruguchi-yuma レビューありがとうございました🙏
ご指摘いただいた箇所と、また自分でもクエリ発行箇所の多さが気になったのでその他の部分も変更し、テストを追加いたしました。再レビューお願いいたします。

@@ -39,4 +39,12 @@ def filtered_message(searchable)
def comment_or_answer?(searchable)
searchable.is_a?(Comment) || searchable.is_a?(Answer)
end

def talk?(searchable)
Copy link
Member

Choose a reason for hiding this comment

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

対応するhelperのテストがあるといいかもです〜

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ヘルパーテストを追加するみたいな考えが全くありませんでした🙏
追加しました。

Copy link
Contributor

@haruguchi-yuma haruguchi-yuma left a comment

Choose a reason for hiding this comment

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

追加分のテストについてはOKだと思います:data:

1点コメントしているのでご確認ください!😄

@ot0m1
Copy link
Contributor Author

ot0m1 commented Feb 22, 2022

@haruguchi-yuma 諸々修正いたしました。何度もすいませんがレビューお願いいたします〜🙏


require 'test_helper'

class SearchHelperTest < ActionView::TestCase
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
class SearchHelperTest < ActionView::TestCase
class SearchHelperTest < ActionView::TestCase

Merge branch 'main' into display-link-to-consultation-room-in-users-search-results
@ot0m1 ot0m1 requested a review from komagata March 1, 2022 11:37
@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 1, 2022

@komagata
すごい初歩的な確認漏れをしておりました🙏
修正しましたので再度レビューお願いいたします。

require 'test_helper'

class SearchHelperTest < ActionView::TestCase
test 'does it return correct boolean value in talk' do
Copy link
Member

Choose a reason for hiding this comment

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

「talkかどうかを返す」みたいな内容でいいと思います〜。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

テスト名変更しました。

Merge branch 'main' into display-link-to-consultation-room-in-users-search-results
@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 2, 2022

@komagata レビューいただいた点を修正しました。再レビューお願いいたします。

@ot0m1 ot0m1 requested a review from komagata March 2, 2022 15:48
class SearchHelperTest < ActionView::TestCase
test 'return whether talk' do
user = users(:kimura)
assert_equal true, talk?(user)
Copy link
Member

Choose a reason for hiding this comment

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

trueかどうかのチェックはassertメソッドがいいと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

アサーションの種類について全然把握していませんでした🙇‍♂️

Rails テスティングガイドを見て assert と assert_not を用いるのが良いことを理解しました。

@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 3, 2022

@komagata 何度もレビューありがとうございます〜🙏 ご指摘いただいた点を修正いたしました。ご確認お願いいたします。

@ot0m1 ot0m1 requested a review from komagata March 3, 2022 13:46
class SearchHelperTest < ActionView::TestCase
test 'return whether talk' do
user = users(:kimura)
assert true, talk?(user)
Copy link
Member

Choose a reason for hiding this comment

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

assertは引数を一つとるはずです〜

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ドキュメントを理解できていませんでした😭修正しました。

@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 7, 2022

@komagata 何度もレビューお手数おかけします🙏 再度レビューお願いいたします。

@ot0m1 ot0m1 requested a review from komagata March 7, 2022 01:03
Comment on lines 7 to 11
user = users(:kimura)
assert talk?(user)

user = users(:taikai3)
assert_not talk?(user)
Copy link
Member

Choose a reason for hiding this comment

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

複数回使う必要がないのであれば代入せずこのようにするとスマートかもです〜

Suggested change
user = users(:kimura)
assert talk?(user)
user = users(:taikai3)
assert_not talk?(user)
assert talk?(users(:kimura))
assert_not talk?(users(:taikai3))

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ご指摘の通り冗長な変数宣言だと思いましたので修正いたしました。

@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 8, 2022

@komagata 再レビューお願いいたします🙏

@ot0m1 ot0m1 requested a review from komagata March 8, 2022 11:13
@@ -135,4 +135,24 @@ class SearchablesTest < ApplicationSystemTestCase
assert_text 'kimura'
assert_no_text 'machida'
end

test 'check that link to talk room is displayed properly' do
Copy link
Member

Choose a reason for hiding this comment

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

  • 管理者で相談部屋へのリンクが表示される
  • 管理者以外で相談部屋へのリンクが表示されない

こちらは二つのテストケースに分けた方がテストのタイトルと合わせてわかりやすいかもです〜

Copy link
Contributor Author

Choose a reason for hiding this comment

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

確かに…🙏 分割しました。

@ot0m1
Copy link
Contributor Author

ot0m1 commented Mar 10, 2022

@komagata 再レビューお願いいたします。

@ot0m1 ot0m1 requested a review from komagata March 10, 2022 11:50
Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

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

確認しました、OKですー🙆‍♂️

@komagata komagata merged commit 0509b9f into main Mar 10, 2022
@komagata komagata deleted the display-link-to-consultation-room-in-users-search-results branch March 10, 2022 14:34
@github-actions github-actions bot mentioned this pull request Mar 10, 2022
32 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants