Maintenance: Port agent ticket update tests to capybara.

This commit is contained in:
Dominik Klein 2021-09-27 12:49:55 +02:00
parent 1b3530f2ae
commit 63335652cb
12 changed files with 326 additions and 897 deletions

View file

@ -41,11 +41,6 @@ if [ "$LEVEL" == '1' ]; then
rm test/browser/agent_ticket_task_changed_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_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_and_reload_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
# test/browser/agent_ticket_text_module_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
# test/browser/agent_ticket_update_and_reload_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
rm test/browser/agent_ticket_text_module_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_and_reload_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_text_module_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_and_reload_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_text_module_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_and_reload_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_text_module_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_and_reload_test.rb
rm test/browser/agent_ticket_zoom_hide_test.rb

View file

@ -275,7 +275,6 @@ module CommonActions
#
# @example
# popover_on_hover(page.find('button.hover_me'))
#
def popover_on_hover(element, wait_for_popover_killer: true)
# wait for popover killer to pass
sleep 3 if wait_for_popover_killer
@ -294,6 +293,30 @@ module CommonActions
page.execute_script("document.querySelector('#{css_selector}').scrollIntoView(#{position == :top})")
sleep 0.3
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
RSpec.configure do |config|

View 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

View file

@ -3,7 +3,6 @@
require 'rails_helper'
RSpec.describe 'Chat Handling', type: :system do
let(:admin) { create(:admin) }
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_type) { 'znuny' }

View file

@ -471,6 +471,18 @@ RSpec.describe 'Ticket Create', type: :system do
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
before do
create(:customer, active: true)

View 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

View file

@ -54,6 +54,56 @@ RSpec.describe 'Ticket Update', type: :system do
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 required tree_select field is present' do
it 'performs no validation (#2492)', db_strategy: :reset do
@ -251,6 +301,18 @@ RSpec.describe 'Ticket Update', type: :system do
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
include_examples 'text modules', path: "#ticket/zoom/#{Ticket.first.id}"
end
@ -258,4 +320,19 @@ RSpec.describe 'Ticket Update', type: :system do
context 'when using macros' do
include_examples 'macros', path: "#ticket/zoom/#{Ticket.first.id}"
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

View file

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

View file

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

View file

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

View file

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

View file

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