docbrown/spec/requests/admin/bulk_assign_role_spec.rb
Rajat Talesra f2cc2ae774
Admin Area: Bulk assign user roles (#19733)
* 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
2023-07-18 18:41:54 +05:30

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