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