Maintenance: Port agent ticket update tests to capybara.
This commit is contained in:
parent
1b3530f2ae
commit
63335652cb
12 changed files with 326 additions and 897 deletions
|
@ -41,11 +41,6 @@ if [ "$LEVEL" == '1' ]; then
|
||||||
rm test/browser/agent_ticket_task_changed_test.rb
|
rm test/browser/agent_ticket_task_changed_test.rb
|
||||||
rm test/browser/agent_ticket_text_module_test.rb
|
rm test/browser/agent_ticket_text_module_test.rb
|
||||||
rm test/browser/agent_ticket_time_accounting_test.rb
|
rm test/browser/agent_ticket_time_accounting_test.rb
|
||||||
rm test/browser/agent_ticket_update1_test.rb
|
|
||||||
rm test/browser/agent_ticket_update2_test.rb
|
|
||||||
rm test/browser/agent_ticket_update3_test.rb
|
|
||||||
rm test/browser/agent_ticket_update4_test.rb
|
|
||||||
rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
rm test/browser/agent_ticket_update_and_reload_test.rb
|
rm test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
rm test/browser/agent_ticket_zoom_hide_test.rb
|
rm test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
@ -106,11 +101,6 @@ elif [ "$LEVEL" == '2' ]; then
|
||||||
rm test/browser/agent_ticket_task_changed_test.rb
|
rm test/browser/agent_ticket_task_changed_test.rb
|
||||||
# test/browser/agent_ticket_text_module_test.rb
|
# test/browser/agent_ticket_text_module_test.rb
|
||||||
# test/browser/agent_ticket_time_accounting_test.rb
|
# test/browser/agent_ticket_time_accounting_test.rb
|
||||||
# test/browser/agent_ticket_update1_test.rb
|
|
||||||
# test/browser/agent_ticket_update2_test.rb
|
|
||||||
# test/browser/agent_ticket_update3_test.rb
|
|
||||||
# test/browser/agent_ticket_update4_test.rb
|
|
||||||
# rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
# rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
# rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
# test/browser/agent_ticket_update_and_reload_test.rb
|
# test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
# test/browser/agent_ticket_zoom_hide_test.rb
|
# test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
@ -171,11 +161,6 @@ elif [ "$LEVEL" == '3' ]; then
|
||||||
# test/browser/agent_ticket_task_changed_test.rb
|
# test/browser/agent_ticket_task_changed_test.rb
|
||||||
rm test/browser/agent_ticket_text_module_test.rb
|
rm test/browser/agent_ticket_text_module_test.rb
|
||||||
rm test/browser/agent_ticket_time_accounting_test.rb
|
rm test/browser/agent_ticket_time_accounting_test.rb
|
||||||
rm test/browser/agent_ticket_update1_test.rb
|
|
||||||
rm test/browser/agent_ticket_update2_test.rb
|
|
||||||
rm test/browser/agent_ticket_update3_test.rb
|
|
||||||
rm test/browser/agent_ticket_update4_test.rb
|
|
||||||
rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
rm test/browser/agent_ticket_update_and_reload_test.rb
|
rm test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
rm test/browser/agent_ticket_zoom_hide_test.rb
|
rm test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
@ -236,11 +221,6 @@ elif [ "$LEVEL" == '4' ]; then
|
||||||
rm test/browser/agent_ticket_task_changed_test.rb
|
rm test/browser/agent_ticket_task_changed_test.rb
|
||||||
rm test/browser/agent_ticket_text_module_test.rb
|
rm test/browser/agent_ticket_text_module_test.rb
|
||||||
rm test/browser/agent_ticket_time_accounting_test.rb
|
rm test/browser/agent_ticket_time_accounting_test.rb
|
||||||
rm test/browser/agent_ticket_update1_test.rb
|
|
||||||
rm test/browser/agent_ticket_update2_test.rb
|
|
||||||
rm test/browser/agent_ticket_update3_test.rb
|
|
||||||
rm test/browser/agent_ticket_update4_test.rb
|
|
||||||
rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
rm test/browser/agent_ticket_update_and_reload_test.rb
|
rm test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
rm test/browser/agent_ticket_zoom_hide_test.rb
|
rm test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
@ -300,11 +280,6 @@ elif [ "$LEVEL" == '5' ]; then
|
||||||
rm test/browser/agent_ticket_task_changed_test.rb
|
rm test/browser/agent_ticket_task_changed_test.rb
|
||||||
rm test/browser/agent_ticket_text_module_test.rb
|
rm test/browser/agent_ticket_text_module_test.rb
|
||||||
rm test/browser/agent_ticket_time_accounting_test.rb
|
rm test/browser/agent_ticket_time_accounting_test.rb
|
||||||
rm test/browser/agent_ticket_update1_test.rb
|
|
||||||
rm test/browser/agent_ticket_update2_test.rb
|
|
||||||
rm test/browser/agent_ticket_update3_test.rb
|
|
||||||
rm test/browser/agent_ticket_update4_test.rb
|
|
||||||
rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
rm test/browser/agent_ticket_update_and_reload_test.rb
|
rm test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
rm test/browser/agent_ticket_zoom_hide_test.rb
|
rm test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
@ -367,11 +342,6 @@ elif [ "$LEVEL" == '6' ]; then
|
||||||
rm test/browser/agent_ticket_task_changed_test.rb
|
rm test/browser/agent_ticket_task_changed_test.rb
|
||||||
rm test/browser/agent_ticket_text_module_test.rb
|
rm test/browser/agent_ticket_text_module_test.rb
|
||||||
rm test/browser/agent_ticket_time_accounting_test.rb
|
rm test/browser/agent_ticket_time_accounting_test.rb
|
||||||
rm test/browser/agent_ticket_update1_test.rb
|
|
||||||
rm test/browser/agent_ticket_update2_test.rb
|
|
||||||
rm test/browser/agent_ticket_update3_test.rb
|
|
||||||
rm test/browser/agent_ticket_update4_test.rb
|
|
||||||
rm test/browser/agent_ticket_update5_test.rb
|
|
||||||
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
rm test/browser/agent_ticket_update_with_attachment_refresh_test.rb
|
||||||
rm test/browser/agent_ticket_update_and_reload_test.rb
|
rm test/browser/agent_ticket_update_and_reload_test.rb
|
||||||
rm test/browser/agent_ticket_zoom_hide_test.rb
|
rm test/browser/agent_ticket_zoom_hide_test.rb
|
||||||
|
|
|
@ -275,7 +275,6 @@ module CommonActions
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# popover_on_hover(page.find('button.hover_me'))
|
# popover_on_hover(page.find('button.hover_me'))
|
||||||
#
|
|
||||||
def popover_on_hover(element, wait_for_popover_killer: true)
|
def popover_on_hover(element, wait_for_popover_killer: true)
|
||||||
# wait for popover killer to pass
|
# wait for popover killer to pass
|
||||||
sleep 3 if wait_for_popover_killer
|
sleep 3 if wait_for_popover_killer
|
||||||
|
@ -294,6 +293,30 @@ module CommonActions
|
||||||
page.execute_script("document.querySelector('#{css_selector}').scrollIntoView(#{position == :top})")
|
page.execute_script("document.querySelector('#{css_selector}').scrollIntoView(#{position == :top})")
|
||||||
sleep 0.3
|
sleep 0.3
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Close a tab in the taskbar.
|
||||||
|
#
|
||||||
|
# @param discard_changes [Boolean] if true, discard changes
|
||||||
|
#
|
||||||
|
# @example
|
||||||
|
# taskbar_tab_close('Ticket-2')
|
||||||
|
#
|
||||||
|
def taskbar_tab_close(tab_data_key, discard_changes: true)
|
||||||
|
retry_on_stale do
|
||||||
|
taskbar_entry = find(:task_with, tab_data_key)
|
||||||
|
|
||||||
|
move_mouse_to(taskbar_entry)
|
||||||
|
move_mouse_by(5, 5)
|
||||||
|
|
||||||
|
click ".tasks .task[data-key='#{tab_data_key}'] .js-close"
|
||||||
|
|
||||||
|
return if !discard_changes
|
||||||
|
|
||||||
|
in_modal do
|
||||||
|
click '.js-submit'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
|
|
34
spec/support/capybara/field_actions.rb
Normal file
34
spec/support/capybara/field_actions.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
module FieldActions
|
||||||
|
|
||||||
|
delegate :app_host, to: Capybara
|
||||||
|
|
||||||
|
# Check the field value of a form date field.
|
||||||
|
#
|
||||||
|
# @example
|
||||||
|
# check_date_field_value('date_field_name', '20/12/2020')
|
||||||
|
#
|
||||||
|
def check_date_field_value(name, value)
|
||||||
|
date_attribute_field = find("div[data-name='#{name}'] input[data-item='date']")
|
||||||
|
expect(date_attribute_field.value).to eq(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set the field value of a form date field.
|
||||||
|
#
|
||||||
|
# @example
|
||||||
|
# set_date_field_value('date_field_name', '20/12/2020')
|
||||||
|
#
|
||||||
|
def set_date_field_value(name, value)
|
||||||
|
# We need a special handling for a blank value, to trigger a correct update.
|
||||||
|
if value.blank?
|
||||||
|
find("div[data-name='#{name}'] input[data-item='date']").send_keys :backspace
|
||||||
|
end
|
||||||
|
|
||||||
|
find("div[data-name='#{name}'] .js-datepicker").fill_in with: value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.include FieldActions, type: :system
|
||||||
|
end
|
|
@ -3,7 +3,6 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe 'Chat Handling', type: :system do
|
RSpec.describe 'Chat Handling', type: :system do
|
||||||
let(:admin) { create(:admin) }
|
|
||||||
let(:agent_chat_switch_selector) { '#navigation .js-chatMenuItem .js-switch' }
|
let(:agent_chat_switch_selector) { '#navigation .js-chatMenuItem .js-switch' }
|
||||||
let(:chat_url) { "/assets/chat/#{chat_url_type}.html?port=#{ENV['WS_PORT']}" }
|
let(:chat_url) { "/assets/chat/#{chat_url_type}.html?port=#{ENV['WS_PORT']}" }
|
||||||
let(:chat_url_type) { 'znuny' }
|
let(:chat_url_type) { 'znuny' }
|
||||||
|
|
|
@ -471,6 +471,18 @@ RSpec.describe 'Ticket Create', type: :system do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when closing taskbar tab for new ticket creation' do
|
||||||
|
it 'close task bar entry after some changes in ticket create form' do
|
||||||
|
visit 'ticket/create'
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
find('[name=title]').fill_in with: 'Title'
|
||||||
|
end
|
||||||
|
|
||||||
|
taskbar_tab_close(find(:task_active)['data-key'])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'customer selection to check the field search' do
|
describe 'customer selection to check the field search' do
|
||||||
before do
|
before do
|
||||||
create(:customer, active: true)
|
create(:customer, active: true)
|
||||||
|
|
179
spec/system/ticket/update/simultaneously_with_two_user_spec.rb
Normal file
179
spec/system/ticket/update/simultaneously_with_two_user_spec.rb
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Ticket > Update > Simultaneously with two different user', type: :system do
|
||||||
|
let(:group) { Group.find_by(name: 'Users') }
|
||||||
|
let(:ticket) { create(:ticket, group: group) }
|
||||||
|
let(:agent) { User.find_by(login: 'agent1@example.com') }
|
||||||
|
|
||||||
|
def check_avatar(text, changed: true)
|
||||||
|
changed_class = changed ? 'changed' : 'not-changed'
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
expect(page).to have_css(".js-attributeBar .js-avatar .avatar--#{changed_class}", text: text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_taskbar_tab(ticket_id, title: nil, modified: false)
|
||||||
|
tab_data_key = "Ticket-#{ticket_id}"
|
||||||
|
|
||||||
|
if title
|
||||||
|
taskbar_tab = find(".tasks .task[data-key='#{tab_data_key}']")
|
||||||
|
expect(taskbar_tab).to have_css('.nav-tab-name', text: title)
|
||||||
|
end
|
||||||
|
|
||||||
|
if modified
|
||||||
|
expect(page).to have_css(".tasks .task[data-key='#{tab_data_key}'].is-modified")
|
||||||
|
else
|
||||||
|
expect(page).to have_no_css(".tasks .task[data-key='#{tab_data_key}'].is-modified")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when two different users are simultaneously in one ticket' do
|
||||||
|
before do
|
||||||
|
visit "#ticket/zoom/#{ticket.id}"
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
login(
|
||||||
|
username: agent.login,
|
||||||
|
password: 'test',
|
||||||
|
)
|
||||||
|
|
||||||
|
visit "#ticket/zoom/#{ticket.id}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'avatar from other user should be visible in ticket zoom' do
|
||||||
|
check_avatar('AT', changed: false)
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
check_avatar('TA', changed: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'check changes from the first user and added changes from the second user' do
|
||||||
|
within(:active_content) do
|
||||||
|
find('.js-textarea').send_keys('some note')
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-reset')
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: false)
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
check_avatar('TA', changed: true)
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
find('.js-textarea').send_keys('some other note')
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-reset')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: true)
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
within(:active_content) do
|
||||||
|
click '.js-attributeBar .js-submit'
|
||||||
|
|
||||||
|
expect(page).to have_no_css('.js-reset')
|
||||||
|
expect(page).to have_css('.article-content', text: 'some other note')
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('TA', changed: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: false)
|
||||||
|
check_taskbar_tab(ticket.id, title: ticket.title, modified: true)
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
expect(page).to have_css('.article-content', text: 'some other note')
|
||||||
|
|
||||||
|
click '.js-attributeBar .js-submit'
|
||||||
|
|
||||||
|
expect(page).to have_no_css('.js-reset')
|
||||||
|
expect(page).to have_css('.article-content', text: 'some note')
|
||||||
|
end
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
check_avatar('TA', changed: false)
|
||||||
|
|
||||||
|
expect(page).to have_css('.article-content', text: 'some note')
|
||||||
|
check_taskbar_tab(ticket.id, title: ticket.title, modified: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reload browsers and check if state is correct.
|
||||||
|
refresh
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
refresh
|
||||||
|
|
||||||
|
check_avatar('TA', changed: false)
|
||||||
|
expect(page).to have_no_css('.js-reset')
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: false)
|
||||||
|
expect(page).to have_no_css('.js-reset')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'check refresh for unsaved changes and reset after refresh' do
|
||||||
|
using_session(:second_browser) do
|
||||||
|
within(:active_content) do
|
||||||
|
find('.js-textarea').send_keys('some other note')
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-reset')
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('TA', changed: false)
|
||||||
|
|
||||||
|
# We need to wait for the auto save feature.
|
||||||
|
wait.until do
|
||||||
|
Taskbar.find_by(key: "Ticket-#{ticket.id}", user_id: agent.id).state_changed?
|
||||||
|
end
|
||||||
|
|
||||||
|
refresh
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: true)
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
refresh
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
click '.js-reset'
|
||||||
|
expect(page).to have_css('.js-textarea', text: '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
check_avatar('AT', changed: false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'change title with second user' do
|
||||||
|
find('.js-textarea').send_keys('some note')
|
||||||
|
|
||||||
|
using_session(:second_browser) do
|
||||||
|
find('.js-textarea').send_keys('some other note')
|
||||||
|
find('.js-objectTitle').set('TTTsome level 2 <b>subject</b> 123äöü')
|
||||||
|
|
||||||
|
# Click in the body field, to trigger the title update.
|
||||||
|
click '.js-textarea'
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-objectTitle', text: 'TTTsome level 2 <b>subject</b> 123äöü')
|
||||||
|
|
||||||
|
check_taskbar_tab(ticket.id, title: 'TTTsome level 2 <b>subject</b> 123äöü')
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-textarea', text: 'some other note')
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-objectTitle', text: 'TTTsome level 2 <b>subject</b> 123äöü')
|
||||||
|
expect(page).to have_css('.js-textarea', text: 'some note')
|
||||||
|
|
||||||
|
check_taskbar_tab(ticket.id, title: 'TTTsome level 2 <b>subject</b> 123äöü', modified: true)
|
||||||
|
|
||||||
|
# Refresh and check that modified flag is gone
|
||||||
|
refresh
|
||||||
|
check_taskbar_tab(ticket.id, title: 'TTTsome level 2 <b>subject</b> 123äöü', modified: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -54,6 +54,56 @@ RSpec.describe 'Ticket Update', type: :system do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when updating a ticket date attribute', db_strategy: :reset do
|
||||||
|
let!(:date_attribute) do
|
||||||
|
create_attribute(
|
||||||
|
:object_manager_attribute_date,
|
||||||
|
name: 'example_date',
|
||||||
|
screens: {
|
||||||
|
create: {
|
||||||
|
'ticket.agent' => {
|
||||||
|
shown: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
edit: {
|
||||||
|
'ticket.agent' => {
|
||||||
|
shown: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
view: {
|
||||||
|
'ticket.agent' => {
|
||||||
|
shown: true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data_option: {
|
||||||
|
'future' => true,
|
||||||
|
'past' => false,
|
||||||
|
'diff' => 0,
|
||||||
|
'null' => true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:ticket) { create(:ticket, group: group, "#{date_attribute.name}": '2018-02-28') }
|
||||||
|
|
||||||
|
it 'set date attribute to empty' do
|
||||||
|
visit "#ticket/zoom/#{ticket.id}"
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
check_date_field_value(date_attribute.name, '02/28/2018')
|
||||||
|
|
||||||
|
set_date_field_value(date_attribute.name, '')
|
||||||
|
|
||||||
|
click('.js-attributeBar .js-submit')
|
||||||
|
expect(page).to have_no_css('.js-submitDropdown .js-submit[disabled]', wait: 10)
|
||||||
|
|
||||||
|
ticket.reload
|
||||||
|
expect(ticket[date_attribute.name]).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when updating a ticket with macro' do
|
context 'when updating a ticket with macro' do
|
||||||
context 'when required tree_select field is present' do
|
context 'when required tree_select field is present' do
|
||||||
it 'performs no validation (#2492)', db_strategy: :reset do
|
it 'performs no validation (#2492)', db_strategy: :reset do
|
||||||
|
@ -251,6 +301,18 @@ RSpec.describe 'Ticket Update', type: :system do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when closing taskbar tab for ticket' do
|
||||||
|
it 'close task bar entry after some changes in ticket update form' do
|
||||||
|
visit "#ticket/zoom/#{ticket.id}"
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
find('.js-textarea').send_keys('some note')
|
||||||
|
end
|
||||||
|
|
||||||
|
taskbar_tab_close("Ticket-#{ticket.id}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when using text modules' do
|
context 'when using text modules' do
|
||||||
include_examples 'text modules', path: "#ticket/zoom/#{Ticket.first.id}"
|
include_examples 'text modules', path: "#ticket/zoom/#{Ticket.first.id}"
|
||||||
end
|
end
|
||||||
|
@ -258,4 +320,19 @@ RSpec.describe 'Ticket Update', type: :system do
|
||||||
context 'when using macros' do
|
context 'when using macros' do
|
||||||
include_examples 'macros', path: "#ticket/zoom/#{Ticket.first.id}"
|
include_examples 'macros', path: "#ticket/zoom/#{Ticket.first.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when group will be changed' do
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
let(:ticket) { create(:ticket, group: group, owner: user) }
|
||||||
|
|
||||||
|
it 'check that owner is resetet after group change' do
|
||||||
|
visit "#ticket/zoom/#{ticket.id}"
|
||||||
|
|
||||||
|
expect(page).to have_field('owner_id', with: user.id)
|
||||||
|
|
||||||
|
find('[name=group_id]').select '-'
|
||||||
|
|
||||||
|
expect(page).to have_field('owner_id', with: '')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
||||||
|
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class AgentTicketUpdate1Test < TestCase
|
|
||||||
def test_check_changes
|
|
||||||
@browser = browser_instance
|
|
||||||
login(
|
|
||||||
username: 'agent1@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all
|
|
||||||
|
|
||||||
# confirm on create
|
|
||||||
ticket_create(
|
|
||||||
data: {
|
|
||||||
customer: 'nico',
|
|
||||||
group: 'Users',
|
|
||||||
title: 'some changes',
|
|
||||||
body: 'some body 123äöü - changes',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
close_task(
|
|
||||||
data: {
|
|
||||||
title: 'some changes',
|
|
||||||
},
|
|
||||||
discard_changes: true,
|
|
||||||
)
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
# confirm on zoom
|
|
||||||
ticket_create(
|
|
||||||
data: {
|
|
||||||
customer: 'nico',
|
|
||||||
group: 'Users',
|
|
||||||
title: 'some changes',
|
|
||||||
body: 'some body 123äöü - changes',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
ticket_update(
|
|
||||||
data: {
|
|
||||||
body: 'some note',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
close_task(
|
|
||||||
data: {
|
|
||||||
title: 'some changes',
|
|
||||||
},
|
|
||||||
discard_changes: true,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,404 +0,0 @@
|
||||||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
||||||
|
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class AgentTicketUpdate2Test < TestCase
|
|
||||||
def test_work_with_two_browser_on_same_ticket_edit
|
|
||||||
browser1 = browser_instance
|
|
||||||
login(
|
|
||||||
browser: browser1,
|
|
||||||
username: 'admin@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all(browser: browser1)
|
|
||||||
|
|
||||||
browser2 = browser_instance
|
|
||||||
login(
|
|
||||||
browser: browser2,
|
|
||||||
username: 'agent1@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all(browser: browser2)
|
|
||||||
|
|
||||||
# create ticket
|
|
||||||
ticket1 = ticket_create(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
group: 'Users',
|
|
||||||
customer: 'nicole',
|
|
||||||
title: 'some level 3 <b>subject</b> 123äöü',
|
|
||||||
body: 'some level 3 <b>body</b> 123äöü',
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# open ticket in second browser
|
|
||||||
ticket_open_by_search(
|
|
||||||
browser: browser2,
|
|
||||||
number: ticket1[:number],
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some level 3 <b>body</b> 123äöü',
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# change edit screen in instance 1
|
|
||||||
ticket_update(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some level 3 <b>body</b> in instance 1',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# update ticket in instance 2
|
|
||||||
ticket_update(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: 'some level 3 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
click(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active .js-submit',
|
|
||||||
)
|
|
||||||
|
|
||||||
# discard changes should gone away
|
|
||||||
watch_for_disappear(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# check content and edit screen in instance 1
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some level 3 <b>body</b> in instance 2',
|
|
||||||
timeout: 1,
|
|
||||||
)
|
|
||||||
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some level 3 <b>body</b> in instance 1',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# update ticket in instance 1
|
|
||||||
click(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.active .js-submit',
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some level 3 <b>body</b> in instance 2',
|
|
||||||
)
|
|
||||||
sleep 2
|
|
||||||
match_not(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# check content in instance 2
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some level 3 <b>body</b> in instance 1',
|
|
||||||
)
|
|
||||||
|
|
||||||
# check content and edit screen in instance 1+2
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
match_not(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
match_not(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# reload instances, verify again
|
|
||||||
reload(
|
|
||||||
browser: browser1,
|
|
||||||
)
|
|
||||||
reload(
|
|
||||||
browser: browser2,
|
|
||||||
)
|
|
||||||
|
|
||||||
# check content and edit screen in instance 1+2
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
match_not(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
match_not(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# change form of ticket, reset, reload and verify in instance 2
|
|
||||||
ticket_update(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '22 some level 3 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
sleep 3
|
|
||||||
reload(
|
|
||||||
browser: browser2,
|
|
||||||
)
|
|
||||||
sleep 3
|
|
||||||
click(
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
browser: browser2,
|
|
||||||
)
|
|
||||||
sleep 4
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# change form of ticket in instance 2
|
|
||||||
ticket_update(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '22 some level 3 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
reload(
|
|
||||||
browser: browser2,
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '22 some level 3 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
task_type(
|
|
||||||
browser: browser2,
|
|
||||||
type: 'stayOnTab',
|
|
||||||
)
|
|
||||||
|
|
||||||
click(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active .js-submit',
|
|
||||||
)
|
|
||||||
|
|
||||||
# discard changes should gone away
|
|
||||||
watch_for_disappear(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-reset',
|
|
||||||
value: '(Discard your unsaved changes.|Verwerfen der)',
|
|
||||||
no_quote: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'AT', # agent1
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.content.active .js-attributeBar .js-avatar .avatar--not-changed',
|
|
||||||
value: 'TA', # master
|
|
||||||
)
|
|
||||||
|
|
||||||
# check if new article is empty
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: '22 some level 3 <b>body</b> in instance 2',
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,276 +0,0 @@
|
||||||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
||||||
|
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class AgentTicketUpdate3Test < TestCase
|
|
||||||
def test_work_with_two_browser_on_same_ticket
|
|
||||||
|
|
||||||
# work on one ticket with two browsers
|
|
||||||
browser1 = browser_instance
|
|
||||||
login(
|
|
||||||
browser: browser1,
|
|
||||||
username: 'admin@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all(browser: browser1)
|
|
||||||
|
|
||||||
browser2 = browser_instance
|
|
||||||
login(
|
|
||||||
browser: browser2,
|
|
||||||
username: 'agent1@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all(browser: browser2)
|
|
||||||
|
|
||||||
# create ticket
|
|
||||||
ticket1 = ticket_create(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
group: 'Users',
|
|
||||||
customer: 'nicole',
|
|
||||||
title: 'some level 2 <b>subject</b> 123äöü',
|
|
||||||
body: 'some level 2 <b>body</b> 123äöü',
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# open ticket in second browser
|
|
||||||
ticket_open_by_search(
|
|
||||||
browser: browser2,
|
|
||||||
number: ticket1[:number],
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some level 2 <b>body</b> 123äöü',
|
|
||||||
)
|
|
||||||
|
|
||||||
# set body in edit area in second
|
|
||||||
ticket_update(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
# set body in edit area in first
|
|
||||||
ticket_update(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 1',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
# change title in second browser
|
|
||||||
ticket_update(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject</b> 123äöü',
|
|
||||||
},
|
|
||||||
do_not_submit: true,
|
|
||||||
)
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
# verify title in second and first browser
|
|
||||||
verify_title(
|
|
||||||
browser: browser2,
|
|
||||||
value: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
verify_task(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
sleep 4
|
|
||||||
verify_title(
|
|
||||||
browser: browser1,
|
|
||||||
value: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
verify_task(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# verify text in input body, if still exists
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 1',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# set body in edit area in second
|
|
||||||
ticket_update(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some update 4711',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some update 4711',
|
|
||||||
)
|
|
||||||
verify_task(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# verify if text in input body is now empty
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# check if body is still in second browser
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# verify task
|
|
||||||
verify_task(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# reload instances, verify again
|
|
||||||
reload(
|
|
||||||
browser: browser1,
|
|
||||||
)
|
|
||||||
reload(
|
|
||||||
browser: browser2,
|
|
||||||
)
|
|
||||||
|
|
||||||
# wait till application become ready
|
|
||||||
sleep 8
|
|
||||||
verify_title(
|
|
||||||
browser: browser2,
|
|
||||||
value: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
verify_task(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: false, # modify was muted at reload ticket tab
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
verify_title(
|
|
||||||
browser: browser1,
|
|
||||||
value: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
)
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
verify_task(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# verify if update is on ticket in each browser
|
|
||||||
watch_for(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some update 4711',
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active div.ticket-article',
|
|
||||||
value: 'some update 4711',
|
|
||||||
)
|
|
||||||
|
|
||||||
# verify if text in input body is now empty
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# check if body is still in second browser
|
|
||||||
ticket_verify(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
body: 'some level 2 <b>body</b> in instance 2',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
# modify ticket again and erase modified via mouse click on .active.content
|
|
||||||
ticket_update(
|
|
||||||
browser: browser1,
|
|
||||||
data: {
|
|
||||||
body: 'some update 4711/2',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
sleep 4
|
|
||||||
verify_task(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
click(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.active.content',
|
|
||||||
)
|
|
||||||
sleep 4
|
|
||||||
verify_task(
|
|
||||||
browser: browser2,
|
|
||||||
data: {
|
|
||||||
title: 'TTTsome level 2 <b>subject<\/b> 123äöü',
|
|
||||||
modified: false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
||||||
|
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class AgentTicketUpdate4Test < TestCase
|
|
||||||
|
|
||||||
def test_update_date_object_for_ticket
|
|
||||||
|
|
||||||
@browser = browser_instance
|
|
||||||
login(
|
|
||||||
username: 'admin@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
tasks_close_all
|
|
||||||
|
|
||||||
# date object
|
|
||||||
object_manager_attribute_create(
|
|
||||||
data: {
|
|
||||||
name: 'date1',
|
|
||||||
display: "Date-#{SecureRandom.uuid}",
|
|
||||||
data_type: 'Date',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
css: '.content.active',
|
|
||||||
value: 'Database Update required',
|
|
||||||
)
|
|
||||||
|
|
||||||
click(css: '.content.active .tab-pane.active div.js-execute')
|
|
||||||
watch_for(
|
|
||||||
css: '.modal',
|
|
||||||
value: 'restart',
|
|
||||||
)
|
|
||||||
watch_for_disappear(
|
|
||||||
css: '.modal',
|
|
||||||
timeout: 240,
|
|
||||||
)
|
|
||||||
sleep 5
|
|
||||||
watch_for(
|
|
||||||
css: '.content.active',
|
|
||||||
)
|
|
||||||
|
|
||||||
# create new ticket
|
|
||||||
ticket = ticket_create(
|
|
||||||
data: {
|
|
||||||
customer: 'nico',
|
|
||||||
group: 'Users',
|
|
||||||
priority: '2 normal',
|
|
||||||
state: 'open',
|
|
||||||
title: 'ticket attribute test #1',
|
|
||||||
body: 'ticket attribute test #1',
|
|
||||||
},
|
|
||||||
custom_data_date: {
|
|
||||||
date1: '02/28/2018',
|
|
||||||
},
|
|
||||||
disable_group_check: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
ticket_open_by_search(
|
|
||||||
browser: @browser,
|
|
||||||
number: ticket[:number],
|
|
||||||
)
|
|
||||||
|
|
||||||
ticket_update(
|
|
||||||
data: {},
|
|
||||||
custom_data_date: {
|
|
||||||
date1: '',
|
|
||||||
},
|
|
||||||
)
|
|
||||||
click(css: '.content.active .js-submit')
|
|
||||||
|
|
||||||
match_not(
|
|
||||||
css: '.active .sidebar div[data-name="date1"] input[data-item="date"]',
|
|
||||||
value: '02/28/2018',
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,51 +0,0 @@
|
||||||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
||||||
|
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class AgentTicketUpdate5Test < TestCase
|
|
||||||
def test_check_changes
|
|
||||||
@browser = browser_instance
|
|
||||||
|
|
||||||
login(
|
|
||||||
username: 'agent1@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
|
|
||||||
# create ticket
|
|
||||||
|
|
||||||
ticket_create(
|
|
||||||
data: {
|
|
||||||
customer: 'Nico',
|
|
||||||
group: 'Users',
|
|
||||||
title: 'some changes',
|
|
||||||
body: 'some body 123äöü - changes',
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
select(
|
|
||||||
css: '.content.active .sidebar select[name="owner_id"]',
|
|
||||||
value: 'Agent 1 Test',
|
|
||||||
)
|
|
||||||
|
|
||||||
click(css: '.content.active .js-attributeBar .js-submit', wait: 2)
|
|
||||||
|
|
||||||
select(
|
|
||||||
css: '.content.active .sidebar select[name="group_id"]',
|
|
||||||
value: '-',
|
|
||||||
)
|
|
||||||
|
|
||||||
select(
|
|
||||||
css: '.content.active .sidebar select[name="group_id"]',
|
|
||||||
value: 'Users',
|
|
||||||
)
|
|
||||||
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
match(
|
|
||||||
css: '.content.active .sidebar select[name="owner_id"]',
|
|
||||||
value: '-'
|
|
||||||
)
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue