diff --git a/app/models/user.rb b/app/models/user.rb index 6dd6bdb4e15..6094b4bb6c5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1316,6 +1316,10 @@ class User < ActiveRecord::Base !!(suspended_till && suspended_till > Time.zone.now) end + def silenced_till + main_user_record[:silenced_till] + end + def silenced? !!(silenced_till && silenced_till > Time.zone.now) end @@ -2145,6 +2149,10 @@ class User < ActiveRecord::Base private + def main_user_record + anonymous? ? master_user : self + end + def set_default_sidebar_section_links(update: false) return if staged? || bot? diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 139e3e71d22..afdf157ad18 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -2476,6 +2476,22 @@ RSpec.describe User do end end + describe "#silenced_till" do + context "when the user is an anonymous shadow" do + let(:main) { Fabricate(:user, silenced_till: 1.day.from_now) } + let(:anon) { Fabricate(:anonymous) } + + before do + SiteSetting.allow_anonymous_mode = true + anon.anonymous_user_master.update(master_user_id: main.id) + end + + it "delegates the value from the main user record" do + expect(anon.silenced_till).to eq(main.silenced_till) + end + end + end + describe "silenced?" do it "is not silenced by default" do expect(Fabricate(:user)).not_to be_silenced