From 25938208ff3e3bbcc28f2c1eaffd6aee96836966 Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Wed, 23 Apr 2025 09:49:44 +0800 Subject: [PATCH] FIX: recalculate respects default invitee trust level (#32393) Currently, trust level is calculated with this formula: `[granted_trust_level, previous_trust_level, SiteSetting.default_trust_level].max` When a user is invited, SiteSetting.default_invitee_trust_level should be respected in that calculation. --- lib/trust_level.rb | 9 ++++++++- spec/lib/promotion_spec.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/trust_level.rb b/lib/trust_level.rb index 8db2e634baf..7ee6f3b1756 100644 --- a/lib/trust_level.rb +++ b/lib/trust_level.rb @@ -37,8 +37,15 @@ class TrustLevel # Then consider the group locked level (or the previous trust level) granted_trust_level = user.group_granted_trust_level || 0 previous_trust_level = use_previous_trust_level ? find_previous_trust_level(user) : 0 + invitee_trust_level = + user.invited_user&.redeemed_at ? SiteSetting.default_invitee_trust_level : 0 - [granted_trust_level, previous_trust_level, SiteSetting.default_trust_level].max + [ + granted_trust_level, + previous_trust_level, + invitee_trust_level, + SiteSetting.default_trust_level, + ].max end private diff --git a/spec/lib/promotion_spec.rb b/spec/lib/promotion_spec.rb index 990c516a4c6..a3e905a1039 100644 --- a/spec/lib/promotion_spec.rb +++ b/spec/lib/promotion_spec.rb @@ -96,6 +96,23 @@ RSpec.describe Promotion do end end + context "when user was invited" do + it "respects default invitee trust level" do + SiteSetting.default_trust_level = 0 + SiteSetting.default_invitee_trust_level = 1 + Promotion.recalculate(user) + expect(user.trust_level).to eq(0) + + invited_user = Fabricate(:invited_user, user: user) + Promotion.recalculate(user) + expect(user.trust_level).to eq(0) + + invited_user.update!(redeemed_at: Time.now) + Promotion.recalculate(user) + expect(user.trust_level).to eq(1) + end + end + context "when may send tl1 promotion messages" do before do stat = user.user_stat