From ce7172bc9b663dbb1919fdfd0b4213dd56a269bc Mon Sep 17 00:00:00 2001 From: Andrei Prigorshnev Date: Wed, 16 Nov 2022 21:42:56 +0400 Subject: [PATCH] FIX: status was clearing after editing user preferences (#18887) The problem was reported as a problem with changing theme in user preferences, after saving a new theme the previously set user status was disappearing (https://meta.discourse.org/t/user-status/240335/42). Turned out though that the problem was more wide, changing pretty much any setting in user preferences apart from user status itself led to clearing the status. --- app/controllers/users_controller.rb | 1 + app/services/user_updater.rb | 2 +- spec/requests/users_controller_spec.rb | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 49c7ea03c20..fe6ee5d7595 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 0083ff69554..72f934802fc 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 f9c70f3355a..38dd9e189c9 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