Validate User name presence and handle blank names gracefully

Addresses an issue where User#familiar_name assumed `name` was always
present, potentially raising an exception during view rendering. Now
User validates name presence, and User#familiar_name handles blank
strings without error, in case any existing invalid records exist.
This commit is contained in:
Mike Dalessio
2025-12-14 12:48:53 -05:00
parent 76400765c1
commit b75d2ae6d8
4 changed files with 29 additions and 3 deletions
+2
View File
@@ -6,6 +6,8 @@ class User < ApplicationRecord
belongs_to :account
belongs_to :identity, optional: true
validates :name, presence: true
has_many :comments, inverse_of: :creator, dependent: :destroy
has_many :filters, foreign_key: :creator_id, inverse_of: :creator, dependent: :destroy
+1 -1
View File
@@ -19,7 +19,7 @@ module User::Named
def familiar_name
names = name.split
return name if names.length == 1
return name if names.length <= 1
"#{names.first} #{names[1..].map { |n| "#{n[0]}." }.join}"
end
end
@@ -29,7 +29,7 @@ class Signup::CompletionsControllerTest < ActionDispatch::IntegrationTest
assert_response :redirect, "Valid params should redirect"
end
test "create with invalid params" do
test "create with blank name" do
untenanted do
post signup_completion_path, params: {
signup: {
@@ -38,6 +38,9 @@ class Signup::CompletionsControllerTest < ActionDispatch::IntegrationTest
}
end
assert_response :unprocessable_entity, "Invalid params should return unprocessable entity"
assert_response :unprocessable_entity
assert_select ".txt-negative" do
assert_select "li", text: "Full name can't be blank"
end
end
end
+21
View File
@@ -39,6 +39,27 @@ class UserTest < ActiveSupport::TestCase
assert_equal "ÉLH", User.new(name: "Éva-Louise Hernández").initials
end
test "name methods handle blank names gracefully" do
user = User.new(name: "")
assert_equal "", user.familiar_name
assert_nil user.first_name
assert_nil user.last_name
assert_equal "", user.initials
end
test "validates name presence" do
user = User.new(account: accounts("37s"), role: "member", name: "")
assert_not user.valid?
assert_includes user.errors[:name], "can't be blank"
user.name = " "
assert_not user.valid?
assert_includes user.errors[:name], "can't be blank"
user.name = "Victor Cooper"
assert user.valid?
end
test "setup?" do
user = users(:kevin)