Просмотр исходного кода

Replaced system_agent_limit Setting MiniTest with RSpec.

Thorsten Eckel 6 лет назад
Родитель
Сommit
48ff43aaed
3 измененных файлов с 162 добавлено и 110 удалено
  1. 28 0
      spec/models/role_spec.rb
  2. 134 0
      spec/models/user_spec.rb
  3. 0 110
      test/unit/user_validate_agent_limit_test.rb

+ 28 - 0
spec/models/role_spec.rb

@@ -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

+ 134 - 0
spec/models/user_spec.rb

@@ -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

+ 0 - 110
test/unit/user_validate_agent_limit_test.rb

@@ -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