-
Notifications
You must be signed in to change notification settings - Fork 71
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
分報チャンネル作成後、生成されたチャンネルのURLをユーザーのプロフィールに自動で設定 #7564
Conversation
f363f6e
to
f9d5ecb
Compare
@goruchanchan |
@natsuto6 お疲れ様です!レビュー依頼ありがとうございます!1週間以内に確認いたしますので、今しばらくお待ちください🙇♂️ |
@natsuto6 お疲れ様です!動作確認できました!問題ないと思います! また、コードレビューについてですが、main が更新されたため差分が出ているように思い、着手できていないです🙇♂️ |
f9d5ecb
to
dea9c0c
Compare
@goruchanchan
こちらですが、画面からの確認を含めて実際のUIをを通じた動作確認を行なっても良いかなという意図で記載してました。ただ、ご指摘の通りより確実に検証できる方に統一した方がいいかなと思ったのと、レビューも煩雑になるのでRailsコンソールからの確認に修正してます🙇♂️再度お手数ですがご確認よろしくお願いします。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@natsuto6 お疲れ様です!コード確認いたしました🙇♂️お手すきの時にご確認よろしくお願いします🙇♂️
TimesChannelCreator.new.call({ user: }) | ||
end | ||
|
||
assert_equal '1234567890123456789', user.discord_profile.times_id |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
URL が期待通りかの確認で十分かと思ったんですが、分報 ID のアサートも取る理由を教えて欲しいです🙇♂️
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
URLの確認だけだとtimes_id
が正確に設定されているかを直接的に確認できないので、プロセス全体の正確性を保証する意味で記載してました🙏
end | ||
|
||
assert_equal '1234567890123456789', user.discord_profile.times_id | ||
expected_url = "https://discord.com/channels/#{ENV['DISCORD_GUILD_ID']}/1234567890123456789" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
今回更新いただいたのが def call(payload)メソッドなので、テスト自体も
test '#call'の中に追加する形でもいいかなと思いましたが、いかがでしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
こちらおっしゃる通りでしたので、test #call
に記載しました🙏
@@ -36,6 +36,9 @@ class UsersControllerTest < ActionDispatch::IntegrationTest | |||
assert_redirected_to root_url | |||
|
|||
student = User.find_by(login_name: 'Piyopiyo-student') | |||
student.create_discord_profile unless student.discord_profile |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
こちらなんですが、参考までに以下を教えていただけると助かります🙇♂️
Discord::TimesChannel.stub(:new, ->(_) { ValidTimesChannel.new }) doで、用意したスタブ(ValidTimesChannel)を利用しているように見えるのですが、ここでIDの代入が必要になった理由などを教えていただきたいです🙇♂️
少し調べたのですが、わからずでした😓
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
元々テストが落ちていました。
ログ
Failure:
Discord::UsersControllerTest#test_POST_create_by_trainee [/home/circleci/project/test/integration/discord/users_controller_test.rb:70]:
Expected nil to not be nil.
rails test test/integration/discord/users_controller_test.rb:42
[MinitestRetry] retry 'test_POST_create_by_student' count: 1, msg: Expected nil to not be nil.
[MinitestRetry] retry 'test_POST_create_by_student' count: 2, msg: Expected nil to not be nil.
[MinitestRetry] retry 'test_POST_create_by_student' count: 3, msg: Expected nil to not be nil.
F
Failure:
Discord::UsersControllerTest#test_POST_create_by_student [/home/circleci/project/test/integration/discord/users_controller_test.rb:39]:
Expected nil to not be nil.
rails test test/integration/discord/users_controller_test.rb:7
ValidTimesChannel
のidがnil
であるのを解消するために、テスト内で
ValidTimesChannel
のスタブを使用することで、実際にDiscord APIにリクエストを送ることなく、この挙動をテスト環境内で再現してます。
times_id
を明示的に設定しているのは、Discord::TimesChannel
のスタブが返すid
を使用して、discord_profile
のtimes_id
が期待通りに設定されることを確認するためです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
回答ありがとうございます!自分もそうなのかと思い、main ブランチで試した結果、下記の結果となりテストが通るようでした🤔
テスト結果
% git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
% rails test test/integration/discord/users_controller_test.rb
Running via Spring preloader in process 19387
Run options: --seed 13748
# Running:
...
[Minitest::CI] Generating test report in JUnit XML format...
Finished in 2.142988s, 1.3999 runs/s, 4.1997 assertions/s.
3 runs, 9 assertions, 0 failures, 0 errors, 0 skips
実際に、byebug
を仕込んで、分報 ID を確認すると、main では ID 代入せずとも、スタブにより分報 ID が設定されているでした🤔
byebug での times_id の確認結果
39: byebug
=> 40: assert_not_nil student.discord_profile.times_id
41: end
42:
43: test 'POST create by trainee' do
44: Discord::TimesChannel.stub(:new, ->(_) { ValidTimesChannel.new }) do
(byebug) student.discord_profile
#<DiscordProfile id: 1066908204, user_id: 1060516511, account_name: nil, times_url: nil, times_id: "fake_times_snowflake_0123456789", created_at: "2024-04-01 22:25:35.081484000 +0900", updated_at: "2024-04-01 22:25:35.261921000 +0900">
ValidTimesChannel
を用いて分報インスタンスが作られていれば、従来のままでテストも通るのかなと思っていたので、今回の変更で何か変わってないかが少し気になっています🙇♂️
@goruchanchan |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@natsuto6 お疲れ様です!ご対応とご回答ありがとうございます!参考になります👀2点コメントさせていただきましたので、お手すきの時にご確認お願いいたします🙏
@@ -36,6 +36,9 @@ class UsersControllerTest < ActionDispatch::IntegrationTest | |||
assert_redirected_to root_url | |||
|
|||
student = User.find_by(login_name: 'Piyopiyo-student') | |||
student.create_discord_profile unless student.discord_profile |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
回答ありがとうございます!自分もそうなのかと思い、main ブランチで試した結果、下記の結果となりテストが通るようでした🤔
テスト結果
% git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
% rails test test/integration/discord/users_controller_test.rb
Running via Spring preloader in process 19387
Run options: --seed 13748
# Running:
...
[Minitest::CI] Generating test report in JUnit XML format...
Finished in 2.142988s, 1.3999 runs/s, 4.1997 assertions/s.
3 runs, 9 assertions, 0 failures, 0 errors, 0 skips
実際に、byebug
を仕込んで、分報 ID を確認すると、main では ID 代入せずとも、スタブにより分報 ID が設定されているでした🤔
byebug での times_id の確認結果
39: byebug
=> 40: assert_not_nil student.discord_profile.times_id
41: end
42:
43: test 'POST create by trainee' do
44: Discord::TimesChannel.stub(:new, ->(_) { ValidTimesChannel.new }) do
(byebug) student.discord_profile
#<DiscordProfile id: 1066908204, user_id: 1060516511, account_name: nil, times_url: nil, times_id: "fake_times_snowflake_0123456789", created_at: "2024-04-01 22:25:35.081484000 +0900", updated_at: "2024-04-01 22:25:35.261921000 +0900">
ValidTimesChannel
を用いて分報インスタンスが作られていれば、従来のままでテストも通るのかなと思っていたので、今回の変更で何か変わってないかが少し気になっています🙇♂️
@@ -46,6 +48,16 @@ class TimesChannelCreatorTest < ActiveSupport::TestCase | |||
assert_not user.student_or_trainee? | |||
end | |||
|
|||
test '#call creates times_url' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
test '#call'
だけで十分かなと思いますが、いかがでしょうか?🙇♂️
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既にtest '#call'
という名前のテストケースが存在しているので、それぞれのテストケースが何をテストしているのかを区別するために今のままで良いのかなと思いますがいかがでしょう?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
伝え方が悪くて申し訳ないです🙇♂️#call
のテストに統合してしまってもいいじゃないかなと思った次第です🙇♂️
call
メソッドは、今回の変更にて time_id
に加えて times_url
も設定されることになると思うので、その内容を追加するといいのかなと思っています🙇♂️
また、#call creates times_url
としてテストする場合、ValidTimesChannel
によって正しい設定をするだけで終わってしまっているので、当該の正しい設定がされているかの評価があった方がいいと思いました🤔
743e93e
to
35d714a
Compare
@goruchanchan
なのでテスト内で 再度お手数ですがご確認をよろしくお願いします🙇♂️ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@natsuto6
お疲れ様です!
テスト内でValidTimesChannelクラスのidメソッドが数値としての文字列を返すように修正し、mock_envを使用して環境変数DISCORD_GUILD_IDを設定しました。
詳細に調査、共有くださりありがとうございます!大変勉強になりました🙇♂️
1点だけお聞きしたいことを追加しましたので、お手数をおかけしますがご確認よろしくお願いします🙇♂️
@@ -46,6 +48,16 @@ class TimesChannelCreatorTest < ActiveSupport::TestCase | |||
assert_not user.student_or_trainee? | |||
end | |||
|
|||
test '#call creates times_url' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
伝え方が悪くて申し訳ないです🙇♂️#call
のテストに統合してしまってもいいじゃないかなと思った次第です🙇♂️
call
メソッドは、今回の変更にて time_id
に加えて times_url
も設定されることになると思うので、その内容を追加するといいのかなと思っています🙇♂️
また、#call creates times_url
としてテストする場合、ValidTimesChannel
によって正しい設定をするだけで終わってしまっているので、当該の正しい設定がされているかの評価があった方がいいと思いました🤔
35d714a
to
c27dc5e
Compare
@goruchanchan |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@natsuto6
ご対応ありがとうございます!!LGTMと思いますので承認いたします!!
また、mock_env
の使い方等大変勉強になりました🙇♂️今後活用させてもらおうと思います💪ありがとうございました
@goruchanchan |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確認させていただきました。OKです~👌
@komagata |
@natsuto6 本番で登録はできないので新しい人が入ったときに確認したいと思います~。 |
@komagata |
@natsuto6 本番で確認できましたー🎉 |
@machida |
Issue
概要
ユーザーの新規登録時に分報チャンネルを自動で作成した際に、プロフィールページの分報URLも自動で入力されるようにしました。また、退会時には分報URLが削除されるようにしました。
変更確認方法
feature/auto-fill-times-url-on-registration
をローカルに取り込むbin/rails db:seed
を実行し、初期データを追加bin/rails s
でサーバを立ち上げる分報チャンネル作成後、生成されたチャンネルのURLがユーザーのプロフィールページに自動で設定されているか確認する
ユーザーが自ら退会するときの動作確認
管理ページから退会させるときの動作確認