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

新規ユーザー登録時にメンターにメール通知およびサイト内通知するようにした #5227

Merged
merged 6 commits into from
Aug 16, 2022

Conversation

SatoshiHaramura
Copy link
Contributor

@SatoshiHaramura SatoshiHaramura commented Jul 14, 2022

関連Issue

概要

新規ユーザー登録時、メンター宛てに、メール通知およびサイト内通知を行うようにする。(Discordへの通知は既に実装済みのため対象外)
対象の新規ユーザーは、全てのユーザーとする。

また、メール通知やサイト内通知の文言などの仕様確認は、以下のDiscordにてmachidaさんにOK頂いております。
https://ptb.discord.com/channels/715806612824260640/809595476847493192/999824618942640129

環境準備

  1. ブランチfeature/notify-mentor-when-new-user-registersをローカルに取り込む。
  2. bin/rails sでローカル環境を立ち上げる。

確認方法と確認内容

方針

ユーザーの種類は以下の通り5種類あるが、1. 非課金ユーザー については、いずれか1種類をピックアップし、確認する方針とする。

  1. 非課金ユーザー
    • 管理者
    • メンター
    • アドバイザー
    • 研修生
  2. 課金ユーザー
    • 上記以外

1. メール通知の場合

  1. フィヨルドブートキャンプ参加登録ページ(/users/new)にアクセスし、必要な情報を入力し「参加する」をクリックし、新規ユーザーを登録する。(有効なカード番号は、sign_up_test.rb を参照)
  2. LetterOpenerWeb(/letter_opener/)にアクセスし、メンター宛て(4人)に送信される以下のようなメールの内容を確認する。
From Subject Date To
"フィヨルドブートキャンプ" [email protected] [FBC] xxxxさんが新しく入会しました! 「フィヨルドブートキャンプへようこそ」というタイトルのwelcomメールが送信された5秒後の日時 [email protected]
"フィヨルドブートキャンプ" [email protected] [FBC] xxxxさんが新しく入会しました! 「フィヨルドブートキャンプへようこそ」というタイトルのwelcomメールが送信された5秒後の日時 [email protected]
"フィヨルドブートキャンプ" [email protected] [FBC] xxxxさんが新しく入会しました! 「フィヨルドブートキャンプへようこそ」というタイトルのwelcomメールが送信された5秒後の日時 [email protected]
"フィヨルドブートキャンプ" [email protected] [FBC] xxxxさんが新しく入会しました! 「フィヨルドブートキャンプへようこそ」というタイトルのwelcomメールが送信された5秒後の日時 [email protected]

本文は以下の通り。

xxxxさんが新しく入会しました!
xxxxさんのページへ

Cursor_and__development__LetterOpenerWeb

  1. メール本文の「xxxxさんのページへ」のリンクをクリックし、メンターでログインすると、新規登録ユーザーの詳細ページ(/users/:id)が表示されることを確認する。

Cursor_and__development__new-user___FJORD_BOOT_CAMP(フィヨルドブートキャンプ)

  1. 管理ページの企業ページ(/admin/companies)にアクセスし、「アドバイザー招待」または「研修生招待リンク」のリンクをクリックし、必要な情報を入力し新規ユーザー(アドバイザー or 研修生)を登録する。

  2. 項番2 ~ 3 を同様に行う。

2. サイト内通知の場合

  1. フィヨルドブートキャンプ参加登録ページ(/users/new)にアクセスし、必要な情報を入力し「参加する」をクリックし、新規ユーザーを登録する。(有効なカード番号は、sign_up_test.rb を参照)

  2. メンターでログインし、画面右上の「通知」ナビゲーションをクリックし、以下のように通知モーダルが追加されていることを確認する。
    通知の文言は以下の通り。

🎉 xxxxさんが新しく入会しました!

Cursor_and__development__ダッシュボード___FJORD_BOOT_CAMP(フィヨルドブートキャンプ)

  1. 🎉 xxxxさんが新しく入会しました!という通知をクリックし、通知一覧ページ(/notifications)が表示され、以下のような通知が追加されていることを確認する。
🎉 xxxxさんが新しく入会しました!

Cursor_and__development__通知___FJORD_BOOT_CAMP(フィヨルドブートキャンプ)

  1. 🎉 xxxxさんが新しく入会しました!というリンクをクリックし、新規登録ユーザーのユーザー詳細ページ(/users/:id)が表示されることを確認する。

Cursor_and__development__new-user___FJORD_BOOT_CAMP(フィヨルドブートキャンプ)

  1. 管理ページの企業ページ(/admin/companies)にアクセスし、「アドバイザー招待」または「研修生招待リンク」のリンクをクリックし、必要な情報を入力し新規ユーザー(アドバイザー or 研修生)を登録する。

  2. 項番2 〜4 を同様に行う。

テストについての補足

システムテストで、新規登録するユーザーは、アドバイザー、研修生、それ以外の3パターンでよいとkomagataさんにご教授頂きましたので、その3パターンでテストしております。

@SatoshiHaramura SatoshiHaramura self-assigned this Jul 14, 2022
@machida machida self-assigned this Jul 20, 2022
@SatoshiHaramura SatoshiHaramura force-pushed the feature/notify-mentor-when-new-user-registers branch 2 times, most recently from 28b66cf to 3d6e1ac Compare July 22, 2022 11:22
@SatoshiHaramura SatoshiHaramura marked this pull request as ready for review July 23, 2022 11:08
@SatoshiHaramura
Copy link
Contributor Author

@yocajii
お疲れ様です。
レビューの依頼をさせて頂きたいです🙏
お手隙の際にお願い致します。

@machida machida removed their assignment Jul 24, 2022
Copy link

@yocaji yocaji left a comment

Choose a reason for hiding this comment

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

レビューにお時間をいただいていて申し訳ありません 💦
引き続き確認を進めているところですが、先に気付いた部分についてコメントさせていただきました。

@@ -173,3 +173,11 @@ notification_graduated:
message: 🎉 sotugyouさんが卒業しました。
link: "/users/<%= ActiveRecord::FixtureSet.identify(:sotugyou) %>"
read: false

notification_signed_up:
Copy link

@yocaji yocaji Jul 26, 2022

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 への追加は検討済みの上で追加していない感じでしょうか?

notification_hibernated:
kind: 19
user: mentormentaro
sender: hatsuno
message: hatsunoさんが休会しました。
link: "/users/<%= ActiveRecord::FixtureSet.identify(:hatsuno) %>"
read: false

こちらに追加しておくと開発環境で表示されるため、壊れた時に気付きやすくできるようです。
ただこちらについても私の意見としては、通知の表示ロジックがおかしくなっていないか確認する目的なら既存のフィクスチャで十分な気がするので、あえて入会の通知を追加する意義は薄いのかなという気はしています。

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 Author

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.rbtest 'signed up'の以下を実行する際に利用していると考えています。

mailer = NotificationMailer.with(
  sender: user,
  receiver: mentor
).signed_up

上記が実行されると、app/mailers/notification_mailer.rbdef signed_upの以下で、通知データが必要になるので、先程のフィクスチャのデータを@notificationに格納しています。

@notification = @user.notifications.find_by(link: "/users/#{@sender.id}", kind: Notification.kinds[:signed_up])

Copy link
Contributor Author

@SatoshiHaramura SatoshiHaramura Aug 2, 2022

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へは追加していない状況となります。

Copy link

Choose a reason for hiding this comment

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

確認不足で申し訳ありません🙇‍♂️
フィクスチャの利用個所について、ご説明いただきありがとうございます。NotificationMailerのテストの流れが理解できました🙏

また、dbのフィクスチャへの追加も検討済みの上でとのこと、失礼いたしました。こちらについても承知いたしました🙆‍♂️

Copy link
Member

Choose a reason for hiding this comment

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

@SatoshiHaramura

Fixtureに書かれたデータはテスト実行前にすべてDBに投入されるため、不要なフィクスチャはシステムテストが重くなる一因になるようです。

こちらで @yocajii さんがおっしゃってるようにできればそのテストだけのデータ追加で行けるとありがたいな〜と思います。

Copy link
Member

Choose a reason for hiding this comment

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

@SatoshiHaramura 上記、いかがでしょうか〜?

Copy link
Contributor Author

@SatoshiHaramura SatoshiHaramura Aug 10, 2022

Choose a reason for hiding this comment

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

@komagata
テスト内でテストに必要なデータを作成する方がよい、という理解を致しました!
(yocajiiさんとのやりとりの中では、フィクスチャが要るorいらないという観点のみで考えてしまっておりました💦)

フィクスチャには追加せずに、テスト内でテストに必要なデータを作成するように修正致しましたので(c262fd2) 、ご確認お願い致します🙏

Copy link

@yocaji yocaji left a comment

Choose a reason for hiding this comment

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

動作確認は問題ありませんでした 🙆‍♂️
先にコメントさせていただいた件に加えて、こうするとより良いかもと思った部分でいくつかコメントを入れさせていただきました。

新たな通知の作成ということでメソッドやテストの新規作成が多く、ご苦労もあったかと思います。
レビューさせていただく過程で通知の仕組みやVCRなど私の方でも調べてみましたが、認識が違っている点などありましたら教えていただけると嬉しいです 🙏

Comment on lines 85 to 95
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
Copy link

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' がそのような形になっていそうです。

参考情報

https://docs.komagata.org/5857

Copy link
Contributor Author

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
Copy link

Choose a reason for hiding this comment

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

6行目でオプションを定数として宣言しているので、下記のように書けそうです。

Suggested change
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

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 +44 to +39
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
Copy link

Choose a reason for hiding this comment

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

いずれのテストケースでも4ユーザーで表示を確認していますが、何か方針がありましたら教えていただけますか 🙇‍♂️
メンターか管理者かなどで表示内容が変わるわけではないので、メール通知のテストと同様にどれか1ユーザーで十分なように思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

条件に該当するメンター全員に対して、サイト内通知が行われていることのテストとして書いていたので、該当する4ユーザーでも表示を確認しておりました。
たしかに、表示内容はどのユーザーでも同じ内容なので、1ユーザーのみの確認に修正してみます。

Comment on lines 158 to 162
def notify_to_mentors(user)
User.mentor.each do |mentor_user|
NotificationFacade.signed_up(user, mentor_user)
end
end
Copy link

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 系のメソッドを一箇所に集めておくと、より読みやすくなりそうに思いました。

Copy link
Contributor Author

@SatoshiHaramura SatoshiHaramura Aug 2, 2022

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メソッドの上に移動しました!

@SatoshiHaramura SatoshiHaramura force-pushed the feature/notify-mentor-when-new-user-registers branch from 3d6e1ac to 5268812 Compare August 2, 2022 04:42
@SatoshiHaramura
Copy link
Contributor Author

@yocajii
お疲れ様です。
返信が遅くなりましたが、レビューして頂きありがとうございました!
様々な視点からのコメントを頂いて勉強になりました✨

一旦、頂いたコメント全てに対して、返信や修正致しましたので、再度レビューをお願い致します🙏

Copy link

@yocaji yocaji left a comment

Choose a reason for hiding this comment

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

ご回答&ご対応くださいまして、ありがとうございます🙏✨
改めて動作確認も行って問題ありませんでしたので、私からはApproveいたします。

@SatoshiHaramura
Copy link
Contributor Author

@yocajii
再度レビューしてくださりありがとうございました✨

@komagata
メンバーレビューが通りましたので、お手すきの際にレビューをお願い致します🙏

def signed_up
@user = @receiver
@notification = @user.notifications.find_by(link: "/users/#{@sender.id}", kind: Notification.kinds[:signed_up])
subject = "[bootcamp] #{@sender.login_name}さんが新しく入会しました!"
Copy link
Member

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@komagata
承知致しました。
ここ(fc78110) で修正致しましたので、ご確認お願い致します🙏

@SatoshiHaramura SatoshiHaramura force-pushed the feature/notify-mentor-when-new-user-registers branch 2 times, most recently from 9681dd3 to 906588d Compare August 8, 2022 09:21
@SatoshiHaramura
Copy link
Contributor Author

@komagata
お疲れ様です。
頂いていたコメントに対応致しましたので、再度レビューをお願い致します🙏

@@ -173,3 +173,11 @@ notification_graduated:
message: 🎉 sotugyouさんが卒業しました。
link: "/users/<%= ActiveRecord::FixtureSet.identify(:sotugyou) %>"
read: false

notification_signed_up:
Copy link
Member

Choose a reason for hiding this comment

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

@SatoshiHaramura 上記、いかがでしょうか〜?

@SatoshiHaramura SatoshiHaramura force-pushed the feature/notify-mentor-when-new-user-registers branch 2 times, most recently from e0719bd to 148c59a Compare August 10, 2022 12:04
require 'application_system_test_case'

class Notification::SignedUpTest < ApplicationSystemTestCase
VCR_OPTIONS = {
Copy link
Member

Choose a reason for hiding this comment

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

他のシステムテストと重複しているのでこういう感じにするのがいいかもです〜

https://github.com/fjordllc/bootcamp/blob/feature/comeback/test/application_system_test_case.rb#L31-L39

(これはまだマージされていないブランチのコードです)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@komagata
承知しました!

ご提案頂いたテスト用のメソッドをここ(4eba9a8) で追加して、テストコード内でそのメソッドを使用するように修正致しましたので、再度ご確認お願い致します🙏

@SatoshiHaramura SatoshiHaramura force-pushed the feature/notify-mentor-when-new-user-registers branch from 148c59a to 546ddfe Compare August 12, 2022 10:52
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 be92891 into main Aug 16, 2022
@komagata komagata deleted the feature/notify-mentor-when-new-user-registers branch August 16, 2022 15:35
@github-actions github-actions bot mentioned this pull request Aug 16, 2022
9 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.

4 participants