diff --git a/app/assets/javascripts/app/controllers/_application_controller.coffee b/app/assets/javascripts/app/controllers/_application_controller.coffee
index b560b78c1..9f4df144b 100644
--- a/app/assets/javascripts/app/controllers/_application_controller.coffee
+++ b/app/assets/javascripts/app/controllers/_application_controller.coffee
@@ -10,7 +10,7 @@ class App.Controller extends Spine.Controller
super
# generate controllerId
- @controllerId = 'controller-' + new Date().getTime() + '-' + Math.floor( Math.random() * 999999 )
+ @controllerId = 'controller-' + new Date().getTime() + '-' + Math.floor(Math.random() * 999999)
# apply to release controller on dom remove
@el.on('remove', @releaseController)
@@ -84,7 +84,7 @@ class App.Controller extends Spine.Controller
# add @title methode to set title
title: (name, translate = false) ->
-# $('html head title').html( @Config.get(product_name) + ' - ' + App.i18n.translateInline(name) )
+# $('html head title').html(@Config.get(product_name) + ' - ' + App.i18n.translateInline(name))
title = name
if translate
title = App.i18n.translatePlain(name)
@@ -92,9 +92,9 @@ class App.Controller extends Spine.Controller
copyToClipboard: (text) ->
if window.clipboardData # IE
- window.clipboardData.setData( 'Text', text )
+ window.clipboardData.setData('Text', text)
else
- window.prompt( 'Copy to clipboard: Ctrl+C, Enter', text )
+ window.prompt('Copy to clipboard: Ctrl+C, Enter', text)
# disable all delay's and interval's
disconnectClient: ->
@@ -238,11 +238,11 @@ class App.Controller extends Spine.Controller
currentVal = item.text()
ui.frontendTimeUpdateItem(item, currentVal)
)
- App.Interval.set( update, 61000, 'frontendTimeUpdate', 'ui' )
+ App.Interval.set(update, 61000, 'frontendTimeUpdate', 'ui')
frontendTimeUpdateItem: (item, currentVal) =>
timestamp = item.data('time')
- time = @humanTime( timestamp, item.hasClass('escalation') )
+ time = @humanTime(timestamp, item.hasClass('escalation'))
# only do dom updates on changes
return if time is currentVal
diff --git a/app/assets/javascripts/app/controllers/ticket_zoom.coffee b/app/assets/javascripts/app/controllers/ticket_zoom.coffee
index 8713e705c..35600e41b 100644
--- a/app/assets/javascripts/app/controllers/ticket_zoom.coffee
+++ b/app/assets/javascripts/app/controllers/ticket_zoom.coffee
@@ -126,10 +126,11 @@ class App.TicketZoom extends App.Controller
changed: =>
return false if !@ticket
- formCurrent = @formParam( @el.find('.edit') )
- ticket = App.Ticket.find(@ticket_id).attributes()
- modelDiff = App.Utils.formDiff(formCurrent, ticket)
+ currentParams = @formCurrent()
+ currentStore = @currentStore()
+ modelDiff = @formDiff(currentParams, currentStore)
return false if !modelDiff || _.isEmpty(modelDiff)
+ return false if _.isEmpty(modelDiff.ticket) && _.isEmpty(modelDiff.article)
return true
release: =>
@@ -412,51 +413,62 @@ class App.TicketZoom extends App.Controller
if !@autosaveLast
@autosaveLast = @taskGet()
update = =>
- #console.log('AR', @ticket_id, @ticket, @formParam( @el.find('.article-add') ) )
return if !@ticket
- currentStoreTicket = @ticket.attributes()
- delete currentStoreTicket.article
- currentStore =
- ticket: currentStoreTicket
- article:
- to: ''
- cc: ''
- type: 'note'
- body: ''
- internal: ''
- in_reply_to: ''
- currentParams =
- ticket: @formParam( @el.find('.edit') )
- article: @formParam( @el.find('.article-add') )
+ currentParams = @formCurrent()
- # add attachments if exist
- attachmentCount = @$('.article-add .textBubble .attachments .attachment').length
- if attachmentCount > 0
- currentParams.article.attachments = true
- else
- delete currentParams.article.attachments
+ # check changed between last autosave
+ sameAsLastSave = _.isEqual(currentParams, @autosaveLast)
+ return if sameAsLastSave
+ @autosaveLast = clone(currentParams)
- #console.log('lll', currentStore)
- # remove not needed attributes
- delete currentParams.article.form_id
+ # update changes in ui
+ currentStore = @currentStore()
+ modelDiff = @formDiff(currentParams, currentStore)
+ @markFormDiff(modelDiff)
+ @taskUpdateAll(modelDiff)
- # get diff of model
- modelDiff =
- ticket: App.Utils.formDiff( currentParams.ticket, currentStore.ticket )
- article: App.Utils.formDiff( currentParams.article, currentStore.article )
- #console.log('modelDiff', modelDiff)
-
- # get diff of last save
- changedBetweenLastSave = _.isEqual(currentParams, @autosaveLast)
- if !changedBetweenLastSave
- #console.log('model DIFF ', modelDiff)
-
- @autosaveLast = clone(currentParams)
- @markFormDiff(modelDiff)
-
- @taskUpdateAll(modelDiff)
@interval(update, 2800, 'autosave')
+ currentStore: =>
+ return if !@ticket
+ currentStoreTicket = @ticket.attributes()
+ delete currentStoreTicket.article
+ currentStore =
+ ticket: currentStoreTicket
+ article:
+ to: ''
+ cc: ''
+ type: 'note'
+ body: ''
+ internal: ''
+ in_reply_to: ''
+ currentStore
+
+ formCurrent: =>
+ currentParams =
+ ticket: @formParam(@el.find('.edit'))
+ article: @formParam(@el.find('.article-add'))
+
+ # add attachments if exist
+ attachmentCount = @$('.article-add .textBubble .attachments .attachment').length
+ if attachmentCount > 0
+ currentParams.article.attachments = true
+ else
+ delete currentParams.article.attachments
+
+ # remove not needed attributes
+ delete currentParams.article.form_id
+ currentParams
+
+ formDiff: (currentParams, currentStore) ->
+
+ # get diff of model
+ modelDiff =
+ ticket: App.Utils.formDiff(currentParams.ticket, currentStore.ticket)
+ article: App.Utils.formDiff(currentParams.article, currentStore.article)
+
+ modelDiff
+
markFormDiff: (diff = {}) =>
ticketForm = @$('.edit')
ticketSidebar = @$('.tabsSidebar-tab[data-tab="ticket"]')
diff --git a/app/assets/javascripts/app/controllers/widget/online_notification.coffee b/app/assets/javascripts/app/controllers/widget/online_notification.coffee
index d70387248..5fdb749f3 100644
--- a/app/assets/javascripts/app/controllers/widget/online_notification.coffee
+++ b/app/assets/javascripts/app/controllers/widget/online_notification.coffee
@@ -98,10 +98,10 @@ class App.OnlineNotificationWidget extends App.Controller
counterUpdate: (count) =>
if !count
- @el.find('.js-counter').text('')
+ @$('.js-counter').text('')
return
- @el.find('.js-counter').text(count)
+ @$('.js-counter').text(count)
markAllAsRead: =>
@counterUpdate(0)
@@ -109,7 +109,7 @@ class App.OnlineNotificationWidget extends App.Controller
id: 'markAllAsRead'
type: 'POST'
url: @apiPath + '/online_notifications/mark_all_as_read'
- data: JSON.stringify( '' )
+ data: JSON.stringify('')
processData: true
)
@@ -170,7 +170,7 @@ class App.OnlineNotificationWidget extends App.Controller
# update title
$('.js-notificationsContainer .popover-title').html(
- App.i18n.translateInline( 'Notifications' ) + " #{counter}"
+ App.i18n.translateInline('Notifications') + " #{counter}"
)
# show mark all as read if needed
diff --git a/test/browser/agent_ticket_actions_level0_test.rb b/test/browser/agent_ticket_actions_level0_test.rb
index 39ca9e073..3abc0443e 100644
--- a/test/browser/agent_ticket_actions_level0_test.rb
+++ b/test/browser/agent_ticket_actions_level0_test.rb
@@ -53,7 +53,7 @@ class AgentTicketActionLevel0Test < TestCase
css: '.active div[data-name=body]',
value: 'some content' + random,
)
- tasks_close_all( discard_changes: true )
+ tasks_close_all()
# test with two browser windows
random = 'text_II_module_test_' + rand(99_999_999).to_s
diff --git a/test/browser/agent_ticket_actions_level2_test.rb b/test/browser/agent_ticket_actions_level2_test.rb
index 0f162aec5..8e5063bf9 100644
--- a/test/browser/agent_ticket_actions_level2_test.rb
+++ b/test/browser/agent_ticket_actions_level2_test.rb
@@ -13,7 +13,7 @@ class AgentTicketActionsLevel2Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser1 )
+ tasks_close_all(browser: browser1)
browser2 = browser_instance
login(
@@ -22,7 +22,7 @@ class AgentTicketActionsLevel2Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser2 )
+ tasks_close_all(browser: browser2)
# create ticket
ticket1 = ticket_create(
diff --git a/test/browser/agent_ticket_actions_level3_test.rb b/test/browser/agent_ticket_actions_level3_test.rb
index a421e9d88..3552974f3 100644
--- a/test/browser/agent_ticket_actions_level3_test.rb
+++ b/test/browser/agent_ticket_actions_level3_test.rb
@@ -2,6 +2,57 @@
require 'browser_test_helper'
class AgentTicketActionsLevel3Test < 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
+ ticket1 = 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
+
def test_work_with_two_browser_on_same_ticket_edit
browser1 = browser_instance
@@ -11,7 +62,7 @@ class AgentTicketActionsLevel3Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser1 )
+ tasks_close_all(browser: browser1)
browser2 = browser_instance
login(
@@ -20,7 +71,7 @@ class AgentTicketActionsLevel3Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser2 )
+ tasks_close_all(browser: browser2)
# create ticket
ticket1 = ticket_create(
@@ -52,6 +103,13 @@ class AgentTicketActionsLevel3Test < TestCase
},
do_not_submit: true,
)
+ sleep 6
+ watch_for(
+ browser: browser1,
+ css: '.content.active .js-reset',
+ value: '(Discard your unsaved changes.|Verwerfen der)',
+ no_quote: true,
+ )
# update ticket in instance 2
ticket_update(
@@ -61,6 +119,13 @@ class AgentTicketActionsLevel3Test < TestCase
},
do_not_submit: true,
)
+ sleep 6
+ watch_for(
+ browser: browser2,
+ css: '.content.active .js-reset',
+ value: '(Discard your unsaved changes.|Verwerfen der)',
+ no_quote: true,
+ )
click(
browser: browser2,
diff --git a/test/browser/agent_ticket_overview_level1_test.rb b/test/browser/agent_ticket_overview_level1_test.rb
index a98a6c34d..fbabbebc7 100644
--- a/test/browser/agent_ticket_overview_level1_test.rb
+++ b/test/browser/agent_ticket_overview_level1_test.rb
@@ -13,7 +13,7 @@ class AgentTicketOverviewLevel1Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser1 )
+ tasks_close_all(browser: browser1)
browser2 = browser_instance
login(
@@ -22,7 +22,7 @@ class AgentTicketOverviewLevel1Test < TestCase
password: 'test',
url: browser_url,
)
- tasks_close_all( browser: browser2 )
+ tasks_close_all(browser: browser2)
# create new overview
overview_create(
diff --git a/test/browser/agent_user_manage_test.rb b/test/browser/agent_user_manage_test.rb
index 82521be00..c6a2ad9c1 100644
--- a/test/browser/agent_user_manage_test.rb
+++ b/test/browser/agent_user_manage_test.rb
@@ -73,7 +73,7 @@ class AgentUserManageTest < TestCase
sleep 4
# call new ticket screen again
- tasks_close_all( discard_changes: 1 )
+ tasks_close_all()
click( css: 'a[href="#new"]' )
click( css: 'a[href="#ticket/create"]' )
diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb
index 6a49a6266..b4053376c 100644
--- a/test/browser_test_helper.rb
+++ b/test/browser_test_helper.rb
@@ -933,7 +933,7 @@ class TestCase < Test::Unit::TestCase
=end
- def open_task(params = {}, _fallback = false)
+ def open_task(params = {})
switch_window_focus(params)
log('open_task', params)
@@ -949,6 +949,44 @@ class TestCase < Test::Unit::TestCase
true
end
+=begin
+
+ close_task(
+ browser: browser1,
+ data: {
+ title: 'some title',
+ },
+ discard_changes: true,
+ )
+
+=end
+
+ def close_task(params = {})
+ switch_window_focus(params)
+ log('close_task', params)
+
+ instance = params[:browser] || @browser
+ data = params[:data]
+
+ element = instance.find_elements(partial_link_text: data[:title])[0]
+ if !element
+ screenshot(browser: instance, comment: 'close_task_failed')
+ fail "no task with title '#{data[:title]}' found"
+ end
+
+ instance.mouse.move_to(element)
+ sleep 0.1
+ instance.execute_script("$('.navigation .tasks .task:contains(\"#{data[:title]}\") .js-close').click()")
+
+ # accept task close warning
+ if params[:discard_changes]
+ sleep 1
+ instance.find_elements(css: '.modal button.js-submit')[0].click
+ end
+
+ true
+ end
+
=begin
file_upload(
@@ -1122,7 +1160,6 @@ wait untill text in selector disabppears
tasks_close_all(
browser: browser1,
- discard_changes: true,
)
=end
@@ -1144,8 +1181,8 @@ wait untill text in selector disabppears
click_element.click
# accept task close warning
- if params[:discard_changes]
- sleep 1
+ if instance.find_elements(css: '.modal button.js-submit')[0]
+ sleep 0.5
instance.find_elements(css: '.modal button.js-submit')[0].click
end
end