-
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
ユーザーIDを3文字以上に限定する(n > 1) #6443
ユーザーIDを3文字以上に限定する(n > 1) #6443
Conversation
@ogawa-tomo |
@YukiWatanabe824 |
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 up | ||
User.where('LENGTH(login_name) < ?', 3).find_each do |user| | ||
user.login_name = user.login_name.ljust(3, '_') | ||
user.save!(validate: 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.
[memo]
既存のユーザを更新するときには、(validate: false)
をつけておく(すでにinvalidなユーザーデータがあるので)
参考→#5959 (comment)
class ChangeUserIdMore3Characters < ActiveRecord::Migration[6.1] | ||
def up | ||
User.where('LENGTH(login_name) < ?', 3).find_each do |user| | ||
user.login_name = user.login_name.ljust(3, '_') |
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.
アカウント名の補完にあえて禁止文字であるアンダーバーを用いている狙いって、ユーザーにユーザー名の変更を促すためってことで合ってますかね?
(変更後にログインすると警告が出っぱなしになる)
ついでに言うと、この警告はここにべたっと書かれてるみたいなんですが、書いてある通り「半角英数字と-(ハイフン)以外の文字が使われていないか」ぐらいのチェックしかできてないみたいですね。(正規表現をちゃんと読み解けていませんが…少なくとも、3文字未満のときのチェックはしていないことを確認しました)
bootcamp/app/views/application/_flash.html.slim
Lines 18 to 25 in ae5beff
- if current_user && current_user.login_name !~ /\A[a-z\d](?:[a-z\d]|-(?=[a-z\d]))*\z/i | |
input.a-toggle-checkbox#hide-flash(type='checkbox') | |
.flash.is-alert | |
.container | |
.flash__container | |
label.flash__close(for='hide-flash') | |
p.flash__message | |
| アカウント名に半角英数字と-(ハイフン)以外の文字が使われています。#{link_to '変更', edit_current_user_path}をお願いします。 |
もしもユーザーに変更を促すことが目的なら、わざわざDBのデータを変更せずにこっちで3文字未満のとき警告するように変更するだけでもいいのかなと思いました。
このPRは変更する必要ないと思いますが、このへんの背景は駒形さんにお聞きするとよいのですかね?
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.
警告が出っぱなしになるのはユーザーにアカウント名変更を促すため、と私も勝手に思い込んでいました💦
@komagata
お疲れさまです。
こちらのIssueですが、起票されたとおりにアンダーバーを追加する修正をすると、修正対象のユーザーは↑の警告が常時表示される状態になります。
ユーザー名変更を促す効果はあると思いますが、リリースとセットでお知らせを流すなりの対応が必要かと思います。いかがいたしましょうか?
4/20のチーム開発MTGで解決しました🙆🏻♂️
test/models/user_test.rb
Outdated
@@ -196,6 +196,8 @@ class UserTest < ActiveSupport::TestCase | |||
assert user.invalid? | |||
user.login_name = '12345' | |||
assert user.invalid? | |||
user.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.
アカウント名にはそもそも平仮名は使えないので、「アカウントが3文字未満ではいけない」ことだけを検証するテストケースとしては適さないかと思いました。アルファベット2文字にするとよいと思います~
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.
ありがとうございます。
修正いたします!
@@ -196,6 +196,8 @@ class UserTest < ActiveSupport::TestCase | |||
assert user.invalid? | |||
user.login_name = '12345' | |||
assert user.invalid? | |||
user.login_name = 'あい' | |||
assert user.invalid? | |||
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.
ここのテストケース、test 'is valid username'
というブロックなのに不正なアカウント名に対するテストがずらっと書かれてるのが気になりました。(ついでに言うと、正確にはusernameじゃなくてlogin_nameに関するテストですよね)
これもこのPRではスコープ外と思いますしこのままでいいと思いますが、駒形さんに相談して起票するとよいのですかね?
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.
確かに違和感のある名称ですね。
私としてはこのIssueで触れている箇所なので修正してしまってもいいかと思います!やってみます。
スコープ外の修正や改善案は基本的には駒形さん、町田さんに相談すると良いですね。
プルリクかIssueからメンション送るか、Discordの「#チーム開発」か「#バグ、誤字脱字報告、機能要望🙇」から相談する流れです。
@@ -8,3 +8,4 @@ | |||
| 半角英数字と-(ハイフン)のみが使用できます。 | |||
| 先頭と最後にハイフンを使用することはできません。 | |||
| ハイフンを連続して使用することはできません。 | |||
| 3文字以上でなければいけません。 |
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じゃなくていいと思いますが)ちょっと整理したい気はしますね:eyes:(禁止事項は箇条書きにするとか)
このPR↓でどばっと足されてから3年くらいそのままみたいですね。
#1163
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.
確かに箇条書きで整理したいですね👀
@machida
こちらですが、アカウント作成時のアカウント名の禁止事項を追加したことに伴って、禁止事項を箇条書きにしてはどうかと案が出ています。イメージは以下です。
デザインが関わる部分ですが、どのようにすすめるのが良いでしょうか?
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.
@YukiWatanabe824
こちら、僕がコミットしますー
なので、こういうデザインについて関わる作業があるときは、このPRのアサインに machida を追加しておいてくださいー
@ogawa-tomo レビューのやり方でちょっとお聞きしたいのですが、 |
自分はVSCodeを使っているのですが、GitLensという拡張機能を入れています!
それはめちゃめちゃ分かります~少し変更するだけでも色々調べなきゃってなったりしますし。 |
@ogawa-tomo GitLensめちゃくちゃ便利そうですね👀 |
@YukiWatanabe824 コミットしておきましたー |
@machida |
b8af6a8
to
d9407e9
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.
こちら、私のレビューは継続しているという認識でいいですかね…?:eyes:(まだapproveしていないので)
イシューの内容と直接関係ない部分でたいへん恐縮ですが、テスト名が気になったのでコメントしておきました:bow:
test/models/user_test.rb
Outdated
@@ -170,7 +170,7 @@ class UserTest < ActiveSupport::TestCase | |||
assert user.save(context: :retire_reason_presence) | |||
end | |||
|
|||
test 'is valid username' do | |||
test 'is valid unsupportable login_name' 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.
まず、username
をlogin_name
に変えてくださってありがとうございます。bootcampでは「ユーザーの名前」を表す概念は複数あるので、正確にしたほうがよいと思っていました。
ただ、is valid unsupportable login_name
というテスト名は分かりにくいと思いました。これは、「validなログイン名とunsupportableなログイン名の両方をテストしてますよ」という意図ですかね…?少なくとも、「有効である」を意味する単語と「無効である」を意味する単語は対にしたほうがよいと思います。つまり、validとinvalidにするか、supportableとunsupportableにするか、です。
もともと私がこのコメントで意図していたのは、validなログイン名に対するテストとinvalidなログイン名に対するテストは分けるといいんじゃないかということでした。テスト名と内容が合っていないので。(分かりにくくてすみません)
https://github.com/fjordllc/bootcamp/pull/6443/files#r1167353907
test 'is valid login_name' do
# 有効なログイン名に関するテスト
end
test 'is invalid login_name' do
# 無効なログイン名に関するテスト
end
あるいは両方のテストを一緒にしてしまうなら、validとかinvalidという単語自体をタイトルから省いてしまうという手もあります。こっちのほうがシンプルかもしれないです。「ログイン名に関するテストですよ」ということで。
test 'login_name' do
# 有効なログイン名と無効なログイン名に関するテスト
end
ここのすぐ下のtwitter_accountに関するテストなどはそうなっていますね。
bootcamp/test/models/user_test.rb
Lines 201 to 215 in 0cff850
test 'twitter_account' do | |
user = users(:komagata) | |
user.twitter_account = '' | |
assert user.valid? | |
user.twitter_account = 'azAZ_09' | |
assert user.valid? | |
user.twitter_account = '-' | |
assert user.invalid? | |
user.twitter_account = 'あ' | |
assert user.invalid? | |
user.twitter_account = ':' | |
assert user.invalid? | |
user.twitter_account = 'A' * 16 | |
assert user.invalid? | |
end |
逆に、厳密にやるならテストケースひとつひとつに名前をつけてしまうという手もあります。
...
test 'login_name should be more than or equal to three characters' do
...
end
...
event_testなどはそうなっていますね。でもlogin_nameでこれをやるとケースが多すぎて面倒かも…
bootcamp/test/models/event_test.rb
Lines 110 to 120 in 0cff850
test 'should be invalid when start_at >= end_at' do | |
event = events(:event1) | |
event.end_at = event.start_at - 1.hour | |
assert event.invalid? | |
end | |
test 'should be invalid when open_start_at >= open_end_at' do | |
event = events(:event1) | |
event.open_end_at = event.open_start_at - 1.day | |
assert event.invalid? | |
end |
ここまでしなくても、たとえばテストケースひとつひとつにコメントをつけてやるとちょっと親切になるかもと思います。今の状態だとそれぞれのアサーションが何を意味しているのかわかりにくいので。
test 'is invalid login_name' do
...
# 3文字未満は不可
user.login_name = 'xx'
assert user.invalid?
...
end
…と勢いでばーっと書いてしまいましたが、そもそもこのイシューの内容とは直接関係ないですし、けっこう好みの問題でもあると思うので、どこまでやるかはお任せします!
ただ、現状のテスト名にはちょっと違和感があったのでコメントしました:bow:
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.
レビューありがとうございます!
自分以外の方が実装した部分の整理整頓まで気が回ってなかったので非常に参考になります。
せっかくなのでテスト名まで対応しようと思います。
@ogawa-tomo ↑のテストについて対応いたします。 |
@ogawa-tomo テスト名については付近のテストと統一して属性名( |
よく分かります~こだわりだすとキリがないですし、今回はこれで十分だと思います! |
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.
@YukiWatanabe824
私としては良いと思います:+1:
@ogawa-tomo @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です〜🙆♂️
Issue
概要
現在のユーザーアカウント名(
User.login_name
)は文字数の下限がないため1文字のアカウント名も可能な状態となっている。@x
といった一文字ユーザーアカウント名はサジェスト表示が機能しないなど機能提供に支障が生じている。そのためユーザーアカウント名は3文字以上との制限を追加するとともに、既存ユーザーの中で2文字以下のユーザーアカウント名には
0
を3文字以上になるように追加する。ユーザーアカウント名の下限設定はモデルに対してバリデーションでminimumを設定した。また、ユーザーアカウント名への
0
追加はdata-migrate gem
を使用して追加する処理をおこなう。変更確認方法
feature/limit_userid_3characters_or_more
をローカルに取り込むrake data:migrate:up VERSION=20230412211754
を実行http://localhost:3000/users/new
にアクセスしてアカウント名の制限が箇条書きになっていることを確認する今回のブランチを取り込むとバリデーションがかかるため先に検証用ユーザーを作ってしまうと楽です。
もし先にブランチを取り込んだ場合は別のブランチに移動してから検証用ユーザーを作成してください。
Screenshot
変更前
変更後