diff --git a/app/helpers/admin/users_helper.rb b/app/helpers/admin/users_helper.rb index e7c34e034..a7108cdaf 100644 --- a/app/helpers/admin/users_helper.rb +++ b/app/helpers/admin/users_helper.rb @@ -1,5 +1,17 @@ module Admin module UsersHelper + def role_options(logged_in_user) + options = { "Base Roles" => Constants::Role::BASE_ROLES } + if logged_in_user.super_admin? + special_roles = Constants::Role::SPECIAL_ROLES + if FeatureFlag.enabled?(:moderator_role) + special_roles = special_roles.dup << "Moderator" + end + options["Special Roles"] = special_roles + end + options + end + def format_last_activity_timestamp(timestamp) return if timestamp.blank? diff --git a/app/views/admin/users/show/overview/_roles.html.erb b/app/views/admin/users/show/overview/_roles.html.erb index 460ce06d4..6e9834c00 100644 --- a/app/views/admin/users/show/overview/_roles.html.erb +++ b/app/views/admin/users/show/overview/_roles.html.erb @@ -48,9 +48,7 @@ <%= form_for(@user, url: user_status_admin_user_path(@user), html: { class: "flex flex-col gap-4", id: nil }) do |f| %>
<%= f.label :user_status, "Role", class: "crayons-field__label" %> - <% options = { "Base Roles" => Constants::Role::BASE_ROLES } %> - <% options["Special Roles"] = Constants::Role::SPECIAL_ROLES if current_user.super_admin? %> - <%= f.select(:user_status, grouped_options_for_select(options), { include_blank: "Select role" }, class: "crayons-select") %> + <%= f.select(:user_status, grouped_options_for_select(role_options(current_user)), { include_blank: "Select role" }, class: "crayons-select") %>
<%= f.label :note_for_current_role, "Add a note to this action:", class: "crayons-field__label" %> diff --git a/spec/helpers/admin/users_helper_spec.rb b/spec/helpers/admin/users_helper_spec.rb index 767e3e470..d8eca21fd 100644 --- a/spec/helpers/admin/users_helper_spec.rb +++ b/spec/helpers/admin/users_helper_spec.rb @@ -1,6 +1,33 @@ require "rails_helper" describe Admin::UsersHelper do + describe "#role_options" do + let(:user) { create(:user) } + + it "returns base roles", :aggregate_failures do + user.add_role(:admin) + roles = helper.role_options(user) + expect(roles).to have_key("Base Roles") + expect(roles["Base Roles"]).to eq Constants::Role::BASE_ROLES + end + + it "returns special roles", :aggregate_failures do + user.add_role(:super_admin) + roles = helper.role_options(user) + expect(roles).to have_key("Special Roles") + expect(roles["Special Roles"]).to eq Constants::Role::SPECIAL_ROLES + end + + it "adds moderator role when feature flag enabled", :aggregate_failures do + user.add_role(:super_admin) + allow(FeatureFlag).to receive(:enabled?).with(:moderator_role).and_return(true) + + roles = helper.role_options(user) + expect(roles).to have_key("Special Roles") + expect(roles["Special Roles"]).to include "Moderator" + end + end + describe "#format_last_activity_timestamp" do it "renders the proper 'Last activity' date for a user that was active today" do timestamp = Time.zone.today