diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 49c7ea03c2..fe6ee5d759 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1966,6 +1966,7 @@ class UsersController < ApplicationController end if SiteSetting.enable_user_status + permitted << :status permitted << { status: [:emoji, :description, :ends_at] } end diff --git a/app/services/user_updater.rb b/app/services/user_updater.rb index 0083ff6955..72f934802f 100644 --- a/app/services/user_updater.rb +++ b/app/services/user_updater.rb @@ -216,7 +216,7 @@ class UserUpdater end if SiteSetting.enable_user_status? - update_user_status(attributes[:status]) + update_user_status(attributes[:status]) if attributes.has_key?(:status) end name_changed = user.name_changed? diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index f9c70f3355..38dd9e189c 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -2578,6 +2578,25 @@ RSpec.describe UsersController do expect(user1.user_status).not_to be_nil end + it "doesn't clear user status if it wasn't sent in the payload" do + new_status = { + emoji: "off to dentist", + description: "tooth", + } + user.set_status!(new_status[:description], new_status[:emoji]) + user.reload + + put "/u/#{user.username}.json", params: { + bio_raw: "new bio" + } + expect(response.status).to eq(200) + + user.reload + expect(user.user_status).not_to be_nil + expect(user.user_status.emoji).to eq(new_status[:emoji]) + expect(user.user_status.description).to eq(new_status[:description]) + end + context 'when user status is disabled' do before do SiteSetting.enable_user_status = false