-
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
提出物一覧ページの「未完了」と「自分の担当」のタブのバッジに表示する件数を適切に増減させる #3690
提出物一覧ページの「未完了」と「自分の担当」のタブのバッジに表示する件数を適切に増減させる #3690
Conversation
1751166
to
e6d5a37
Compare
d596de6
to
5374fe4
Compare
5374fe4
to
cff51ad
Compare
@unstoppa61e 動作確認をする際に事前準備(詳細は Description に記載しました)が必要であることや、キャッシュを削除する条件の説明量が多いことが影響して、レビューしてもらうのに時間がかかってしまうかもしれません。 もし不明点がありましたらお気軽に質問してください。よろしくお願いします🙏 |
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.
こちらの PR、偉大ですね…👏
僕がちょうどキャッシュのことについて学びたかったところだったので、レビューさせて頂けてありがたかったです🙏
指摘させて頂いたのは、本質的でないものがほとんど全てです。
そういうものにつきましては、どうぞ取捨選択なさった上でご修正くださいませ。
また、テストファイルの置き場所につきましては、良さそうだと思うものの自信はございませんので、komagata さんにお尋ね頂くのが確実かと思います🙇♂️
require 'test_helper' | ||
|
||
class UncheckedProductCountTest < ActiveSupport::TestCase | ||
test 'increase the cached value of unchecked product count by 1 after create a product' 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 'increase the cached value of unchecked product count by 1 after create a product' do | |
test 'cached value of unchecked product count increases by 1 after creating a product' 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.
なるほど、たしかにそのように書いた方が読みやすいと思いました!他のテストケースについても、添削していただいてありがとうございますー🙏
end | ||
end | ||
|
||
test 'decreace the cached value of unchecked product count by 1 after destroy an unchecked product' 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 'decreace the cached value of unchecked product count by 1 after destroy an unchecked product' do | |
test 'cached value of unchecked product count decreases by 1 after destroying an unchecked product' do |
こちらは、少なくともdecreace
という typo があるので、そこは修正した方が良いかと思います。
end | ||
end | ||
|
||
test 'increase the cached value of unchecked product count by 1 after uncheck a checked product' 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 'increase the cached value of unchecked product count by 1 after uncheck a checked product' do | |
test 'cached value of unchecked product count increases by 1 after unchecking a checked product' do |
end | ||
end | ||
|
||
test 'decrease the cached value of unchecked product count by 1 after check an unchecked product' 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 'decrease the cached value of unchecked product count by 1 after check an unchecked product' do | |
test 'cached value of unchecked product count decreases by 1 after checking an unchecked product' do |
@@ -0,0 +1,65 @@ | |||
# frozen_string_literal: true |
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.rb
が重複してしまっているので、削ってあげると良いかと思いました。
end | ||
end | ||
|
||
test "decrease the cached count of a mentor's unreplied products by 1 after the mentor comments to an unreplied product" 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 "decrease the cached count of a mentor's unreplied products by 1 after the mentor comments to an unreplied product" do | |
test "cached count of a mentor's unreplied products decreases by 1 after the mentor comments to an unreplied product" do |
end | ||
end | ||
|
||
test "increase the cached count of a mentor's unreplied products by 1 after another user comments to a mentor's replied product" 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 "increase the cached count of a mentor's unreplied products by 1 after another user comments to a mentor's replied product" do | |
test "cached count of a mentor's unreplied products increases by 1 after another user comments to a mentor's replied product" do |
end | ||
end | ||
|
||
test "decreace the cached count of a mentor's unreplied products by 1 when the mentor's comment become latest after destory the latest comment" 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 "decreace the cached count of a mentor's unreplied products by 1 when the mentor's comment become latest after destory the latest comment" do | |
test "cached count of a mentor's unreplied products decreases by 1 when the mentor's comment becomes latest after destroying the latest comment" do |
decreace
destory
typo
end | ||
end | ||
|
||
test "increase the cached count of a mentor's unreplied products by 1 when the mentor's comment is no longer the latest after destory the latest comment" 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 "increase the cached count of a mentor's unreplied products by 1 when the mentor's comment is no longer the latest after destory the latest comment" do | |
test "cached count of a mentor's unreplied products increases by 1 when the mentor's comment is no longer the latest after destroying the latest comment" do |
destory
typo
|
||
def latest? | ||
!later_exists? | ||
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.
こちらのlatest?
メソッドの返り値は、comments
が 0 件の場合もtrue
になってしまいませんでしょうか?(僕の理解が間違っていましたらすみません)
もしそうだった場合には、メソッド名と挙動に差異が生じてしまうのでご修正なさった方が良いかと思いました。
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.
commentsが 0 件の場合もtrueになってしまいませんでしょうか?
僕の理解では commentsが 0 件という場合は存在しないのかな、と考えています。というのも、このメソッドは Comment モデルのインスタンスメソッドであるため、ある Comment インスタンスがこのメソッドを使うときは少なくともそのインスタンス1件の comments が存在すると思うためです。どうでしょうか?
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.
@AudioStakes
確認させて頂きました!😄 💪
@unstoppa61e @komagata |
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ですー🙆♂️
is_replied_by_checker_previous = checker_id == previous_commented_user_id | ||
is_replied_by_checker_current = checker_id == current_commented_user_id | ||
|
||
is_replied_by_checker_previous != is_replied_by_checker_current |
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.
わかりやすい名前の変数に一旦入れることでわかりやすくなってますね!
目的
提出物一覧ページの「未完了」と「自分の担当」タブの表示件数を適切に増減させること(以下のバグ修正を含む)
Refs: #3638
やったこと
キャッシュ対象の件数が増減したときにキャッシュを削除するようにした
対象のキャッシュは以下2つ
※ キャッシュを削除する条件の詳細は、↓の「件数が増減する(キャッシュを削除するべき)条件」に記載
テストを追加した
キャッシュの値が適切に増減することを確認するテストを追加
気になっていること(レビューしてもらいたいこと)
今回新たに追加した「キャッシュの更新を確認するモデルテスト」を書いた場所(フォルダやファイル名)が適切かどうか
今までキャッシュに関するモデルテストがなかったため、この PR で初めて追加しました。そのフォルダとファイル名について、判断したことに問題なさそうか確認したいです。
フォルダについて
新たに
test/models/caches/*.rb
を作成し、そこにモデルテストを置くようにしました。このフォルダに置くことで「model の実装に関するテスト」かつ「キャッシュに関するテスト」であることがわかりやすくなると考えたためです。
ファイル名について
{キャッシュのキー名}.rb
となるようにしました。キャッシュごとに、どのような条件で削除・更新されるか把握しやすくなると考えたためです。
test/models/{モデル名}.rb
に追記しなかった理由についてtest/models/{モデル名}.rb
に追記した場合、以下のようなメリット・デメリットがあると思います。今回はデメリットの方が大きくなると考え、
test/models/{モデル名}.rb
に追記しないこととしました。というのも、キャッシュには複数のモデルから削除されるものもあるため、キャッシュのテストが複数のモデルのテストファイルに散らばる(より一層、削除・更新の条件を把握しにくくなる)と考えたためです。以下、補足説明
件数が更新されないバッジ(修正対象の件数を表示するバッジ)のキャプチャ
動作確認をするときの注意事項
development モードと test モードの場合はデフォルトでキャッシュが無効になっているため、ローカルでサーバーを起動して動作確認するとき(development モードのとき)や
$ rails test xxx
を実行するとき(test モードのとき)は、以下のようにして事前にキャッシュを有効にしておく必要があります。development モード
$ rails dev:cache
を実行してキャッシュのオン/オフを切り替える(オンにする)test モード
config/environments/test.rb
を修正し、キャッシュストアとして:memory_store
(ActiveSupport::Cache::MemoryStore )を使うように設定する#3638 の再現手順で件数が更新されない原因
調査した結果、以下が原因であることがわかった。
「未完了」タブのバッジ(未完了の提出物件数)
未完了の提出物が確認済み(完了)に更新されたときに、未完了件数のキャッシュが削除されていないこと
「自分の担当」タブのバッジ(「自分の担当」かつ「未返信」の提出物件数)
「自分の担当」かつ「未返信」の提出物が返信済みになったとき(担当者がコメントしたとき)に、「自分の担当」かつ「未返信」の件数のキャッシュが削除されていないこと
※ 「自分の担当」の提出物の状態が「未返信」かどうかは、その提出物の最新コメントの作成者が担当者(つまり自分)か否かによって決まる
件数が増減する(キャッシュを削除するべき)条件と、その対応の要不要
#3638 の再現手順以外にもキャッシュが削除されていないケースがないか確認するために調査した。
調査した結果、以下の表の条件で件数が増減することがわかった。また、それぞれの条件について対応の要不要を調べた。
凡例
○: 対応不要(現状のコードでキャッシュが削除されている)
☆: 対応が必要 & #3638 で報告済みの条件
★: 対応が必要 & #3638 で報告されていない条件
未完了の提出物件数(未完了タブのバッジの表示件数)
「自分の担当」かつ「未返信」の提出物件数(自分の担当タブのバッジの表示件数)
キャッシュ削除の具体的な条件
具体的にどのような条件でキャッシュを削除するか表に整理した。なお、↑の表と同じ条件は「条件No. 」の値を同じにしている。
※表の読み方: 【モデル】のレコードを 【作成/更新/削除】するときにレコードが【条件1】かつ【条件2】かつ【条件3】... の場合はキャッシュを削除する。なお、その後はキャッシュに保持する値が【キャッシュの増減値】される。
未完了の提出物件数(未完了タブのバッジの表示件数)
「自分の担当」かつ「未返信」の提出物件数(自分の担当タブのバッジの表示件数)
※項目が異なるため表を2つに分けた
条件No. 7 ~ 8には以下3点が共通する(表の横幅を小さくするために取り出した)
モデルテストで確認したいこと
↑の表のキャッシュ削除条件と合致するデータ変更をしたときに、以下2つを満たせていること(キャッシュとして保持する値が更新されていること)