FIX: Undefined method when serializing a user

Apparently is is possible to have a user without a user_profile. This
fix will return nil for any user_profile fields during serialization
(like the after delete web hook) instead of blowing up.
This commit is contained in:
Blake Erickson 2019-05-23 19:40:20 -06:00
parent 1babc3bec6
commit 1fbe078ae0
2 changed files with 19 additions and 6 deletions

View File

@ -220,15 +220,15 @@ class UserSerializer < BasicUserSerializer
end
def bio_raw
object.user_profile.bio_raw
object.user_profile&.bio_raw
end
def bio_cooked
object.user_profile.bio_processed
object.user_profile&.bio_processed
end
def website
object.user_profile.website
object.user_profile&.website
end
def website_name
@ -246,7 +246,7 @@ class UserSerializer < BasicUserSerializer
end
def location
object.user_profile.location
object.user_profile&.location
end
def can_edit
@ -300,7 +300,7 @@ class UserSerializer < BasicUserSerializer
end
def bio_excerpt
object.user_profile.bio_excerpt(350 , keep_newlines: true, keep_emoji_images: true)
object.user_profile&.bio_excerpt(350 , keep_newlines: true, keep_emoji_images: true)
end
def include_suspend_reason?
@ -470,7 +470,7 @@ class UserSerializer < BasicUserSerializer
end
def profile_view_count
object.user_profile.views
object.user_profile&.views
end
def time_read

View File

@ -250,4 +250,17 @@ describe UserSerializer do
expect(json[:user_api_keys][2][:id]).to eq(user_api_key_2.id)
end
end
context "with missing user profile" do
fab!(:user) { Fabricate(:user) }
it "does not throw an error" do
id = user.id
UserProfile.delete(id)
user_b = User.find(id)
json = UserSerializer.new(user_b, scope: Guardian.new(user_b), root: false).as_json
expect(json[:bio_raw]).to eq nil
end
end
end