* Bulk Assign Roles UI * Renaming roles to role * Added role to multiple users without using note. * Role note added * Role blank key fix * Removed roles * typo fix * AuditLog Added * Optimising code * Good standing role issue * Good standing role issue fix * Minor PR changes based on review * Added cypress tests * Added spec tests for BulkAssignRole * Minor fixes
118 lines
4.6 KiB
Ruby
118 lines
4.6 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "Admin::BulkAssignRole" do
|
|
let(:admin) { create(:user, :super_admin) }
|
|
let(:user1) { create(:user) }
|
|
let(:user2) { create(:user) }
|
|
let(:user3) { create(:user) }
|
|
let(:usernames_string) { "#{user1.username}, #{user2.username}, #{user3.username}" }
|
|
let(:role) { "Trusted" }
|
|
let(:note_for_current_role) { "Assigned Trusted role" }
|
|
let(:extra_space_usernames_string) { "#{user1.username}, #{user2.username}, #{user3.username}" }
|
|
let(:invalid_role) { "Invalid Role" }
|
|
|
|
describe "POST /admin/member_manager/bulk_assign_role" do
|
|
before do
|
|
sign_in admin
|
|
end
|
|
|
|
it "adds trusted role successfully" do
|
|
params = { usernames: usernames_string, role: role, note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
expect(response).to redirect_to(admin_bulk_assign_role_index_path)
|
|
expect(flash[:success]).to eq(I18n.t("admin.bulk_assign_role_controller.success_message"))
|
|
|
|
expect(user1.roles.count).to eq(1)
|
|
expect(user1.roles.last.name).to eq(role.downcase)
|
|
|
|
expect(user2.roles.count).to eq(1)
|
|
expect(user2.roles.last.name).to eq(role.downcase)
|
|
|
|
expect(user3.roles.count).to eq(1)
|
|
expect(user3.roles.last.name).to eq(role.downcase)
|
|
end
|
|
|
|
it "adds role with extra whitespace in usernames" do
|
|
params = { usernames: extra_space_usernames_string, role: role, note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
expect(user1.roles.count).to eq(1)
|
|
expect(user1.roles.last.name).to eq(role.downcase)
|
|
|
|
expect(user2.roles.count).to eq(1)
|
|
expect(user2.roles.last.name).to eq(role.downcase)
|
|
|
|
expect(user3.roles.count).to eq(1)
|
|
expect(user3.roles.last.name).to eq(role.downcase)
|
|
end
|
|
|
|
it "shows error if role is blank" do
|
|
params = { usernames: usernames_string, note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
expect(response).to redirect_to(admin_bulk_assign_role_index_path)
|
|
expect(flash[:danger]).to eq(I18n.t("admin.bulk_assign_role_controller.role_blank"))
|
|
|
|
expect(user1.roles.count).to eq(0)
|
|
expect(user2.roles.count).to eq(0)
|
|
expect(user3.roles.count).to eq(0)
|
|
end
|
|
|
|
it "adds default note if user input is empty" do
|
|
params = { usernames: usernames_string, role: role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
expect(user1.notes.last.content).to eq(I18n.t("admin.bulk_assign_role_controller.role_assigment", role: role))
|
|
end
|
|
|
|
it "adds role to valid usernames only and creates user_not_found AuditLog" do
|
|
invalid_username = "invalidusername"
|
|
params = { usernames: "#{user1.username}, #{user2.username}, #{invalid_username}", role: role,
|
|
note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
expect(user1.roles.count).to eq(1)
|
|
expect(user1.roles.last.name).to eq(role.downcase)
|
|
|
|
expect(user2.roles.count).to eq(1)
|
|
expect(user2.roles.last.name).to eq(role.downcase)
|
|
|
|
log = AuditLog.last
|
|
expect(log.data["role"]).to eq(role)
|
|
expect(log.data["username"]).to eq(invalid_username)
|
|
expect(log.data["user_action_status"]).to eq("user_not_found")
|
|
end
|
|
|
|
it "adds successful AuditLog" do
|
|
params = { usernames: usernames_string, role: role, note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
logs = AuditLog.last(3)
|
|
expect(logs[0].category).to eq("admin.bulk_assign_role.add_role")
|
|
expect(logs[0].user).to eq(admin)
|
|
|
|
expect(logs[0].data["username"]).to eq(user1.username)
|
|
expect(logs[0].data["user_action_status"]).to eq("role_applied_successfully")
|
|
|
|
expect(logs[1].data["username"]).to eq(user2.username)
|
|
expect(logs[1].data["user_action_status"]).to eq("role_applied_successfully")
|
|
|
|
expect(logs[2].data["username"]).to eq(user3.username)
|
|
expect(logs[2].data["user_action_status"]).to eq("role_applied_successfully")
|
|
end
|
|
|
|
it "adds role already applied AuditLog" do
|
|
params = { usernames: user1.username.to_s, role: role, note_for_current_role: note_for_current_role }
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
# Adding the role again to trigger the "user_already_has_the_role" AuditLog.
|
|
post admin_bulk_assign_role_path, params: params
|
|
|
|
log = AuditLog.last
|
|
expect(log.data["role"]).to eq(role)
|
|
expect(log.data["username"]).to eq(user1.username)
|
|
expect(log.data["user_action_status"]).to eq("user_already_has_the_role")
|
|
end
|
|
end
|
|
end
|