From 2968fb6a5c9e9771c8c780a1c57b8ca0d3ff060e Mon Sep 17 00:00:00 2001 From: Kelv Date: Fri, 21 Jul 2023 15:16:34 +0800 Subject: [PATCH] FIX: Render user profile trust level name for TL0 (#22740) * Why was this change necessary? The current logic in the user.hbs template file does not render the trust level element for the user's info panel when the user is TL0, because 0 is treated as falsey in the `if` conditional block. Ref: https://meta.discourse.org/t/tl0-not-displayed-on-users-profile-pages/271779/10 * How does it address the problem? This PR adds a predicate helper method local to the user controller that includes an additional check which returns true if the trust_level of the user is 0 on top of the existing logic. This allows TL0 users to have their trust level rendered correctly in their profile's info panel. --- .../discourse/app/controllers/user.js | 2 ++ .../discourse/app/templates/user.hbs | 2 +- spec/system/page_objects/pages/user.rb | 6 ++++++ .../user_page/user_profile_info_panel_spec.rb | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 spec/system/user_page/user_profile_info_panel_spec.rb diff --git a/app/assets/javascripts/discourse/app/controllers/user.js b/app/assets/javascripts/discourse/app/controllers/user.js index 72d6967ec92..237a264265d 100644 --- a/app/assets/javascripts/discourse/app/controllers/user.js +++ b/app/assets/javascripts/discourse/app/controllers/user.js @@ -68,6 +68,8 @@ export default Controller.extend(CanCheckEmails, { }; }), + isTrustLevelZero: equal("model.trust_level", 0), + hasTrustLevel: or("isTrustLevelZero", "model.trust_level"), showStaffCounters: or( "hasGivenFlags", "hasFlaggedPosts", diff --git a/app/assets/javascripts/discourse/app/templates/user.hbs b/app/assets/javascripts/discourse/app/templates/user.hbs index 4ea1c306837..ad8047619de 100644 --- a/app/assets/javascripts/discourse/app/templates/user.hbs +++ b/app/assets/javascripts/discourse/app/templates/user.hbs @@ -384,7 +384,7 @@ @model={{this.model.invited_by}} >{{this.model.invited_by.username}} {{/if}} - {{#if this.model.trust_level}} + {{#if this.hasTrustLevel}}
{{i18n "user.trust_level"}}
{{this.model.trustLevel.name}}
diff --git a/spec/system/page_objects/pages/user.rb b/spec/system/page_objects/pages/user.rb index a596f82db83..171610d1699 100644 --- a/spec/system/page_objects/pages/user.rb +++ b/spec/system/page_objects/pages/user.rb @@ -29,6 +29,12 @@ module PageObjects staff_counters.find("a[href='/u/#{user.username}/messages/warnings']").click self end + + def expand_info_panel + button = page.find("button[aria-controls='collapsed-info-panel']") + button.click if button["aria-expanded"] == "false" + self + end end end end diff --git a/spec/system/user_page/user_profile_info_panel_spec.rb b/spec/system/user_page/user_profile_info_panel_spec.rb new file mode 100644 index 00000000000..395e6212ce5 --- /dev/null +++ b/spec/system/user_page/user_profile_info_panel_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +RSpec.describe "User Profile Info Panel", system: true do + let(:user_page) { PageObjects::Pages::User.new } + + describe "trust level" do + TrustLevel.levels.values.each do |trust_level| + context "when user has trust level #{trust_level}" do + fab!(:user) { Fabricate(:user, trust_level: trust_level) } + before { sign_in(user) } + + it "displays the correct trust level element" do + user_page.visit(user).expand_info_panel + expect(user_page).to have_css("dd.trust-level", text: TrustLevel.name(trust_level)) + end + end + end + end +end