Replaced system_agent_limit Setting MiniTest with RSpec.
This commit is contained in:
parent
baa7b97d07
commit
48ff43aaed
3 changed files with 162 additions and 110 deletions
|
@ -6,4 +6,32 @@ RSpec.describe Role do
|
|||
let(:new_group_access_instance) { build(:role) }
|
||||
|
||||
include_examples 'HasGroups'
|
||||
|
||||
context '#validate_agent_limit_by_attributes' do
|
||||
|
||||
context 'agent creation limit surpassing prevention' do
|
||||
|
||||
def current_agent_count
|
||||
User.with_permissions('ticket.agent').count
|
||||
end
|
||||
|
||||
it 'prevents re-activation of Role with agent permission' do
|
||||
Setting.set('system_agent_limit', current_agent_count)
|
||||
|
||||
inactive_agent_role = create(:role,
|
||||
active: false,
|
||||
permissions: Permission.where(name: 'ticket.agent'))
|
||||
|
||||
create(:user, roles: [inactive_agent_role])
|
||||
|
||||
initial_agent_count = current_agent_count
|
||||
|
||||
expect do
|
||||
inactive_agent_role.update!(active: true)
|
||||
end.to raise_error(Exceptions::UnprocessableEntity)
|
||||
|
||||
expect(current_agent_count).to eq(initial_agent_count)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -530,4 +530,138 @@ RSpec.describe User do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'agent limit' do
|
||||
|
||||
def current_agent_count
|
||||
User.with_permissions('ticket.agent').count
|
||||
end
|
||||
|
||||
let(:agent_role) { Role.lookup(name: 'Agent') }
|
||||
let(:admin_role) { Role.lookup(name: 'Admin') }
|
||||
|
||||
context '#validate_agent_limit_by_role' do
|
||||
|
||||
context 'agent creation limit not reached' do
|
||||
|
||||
it 'grants agent creation' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 1)
|
||||
|
||||
expect do
|
||||
create(:agent_user)
|
||||
end.to change {
|
||||
current_agent_count
|
||||
}.by(1)
|
||||
end
|
||||
|
||||
it 'grants role change' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 1)
|
||||
|
||||
future_agent = create(:customer_user)
|
||||
|
||||
expect do
|
||||
future_agent.roles = [agent_role]
|
||||
end.to change {
|
||||
current_agent_count
|
||||
}.by(1)
|
||||
end
|
||||
|
||||
context 'role updates' do
|
||||
|
||||
it 'grants update by instances' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 1)
|
||||
|
||||
agent = create(:agent_user)
|
||||
|
||||
expect do
|
||||
agent.roles = [
|
||||
admin_role,
|
||||
agent_role
|
||||
]
|
||||
agent.save!
|
||||
end.not_to raise_error
|
||||
end
|
||||
|
||||
it 'grants update by id (Integer)' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 1)
|
||||
|
||||
agent = create(:agent_user)
|
||||
|
||||
expect do
|
||||
agent.role_ids = [
|
||||
admin_role.id,
|
||||
agent_role.id
|
||||
]
|
||||
agent.save!
|
||||
end.not_to raise_error
|
||||
end
|
||||
|
||||
it 'grants update by id (String)' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 1)
|
||||
|
||||
agent = create(:agent_user)
|
||||
|
||||
expect do
|
||||
agent.role_ids = [
|
||||
admin_role.id.to_s,
|
||||
agent_role.id.to_s
|
||||
]
|
||||
agent.save!
|
||||
end.not_to raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'agent creation limit surpassing prevention' do
|
||||
|
||||
it 'creation of new agents' do
|
||||
Setting.set('system_agent_limit', current_agent_count + 2)
|
||||
|
||||
create_list(:agent_user, 2)
|
||||
|
||||
initial_agent_count = current_agent_count
|
||||
|
||||
expect do
|
||||
create(:agent_user)
|
||||
end.to raise_error(Exceptions::UnprocessableEntity)
|
||||
|
||||
expect(current_agent_count).to eq(initial_agent_count)
|
||||
end
|
||||
|
||||
it 'prevents role change' do
|
||||
Setting.set('system_agent_limit', current_agent_count)
|
||||
|
||||
future_agent = create(:customer_user)
|
||||
|
||||
initial_agent_count = current_agent_count
|
||||
|
||||
expect do
|
||||
future_agent.roles = [agent_role]
|
||||
end.to raise_error(Exceptions::UnprocessableEntity)
|
||||
|
||||
expect(current_agent_count).to eq(initial_agent_count)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context '#validate_agent_limit_by_attributes' do
|
||||
|
||||
context 'agent creation limit surpassing prevention' do
|
||||
|
||||
it 'prevents re-activation of agents' do
|
||||
Setting.set('system_agent_limit', current_agent_count)
|
||||
|
||||
inactive_agent = create(:agent_user, active: false)
|
||||
|
||||
initial_agent_count = current_agent_count
|
||||
|
||||
expect do
|
||||
inactive_agent.update!(active: true)
|
||||
end.to raise_error(Exceptions::UnprocessableEntity)
|
||||
|
||||
expect(current_agent_count).to eq(initial_agent_count)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,110 +0,0 @@
|
|||
|
||||
require 'test_helper'
|
||||
|
||||
class UserValidateAgentLimit < ActiveSupport::TestCase
|
||||
test 'user_validate_agent_limit' do
|
||||
|
||||
UserInfo.current_user_id = 1
|
||||
agent_max = User.with_permissions('ticket.agent').count + 2
|
||||
Setting.set('system_agent_limit', agent_max)
|
||||
role_agent = Role.lookup(name: 'Agent')
|
||||
role_customer = Role.lookup(name: 'Customer')
|
||||
|
||||
user1 = User.create!(
|
||||
firstname: 'Firstname',
|
||||
lastname: 'Lastname',
|
||||
email: 'some-agentlimit-user@example.com',
|
||||
login: 'some-agentlimit-user@example.com',
|
||||
roles: [role_agent],
|
||||
active: true,
|
||||
)
|
||||
user2 = User.create!(
|
||||
firstname: 'Firstname1',
|
||||
lastname: 'Lastname1',
|
||||
email: 'some-agentlimit-user-1@example.com',
|
||||
login: 'some-agentlimit-user-1@example.com',
|
||||
roles: [role_agent],
|
||||
active: true,
|
||||
)
|
||||
|
||||
assert_raises(Exceptions::UnprocessableEntity) do
|
||||
user3 = User.create!(
|
||||
firstname: 'Firstname2',
|
||||
lastname: 'Lastname2',
|
||||
email: 'some-agentlimit-user-2@example.com',
|
||||
login: 'some-agentlimit-user-2@example.com',
|
||||
roles: [role_agent],
|
||||
active: true,
|
||||
)
|
||||
end
|
||||
|
||||
user3 = User.create!(
|
||||
firstname: 'Firstname2',
|
||||
lastname: 'Lastname2',
|
||||
email: 'some-agentlimit-user-2@example.com',
|
||||
login: 'some-agentlimit-user-2@example.com',
|
||||
roles: [role_customer],
|
||||
active: true,
|
||||
)
|
||||
|
||||
assert_raises(Exceptions::UnprocessableEntity) do
|
||||
user3.roles = [role_agent]
|
||||
end
|
||||
|
||||
assert_equal(User.with_permissions('ticket.agent').count, agent_max)
|
||||
|
||||
Setting.set('system_agent_limit', agent_max + 1)
|
||||
user3.reload
|
||||
user3.roles = [role_agent]
|
||||
user3.save!
|
||||
|
||||
user3.active = false
|
||||
user3.save!
|
||||
|
||||
Setting.set('system_agent_limit', agent_max)
|
||||
|
||||
# try to activate inactive agent again
|
||||
assert_raises(Exceptions::UnprocessableEntity) do
|
||||
user3 = User.find(user3.id)
|
||||
user3.active = true
|
||||
user3.save!
|
||||
end
|
||||
|
||||
assert_equal(User.with_permissions('ticket.agent').count, agent_max)
|
||||
|
||||
# try to activate inactive role again
|
||||
role_agent_limit = Role.create!(
|
||||
name: 'agent-limit-test-invalid-role',
|
||||
note: 'agent-limit-test-invalid-role Role.',
|
||||
permissions: Permission.where(name: 'ticket.agent'),
|
||||
active: false,
|
||||
)
|
||||
user3.roles = [role_agent_limit]
|
||||
user3.active = true
|
||||
user3.save!
|
||||
|
||||
assert_raises(Exceptions::UnprocessableEntity) do
|
||||
role_agent_limit.active = true
|
||||
role_agent_limit.save!
|
||||
end
|
||||
|
||||
assert_equal(User.with_permissions('ticket.agent').count, agent_max)
|
||||
|
||||
# set roles of agent again
|
||||
role_admin = Role.lookup(name: 'Admin')
|
||||
user2.roles = [role_agent, role_admin]
|
||||
user2.save!
|
||||
|
||||
user2.role_ids = [role_admin.id, role_agent_limit.id]
|
||||
user2.save!
|
||||
|
||||
user2.role_ids = [role_admin.id.to_s, role_agent_limit.id.to_s]
|
||||
user2.save!
|
||||
|
||||
user1.destroy!
|
||||
user2.destroy!
|
||||
user3.destroy!
|
||||
role_agent_limit.destroy!
|
||||
Setting.set('system_agent_limit', nil)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue