From 33f0082da6a71ec6fcd2c418ec915e183b816cac Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 23 Apr 2018 15:12:19 +0200 Subject: [PATCH] Fixed issue #1669 - Ticket templates disappear after logout/login in same browser session. --- .../app/controllers/widget/template.coffee | 32 +++--- .../app/models/_application_model.coffee | 6 +- .../app/views/widget/template.jst.eco | 10 +- script/build/test_slice_tests.sh | 6 ++ .../agent_ticket_create_template_test.rb | 97 +++++++++++++++++++ test/browser_test_helper.rb | 6 +- 6 files changed, 130 insertions(+), 27 deletions(-) create mode 100644 test/browser/agent_ticket_create_template_test.rb diff --git a/app/assets/javascripts/app/controllers/widget/template.coffee b/app/assets/javascripts/app/controllers/widget/template.coffee index 82e42f6bb..daa991e11 100644 --- a/app/assets/javascripts/app/controllers/widget/template.coffee +++ b/app/assets/javascripts/app/controllers/widget/template.coffee @@ -1,9 +1,9 @@ class App.WidgetTemplate extends App.Controller events: - 'click [data-type=template_save]': 'create' - 'click [data-type=template_select]': 'select' - 'click [data-type=template_delete]': 'delete' - 'click .templates-welcome .create': 'showManage' + 'click .templates-manage .js-save': 'create' + 'click .templates-manage .js-apply': 'select' + 'click .templates-manage .js-delete': 'delete' + 'click .templates-welcome .js-create': 'showManage' constructor: -> super @@ -15,12 +15,12 @@ class App.WidgetTemplate extends App.Controller render: => @configure_attributes = [ - { name: 'template_id', display: '', tag: 'select', multiple: false, null: true, nulloption: true, relation: 'Template', default: @template_id }, + { name: 'id', display: '', tag: 'select', multiple: false, null: true, nulloption: true, relation: 'Template', default: @id }, ] template = {} - if @template_id && App.Template.exists(@template_id) - template = App.Template.find(@template_id) + if @id && App.Template.exists(@id) + template = App.Template.find(@id) # insert data @html App.view('widget/template')( @@ -57,11 +57,11 @@ class App.WidgetTemplate extends App.Controller params = @formParam(e.target) # check if template is selected - return if !params['template_id'] + return if !params['id'] - template = App.Template.find(params['template_id']) + template = App.Template.find(params['id']) if confirm('Sure?') - @template_id = false + @id = false template.destroy() select: (e) => @@ -71,12 +71,12 @@ class App.WidgetTemplate extends App.Controller params = @formParam(e.target) # check if template is selected - return if !params['template_id'] + return if !params['id'] # remember template (to select it after rerender) - @template_id = params['template_id'] + @id = params['id'] - template = App.Template.find(params['template_id']) + template = App.Template.find(params['id']) App.Event.trigger 'ticket_create_rerender', template.attributes() create: (e) => @@ -85,7 +85,7 @@ class App.WidgetTemplate extends App.Controller # get params form = @formParam($(e.target).closest('.content').find('.ticket-create')) params = @formParam(e.target) - name = params['template_name'] + name = params['name'] return if !name template = App.Template.findByAttribute('name', name) @@ -93,7 +93,7 @@ class App.WidgetTemplate extends App.Controller template = new App.Template template.load( - name: params['template_name'] + name: params['name'] options: form ) @@ -107,7 +107,7 @@ class App.WidgetTemplate extends App.Controller ui = @ template.save( done: -> - ui.template_id = @id + ui.id = @id fail: => @log 'error', 'save failed!' diff --git a/app/assets/javascripts/app/models/_application_model.coffee b/app/assets/javascripts/app/models/_application_model.coffee index 141cb5ae1..ca9640fee 100644 --- a/app/assets/javascripts/app/models/_application_model.coffee +++ b/app/assets/javascripts/app/models/_application_model.coffee @@ -406,10 +406,12 @@ set new attributes of model (remove already available attributes) clear = true if param.clear is true || param.clear is false clear = param.clear - if !@initFetchActive + if !@initFetchActives && @count() is 0 @initFetchActive = true - @one 'refresh', (collection) -> + @one('refresh', (collection) => + @initFetchActive = false callback(collection) + ) @fetchFull( -> clear: clear diff --git a/app/assets/javascripts/app/views/widget/template.jst.eco b/app/assets/javascripts/app/views/widget/template.jst.eco index 85fef91e7..a1db2d637 100644 --- a/app/assets/javascripts/app/views/widget/template.jst.eco +++ b/app/assets/javascripts/app/views/widget/template.jst.eco @@ -5,18 +5,18 @@
- - + +

- +
- +
@@ -25,5 +25,5 @@

<%- @T('No template created yet.') %>

<%- @T('With templates you can pre-fill ticket attributes.') %>

<%- @T('Choose attributes and then save them as a new template.') %>

-

<%- @T('Save new template') %>

+

<%- @T('Save new template') %>

diff --git a/script/build/test_slice_tests.sh b/script/build/test_slice_tests.sh index 245e54777..ef81409d0 100755 --- a/script/build/test_slice_tests.sh +++ b/script/build/test_slice_tests.sh @@ -24,6 +24,7 @@ if [ "$LEVEL" == '1' ]; then rm test/browser/agent_ticket_attachment_test.rb rm test/browser/agent_ticket_auto_assignment_test.rb rm test/browser/agent_ticket_create_reset_customer_selection_test.rb + rm test/browser/agent_ticket_create_template_test.rb rm test/browser/agent_ticket_email_reply_keep_body_test.rb rm test/browser/agent_ticket_email_signature_test.rb rm test/browser/agent_ticket_link_test.rb @@ -88,6 +89,7 @@ elif [ "$LEVEL" == '2' ]; then rm test/browser/agent_ticket_attachment_test.rb rm test/browser/agent_ticket_auto_assignment_test.rb rm test/browser/agent_ticket_create_reset_customer_selection_test.rb + rm test/browser/agent_ticket_create_template_test.rb rm test/browser/agent_ticket_email_reply_keep_body_test.rb rm test/browser/agent_ticket_email_signature_test.rb rm test/browser/agent_ticket_link_test.rb @@ -152,6 +154,7 @@ elif [ "$LEVEL" == '3' ]; then # test/browser/agent_ticket_attachment_test.rb # test/browser/agent_ticket_auto_assignment_test.rb # test/browser/agent_ticket_create_reset_customer_selection_test.rb + # test/browser/agent_ticket_create_template_test.rb # test/browser/agent_ticket_email_reply_keep_body_test.rb # test/browser/agent_ticket_email_signature_test.rb # test/browser/agent_ticket_link_test.rb @@ -216,6 +219,7 @@ elif [ "$LEVEL" == '4' ]; then rm test/browser/agent_ticket_attachment_test.rb rm test/browser/agent_ticket_auto_assignment_test.rb rm test/browser/agent_ticket_create_reset_customer_selection_test.rb + rm test/browser/agent_ticket_create_template_test.rb rm test/browser/agent_ticket_email_reply_keep_body_test.rb rm test/browser/agent_ticket_email_signature_test.rb rm test/browser/agent_ticket_link_test.rb @@ -279,6 +283,7 @@ elif [ "$LEVEL" == '5' ]; then rm test/browser/agent_ticket_attachment_test.rb rm test/browser/agent_ticket_auto_assignment_test.rb rm test/browser/agent_ticket_create_reset_customer_selection_test.rb + rm test/browser/agent_ticket_create_template_test.rb rm test/browser/agent_ticket_email_reply_keep_body_test.rb rm test/browser/agent_ticket_email_signature_test.rb rm test/browser/agent_ticket_link_test.rb @@ -345,6 +350,7 @@ elif [ "$LEVEL" == '6' ]; then rm test/browser/agent_ticket_attachment_test.rb rm test/browser/agent_ticket_auto_assignment_test.rb rm test/browser/agent_ticket_create_reset_customer_selection_test.rb + rm test/browser/agent_ticket_create_template_test.rb rm test/browser/agent_ticket_email_reply_keep_body_test.rb rm test/browser/agent_ticket_email_signature_test.rb rm test/browser/agent_ticket_link_test.rb diff --git a/test/browser/agent_ticket_create_template_test.rb b/test/browser/agent_ticket_create_template_test.rb new file mode 100644 index 000000000..4111f7bf5 --- /dev/null +++ b/test/browser/agent_ticket_create_template_test.rb @@ -0,0 +1,97 @@ + +require 'browser_test_helper' + +# Regression test for UI bugfix +# https://github.com/zammad/zammad/issues/1669 +# +# After creating a new ticket template, logging out, and logging back in, +# ensure that the template selection menu still contains the new entry. +class AgentTicketCreateTemplateTest < TestCase + def test_ticket_template_creation + @browser = browser_instance + login( + username: 'agent1@example.com', + password: 'test', + url: browser_url, + ) + tasks_close_all() + + click( + css: 'a[href="#ticket/create"]' + ) + watch_for( + css: '.active .templates-welcome', + displayed: true + ) + + set( + css: 'input[name="title"]', + value: 'my first ticket' + ) + click( + css: '.active .templates-welcome .js-create' + ) + watch_for( + css: '.active .templates-manage', + displayed: true, + timeout: 3, + ) + exists_not( + css: '.active .templates-manage select[name="id"] > option:not([value=""])' + ) + + # save new template + set( + css: '.active .templates-manage .js-name', + value: 'test template' + ) + click( + css: '.active .templates-manage .js-save' + ) + exists( + css: '.active .templates-manage select[name="id"] > option:not([value=""])', + displayed: true + ) + + # check if relogin temlates are still available + logout + login( + username: 'agent1@example.com', + password: 'test', + ) + + click( + css: '.navigation > .tasks > a.task' + ) + exists( + css: '.active .templates-manage', + displayed: true + ) + exists( + css: '.active .templates-manage select[name="id"] > option:not([value=""])', + displayed: true + ) + + # apply new tempalte + tasks_close_all() + click( + css: 'a[href="#ticket/create"]' + ) + watch_for( + css: '.active .templates-manage', + displayed: true, + timeout: 3, + ) + select( + css: '.active .templates-manage select[name="id"]', + value: 'test template', + ) + click( + css: '.active .templates-manage .js-apply' + ) + exists( + css: '.active .newTicket input[name="title"]', + value: 'my first ticket' + ) + end +end diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 6d2f18a16..44fa08113 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -46,9 +46,7 @@ class TestCase < Test::Unit::TestCase end def browser_instance - if !@browsers - @browsers = {} - end + @browsers ||= {} if ENV['REMOTE_URL'].blank? local_browser = Selenium::WebDriver.for(browser.to_sym, profile: profile) @browsers[local_browser.hash] = local_browser @@ -138,7 +136,7 @@ class TestCase < Test::Unit::TestCase browser: browser1, username: 'someuser', password: 'somepassword', - url: 'some url', # optional + url: 'some url', # optional, in case of aleady opened brower a reload is done because url is called again remember_me: true, # optional auto_wizard: false, # optional, in case of auto wizard, skip login success: false, #optional