-
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
新規ユーザー登録時にメンターにメール通知およびサイト内通知するようにした #5227
Conversation
28b66cf
to
3d6e1ac
Compare
@yocajii |
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/fixtures/notifications.yml
Outdated
@@ -173,3 +173,11 @@ notification_graduated: | |||
message: 🎉 sotugyouさんが卒業しました。 | |||
link: "/users/<%= ActiveRecord::FixtureSet.identify(:sotugyou) %>" | |||
read: false | |||
|
|||
notification_signed_up: |
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.
すぐ上にある卒業の通知がそうなってしまっているのですが、このフィクスチャはどのテストでも利用されていないので不要そうです。
Fixtureに書かれたデータはテスト実行前にすべてDBに投入されるため、不要なフィクスチャはシステムテストが重くなる一因になるようです。
また、テストのフィクスチャとは別になりますが db/fixtures/notifications.yml
への追加は検討済みの上で追加していない感じでしょうか?
bootcamp/db/fixtures/notifications.yml
Lines 143 to 149 in 0b11a94
notification_hibernated: | |
kind: 19 | |
user: mentormentaro | |
sender: hatsuno | |
message: hatsunoさんが休会しました。 | |
link: "/users/<%= ActiveRecord::FixtureSet.identify(:hatsuno) %>" | |
read: false |
こちらに追加しておくと開発環境で表示されるため、壊れた時に気付きやすくできるようです。
ただこちらについても私の意見としては、通知の表示ロジックがおかしくなっていないか確認する目的なら既存のフィクスチャで十分な気がするので、あえて入会の通知を追加する意義は薄いのかなという気はしています。
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.
確認しますので、少々お待ち下さい🙏
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/mailers/notification_mailer_test.rb
のtest 'signed up'
の以下を実行する際に利用していると考えています。
mailer = NotificationMailer.with(
sender: user,
receiver: mentor
).signed_up
上記が実行されると、app/mailers/notification_mailer.rb
のdef signed_up
の以下で、通知データが必要になるので、先程のフィクスチャのデータを@notification
に格納しています。
@notification = @user.notifications.find_by(link: "/users/#{@sender.id}", kind: Notification.kinds[:signed_up])
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.
また、テストのフィクスチャとは別になりますが db/fixtures/notifications.yml への追加は検討済みの上で追加していない感じでしょうか?
一旦検討済みでして、入会時の通知データが無くても、開発時に不便だと感じる場面は特に無いかぁと思いましたので、db/fixtures/notifications.yml
へは追加していない状況となります。
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.
確認不足で申し訳ありません🙇♂️
フィクスチャの利用個所について、ご説明いただきありがとうございます。NotificationMailerのテストの流れが理解できました🙏
また、dbのフィクスチャへの追加も検討済みの上でとのこと、失礼いたしました。こちらについても承知いたしました🙆♂️
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.
Fixtureに書かれたデータはテスト実行前にすべてDBに投入されるため、不要なフィクスチャはシステムテストが重くなる一因になるようです。
こちらで @yocajii さんがおっしゃってるようにできればそのテストだけのデータ追加で行けるとありがたいな〜と思います。
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.
@SatoshiHaramura 上記、いかがでしょうか〜?
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.
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.
動作確認は問題ありませんでした 🙆♂️
先にコメントさせていただいた件に加えて、こうするとより良いかもと思った部分でいくつかコメントを入れさせていただきました。
新たな通知の作成ということでメソッドやテストの新規作成が多く、ご苦労もあったかと思います。
レビューさせていただく過程で通知の仕組みやVCRなど私の方でも調べてみましたが、認識が違っている点などありましたら教えていただけると嬉しいです 🙏
test '#signed_up' do | ||
notification = ActivityNotifier.with(sender: users(:hajime), receiver: users(:mentormentaro)).signed_up | ||
|
||
assert_difference -> { AbstractNotifier::Testing::Driver.deliveries.count }, 1 do | ||
notification.notify_now | ||
end | ||
end |
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.
Parameterized+同期の1パターンのみになっていますが、(実行コストを気にして必要最小限に絞り込むシステムテストと違って)メソッドのテストなので、メソッドが使われ得るパターンを押さえておいた方がベターな気がしました。
このファイルの27行目のテスト test '#create_page'
がそのような形になっていそうです。
参考情報
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.
なるほど、確かにメソッドが使われ得るパターンを押さえておいたほうがよさそうですね!
以下のnotify_later
メソッドのテストも追加致しました!
assert_difference -> { AbstractNotifier::Testing::Driver.enqueued_deliveries.count }, 1 do
notification.notify_later
end
|
||
fill_stripe_element('4242 4242 4242 4242', '12 / 50', '111') | ||
|
||
VCR.use_cassette 'sign_up/valid-card', record: :once, match_requests_on: %i[method uri] 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.
6行目でオプションを定数として宣言しているので、下記のように書けそうです。
VCR.use_cassette 'sign_up/valid-card', record: :once, match_requests_on: %i[method uri] do | |
VCR.use_cassette 'sign_up/valid-card', VCR_OPTIONS 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.
仰る通りですね💦
ご提案頂いたように修正致しました。
visit_with_auth notifications_path, 'komagata' | ||
within first('.card-list-item.is-unread') do | ||
assert_selector '.card-list-item-title__link-label', text: '🎉 harukoさんが新しく入会しました!' | ||
end |
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.
いずれのテストケースでも4ユーザーで表示を確認していますが、何か方針がありましたら教えていただけますか 🙇♂️
メンターか管理者かなどで表示内容が変わるわけではないので、メール通知のテストと同様にどれか1ユーザーで十分なように思いました。
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.
条件に該当するメンター全員に対して、サイト内通知が行われていることのテストとして書いていたので、該当する4ユーザーでも表示を確認しておりました。
たしかに、表示内容はどのユーザーでも同じ内容なので、1ユーザーのみの確認に修正してみます。
app/controllers/users_controller.rb
Outdated
def notify_to_mentors(user) | ||
User.mentor.each do |mentor_user| | ||
NotificationFacade.signed_up(user, mentor_user) | ||
end | ||
end |
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.
特に理由がなければnotify_to_chat
の上に移動して、notify_to_xxxx
系のメソッドを一箇所に集めておくと、より読みやすくなりそうに思いました。
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.
仰る通り、notify_to_xxxx
系のメソッドを集めておくと、より読みやすいですね!
notify_to_mentors
メソッドをnotify_to_chat
メソッドの上に移動しました!
3d6e1ac
to
5268812
Compare
@yocajii 一旦、頂いたコメント全てに対して、返信や修正致しましたので、再度レビューをお願い致します🙏 |
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.
ご回答&ご対応くださいまして、ありがとうございます🙏✨
改めて動作確認も行って問題ありませんでしたので、私からはApproveいたします。
@yocajii @komagata |
app/mailers/notification_mailer.rb
Outdated
def signed_up | ||
@user = @receiver | ||
@notification = @user.notifications.find_by(link: "/users/#{@sender.id}", kind: Notification.kinds[:signed_up]) | ||
subject = "[bootcamp] #{@sender.login_name}さんが新しく入会しました!" |
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.
最近下記のようにメールのprefixが[FBC]
に変わったのでそれに合わせる修正をお願いします〜
https://github.com/fjordllc/bootcamp/blob/main/app/mailers/user_mailer.rb
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.
9681dd3
to
906588d
Compare
@komagata |
test/fixtures/notifications.yml
Outdated
@@ -173,3 +173,11 @@ notification_graduated: | |||
message: 🎉 sotugyouさんが卒業しました。 | |||
link: "/users/<%= ActiveRecord::FixtureSet.identify(:sotugyou) %>" | |||
read: false | |||
|
|||
notification_signed_up: |
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.
@SatoshiHaramura 上記、いかがでしょうか〜?
e0719bd
to
148c59a
Compare
require 'application_system_test_case' | ||
|
||
class Notification::SignedUpTest < ApplicationSystemTestCase | ||
VCR_OPTIONS = { |
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.
他のシステムテストと重複しているのでこういう感じにするのがいいかもです〜
(これはまだマージされていないブランチのコードです)
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.
148c59a
to
546ddfe
Compare
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です〜🙆♂️
関連Issue
概要
新規ユーザー登録時、メンター宛てに、
メール通知
およびサイト内通知
を行うようにする。(Discordへの通知は既に実装済みのため対象外)対象の新規ユーザーは、全てのユーザーとする。
また、メール通知やサイト内通知の文言などの仕様確認は、以下のDiscordにてmachidaさんにOK頂いております。
https://ptb.discord.com/channels/715806612824260640/809595476847493192/999824618942640129
環境準備
feature/notify-mentor-when-new-user-registers
をローカルに取り込む。bin/rails s
でローカル環境を立ち上げる。確認方法と確認内容
方針
ユーザーの種類は以下の通り5種類あるが、
1. 非課金ユーザー
については、いずれか1種類をピックアップし、確認する方針とする。1. メール通知の場合
/letter_opener/
)にアクセスし、メンター宛て(4人)に送信される以下のようなメールの内容を確認する。本文は以下の通り。
メンター
でログインすると、新規登録ユーザーの詳細ページ(/users/:id
)が表示されることを確認する。管理ページの企業ページ(
/admin/companies
)にアクセスし、「アドバイザー招待」または「研修生招待リンク」のリンクをクリックし、必要な情報を入力し新規ユーザー(アドバイザー or 研修生)を登録する。項番2 ~ 3 を同様に行う。
2. サイト内通知の場合
フィヨルドブートキャンプ参加登録ページ(/users/new)にアクセスし、必要な情報を入力し「参加する」をクリックし、新規ユーザーを登録する。(有効なカード番号は、sign_up_test.rb を参照)
メンターでログインし、画面右上の「通知」ナビゲーションをクリックし、以下のように通知モーダルが追加されていることを確認する。
通知の文言は以下の通り。
🎉 xxxxさんが新しく入会しました!
という通知をクリックし、通知一覧ページ(/notifications
)が表示され、以下のような通知が追加されていることを確認する。🎉 xxxxさんが新しく入会しました!
というリンクをクリックし、新規登録ユーザーのユーザー詳細ページ(/users/:id
)が表示されることを確認する。管理ページの企業ページ(
/admin/companies
)にアクセスし、「アドバイザー招待」または「研修生招待リンク」のリンクをクリックし、必要な情報を入力し新規ユーザー(アドバイザー or 研修生)を登録する。項番2 〜4 を同様に行う。
テストについての補足
システムテストで、新規登録するユーザーは、アドバイザー、研修生、それ以外の3パターンでよいとkomagataさんにご教授頂きましたので、その3パターンでテストしております。