diff --git a/script/build/test_slice_tests.sh b/script/build/test_slice_tests.sh
index 2dd3a432f..cd4919851 100755
--- a/script/build/test_slice_tests.sh
+++ b/script/build/test_slice_tests.sh
@@ -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
diff --git a/spec/support/capybara/common_actions.rb b/spec/support/capybara/common_actions.rb
index 96b95b2a4..d9e640221 100644
--- a/spec/support/capybara/common_actions.rb
+++ b/spec/support/capybara/common_actions.rb
@@ -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|
diff --git a/spec/support/capybara/field_actions.rb b/spec/support/capybara/field_actions.rb
new file mode 100644
index 000000000..8c299a676
--- /dev/null
+++ b/spec/support/capybara/field_actions.rb
@@ -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
diff --git a/spec/system/chat_spec.rb b/spec/system/chat_spec.rb
index 69ba1bbac..3dbaad633 100644
--- a/spec/system/chat_spec.rb
+++ b/spec/system/chat_spec.rb
@@ -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' }
diff --git a/spec/system/ticket/create_spec.rb b/spec/system/ticket/create_spec.rb
index 6bf350adf..05a11b108 100644
--- a/spec/system/ticket/create_spec.rb
+++ b/spec/system/ticket/create_spec.rb
@@ -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)
diff --git a/spec/system/ticket/update/simultaneously_with_two_user_spec.rb b/spec/system/ticket/update/simultaneously_with_two_user_spec.rb
new file mode 100644
index 000000000..812af446a
--- /dev/null
+++ b/spec/system/ticket/update/simultaneously_with_two_user_spec.rb
@@ -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 subject 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 subject 123äöü')
+
+ check_taskbar_tab(ticket.id, title: 'TTTsome level 2 subject 123äöü')
+
+ expect(page).to have_css('.js-textarea', text: 'some other note')
+ end
+
+ expect(page).to have_css('.js-objectTitle', text: 'TTTsome level 2 subject 123äöü')
+ expect(page).to have_css('.js-textarea', text: 'some note')
+
+ check_taskbar_tab(ticket.id, title: 'TTTsome level 2 subject 123äöü', modified: true)
+
+ # Refresh and check that modified flag is gone
+ refresh
+ check_taskbar_tab(ticket.id, title: 'TTTsome level 2 subject 123äöü', modified: false)
+ end
+ end
+end
diff --git a/spec/system/ticket/update_spec.rb b/spec/system/ticket/update_spec.rb
index adc01f901..09cb8cfe1 100644
--- a/spec/system/ticket/update_spec.rb
+++ b/spec/system/ticket/update_spec.rb
@@ -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
diff --git a/test/browser/agent_ticket_update1_test.rb b/test/browser/agent_ticket_update1_test.rb
deleted file mode 100644
index 51f040ef6..000000000
--- a/test/browser/agent_ticket_update1_test.rb
+++ /dev/null
@@ -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
diff --git a/test/browser/agent_ticket_update2_test.rb b/test/browser/agent_ticket_update2_test.rb
deleted file mode 100644
index 258049755..000000000
--- a/test/browser/agent_ticket_update2_test.rb
+++ /dev/null
@@ -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 subject 123äöü',
- body: 'some level 3 body 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 body 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 body 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 body 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 body in instance 2',
- timeout: 1,
- )
-
- ticket_verify(
- browser: browser1,
- data: {
- body: 'some level 3 body 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 body 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 body 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 body 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 body 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 body 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 body in instance 2',
- )
- end
-end
diff --git a/test/browser/agent_ticket_update3_test.rb b/test/browser/agent_ticket_update3_test.rb
deleted file mode 100644
index 7ddb53545..000000000
--- a/test/browser/agent_ticket_update3_test.rb
+++ /dev/null
@@ -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 subject 123äöü',
- body: 'some level 2 body 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 body 123äöü',
- )
-
- # set body in edit area in second
- ticket_update(
- browser: browser2,
- data: {
- body: 'some level 2 body in instance 2',
- },
- do_not_submit: true,
- )
-
- # set body in edit area in first
- ticket_update(
- browser: browser1,
- data: {
- body: 'some level 2 body in instance 1',
- },
- do_not_submit: true,
- )
-
- # change title in second browser
- ticket_update(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject 123äöü',
- },
- do_not_submit: true,
- )
- sleep 2
-
- # verify title in second and first browser
- verify_title(
- browser: browser2,
- value: 'TTTsome level 2 subject<\/b> 123äöü',
- )
- ticket_verify(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- },
- )
- verify_task(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- modified: false,
- }
- )
-
- sleep 4
- verify_title(
- browser: browser1,
- value: 'TTTsome level 2 subject<\/b> 123äöü',
- )
- ticket_verify(
- browser: browser1,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- },
- )
- verify_task(
- browser: browser1,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- modified: true,
- }
- )
-
- # verify text in input body, if still exists
- ticket_verify(
- browser: browser1,
- data: {
- body: 'some level 2 body in instance 1',
- },
- )
- ticket_verify(
- browser: browser2,
- data: {
- body: 'some level 2 body 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 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 body in instance 2',
- },
- )
-
- # verify task
- verify_task(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 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 subject<\/b> 123äöü',
- )
- ticket_verify(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- },
- )
- verify_task(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- modified: false, # modify was muted at reload ticket tab
- }
- )
-
- verify_title(
- browser: browser1,
- value: 'TTTsome level 2 subject<\/b> 123äöü',
- )
- ticket_verify(
- browser: browser1,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- },
- )
- verify_task(
- browser: browser1,
- data: {
- title: 'TTTsome level 2 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 body 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 subject<\/b> 123äöü',
- modified: true,
- }
- )
- click(
- browser: browser2,
- css: '.active.content',
- )
- sleep 4
- verify_task(
- browser: browser2,
- data: {
- title: 'TTTsome level 2 subject<\/b> 123äöü',
- modified: false,
- }
- )
- end
-end
diff --git a/test/browser/agent_ticket_update4_test.rb b/test/browser/agent_ticket_update4_test.rb
deleted file mode 100644
index f2bbaaa1a..000000000
--- a/test/browser/agent_ticket_update4_test.rb
+++ /dev/null
@@ -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
diff --git a/test/browser/agent_ticket_update5_test.rb b/test/browser/agent_ticket_update5_test.rb
deleted file mode 100644
index f2cd697f7..000000000
--- a/test/browser/agent_ticket_update5_test.rb
+++ /dev/null
@@ -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