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) }
|
let(:new_group_access_instance) { build(:role) }
|
||||||
|
|
||||||
include_examples 'HasGroups'
|
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
|
end
|
||||||
|
|
|
@ -530,4 +530,138 @@ RSpec.describe User do
|
||||||
end
|
end
|
||||||
end
|
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
|
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