123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe 'Ticket zoom > Auto Assignment', type: :system do
- describe 'Core functionality', authenticated_as: :authenticate do
- let!(:ticket) { create(:ticket, group: Group.find_by(name: 'Users'), state: Ticket::State.find_by(name: 'new')) }
- let!(:session_user) { User.find_by(login: 'admin@example.com') }
- context 'when agent disabled' do
- def authenticate
- Setting.set('ticket_auto_assignment', false)
- Setting.set('ticket_auto_assignment_selector', { condition: { 'ticket.state_id' => { operator: 'is', value: Ticket::State.by_category_ids(:work_on) } } })
- Setting.set('ticket_auto_assignment_user_ids_ignore', [])
- true
- end
- it 'do not assign ticket to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: '-',
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'when agent enabled' do
- def authenticate
- Setting.set('ticket_auto_assignment', true)
- Setting.set('ticket_auto_assignment_selector', { condition: { 'ticket.state_id' => { operator: 'is', value: Ticket::State.by_category_ids(:work_on) } } })
- Setting.set('ticket_auto_assignment_user_ids_ignore', setting_user_ids_ignore) if defined?(setting_user_ids_ignore)
- true
- end
- context 'with empty "ticket_auto_assignment_user_ids_ignore"' do
- it 'assigns ticket to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_css('.content.active select[name=owner_id]')
- expect(page).to have_select('owner_id',
- selected: session_user.fullname,
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'with "ticket_auto_assignment_user_ids_ignore" (as integer)' do
- let(:setting_user_ids_ignore) { session_user.id }
- it 'assigns ticket not to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: '-',
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'with "ticket_auto_assignment_user_ids_ignore" (as string)' do
- let(:setting_user_ids_ignore) { session_user.id.to_s }
- it 'assigns ticket not to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: '-',
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'with "ticket_auto_assignment_user_ids_ignore" (as [integer])' do
- let(:setting_user_ids_ignore) { [session_user.id] }
- it 'assigns ticket not to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: '-',
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'with "ticket_auto_assignment_user_ids_ignore" (as [string])' do
- let(:setting_user_ids_ignore) { [session_user.id.to_s] }
- it 'assigns ticket not to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: '-',
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- context 'with "ticket_auto_assignment_user_ids_ignore" and other user ids' do
- let(:setting_user_ids_ignore) { [99_999, 999_999] }
- it 'assigns ticket to current session user' do
- visit "#ticket/zoom/#{ticket.id}"
- within(:active_content) do
- expect(page).to have_select('owner_id',
- selected: session_user.fullname,
- options: ['-', 'Agent 1 Test', 'Test Admin Agent'])
- end
- end
- end
- end
- end
- describe 'Mandatory field in combination with automatic assignment leads to a divergence in the setting of the ticket owner #4245', authenticated_as: :authenticate, db_strategy: :reset do
- let!(:ticket) { create(:ticket, group: Group.find_by(name: 'Users')) }
- let(:field_name) { SecureRandom.uuid }
- let(:field) do
- create(:object_manager_attribute_text, :required_screen, name: field_name, display: field_name)
- ObjectManager::Attribute.migration_execute
- end
- def authenticate
- Setting.set('ticket_auto_assignment', true)
- Setting.set('ticket_auto_assignment_selector', { condition: { 'ticket.state_id' => { operator: 'is', value: Ticket::State.pluck(:id) } } })
- field
- true
- end
- before do
- visit "#ticket/zoom/#{ticket.id}"
- end
- it 'does auto assign the current user even if we have an empty required field' do
- expect(page).to have_select('owner_id', selected: 'Test Admin Agent')
- end
- end
- end
|