diff --git a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee index 0967cb093..f02fa22ae 100644 --- a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee @@ -1479,10 +1479,10 @@ class ArticleView extends App.Controller e.preventDefault() # get reference article - article_id = $(e.target).parents('[data-id]').data('id') - article = App.TicketArticle.fullLocal( article_id ) - type = App.TicketArticleType.find( article.type_id ) - customer = App.User.find( article.created_by_id ) + article_id = $(e.target).parents('[data-id]').data('id') + article = App.TicketArticle.fullLocal( article_id ) + type = App.TicketArticleType.find( article.type_id ) + customer = App.User.find( article.created_by_id ) @ui.el.find('.article-add').ScrollTo() @@ -1511,7 +1511,8 @@ class ArticleView extends App.Controller to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid articleNew.to = to - else if type.name is 'email' + else if type.name is 'email' || type.name is 'phone' || type.name is 'web' + if article.sender.name is 'Agent' articleNew.to = article.to else @@ -1655,22 +1656,28 @@ class Article extends App.Controller ] #if @article.type.name is 'note' # actions.push [] - if @article.type.name is 'email' + if @article.type.name is 'email' || @article.type.name is 'phone' || @article.type.name is 'web' actions.push { name: 'reply' type: 'reply' href: '#' } recipients = [] - if @article.to - localRecipients = emailAddresses.parseAddressList(@article.to) - if localRecipients - recipients = recipients.concat localRecipients + if @article.sender.name is 'Agent' + if @article.to + localRecipients = emailAddresses.parseAddressList(@article.to) + if localRecipients + recipients = recipients.concat localRecipients + else + if @article.from + localRecipients = emailAddresses.parseAddressList(@article.from) + if localRecipients + recipients = recipients.concat localRecipients if @article.cc localRecipients = emailAddresses.parseAddressList(@article.cc) if localRecipients recipients = recipients.concat localRecipients - if recipients.length > 0 + if recipients.length > 1 actions.push { name: 'reply all' type: 'replyAll' diff --git a/app/assets/javascripts/app/views/ticket_zoom/article_view.jst.eco b/app/assets/javascripts/app/views/ticket_zoom/article_view.jst.eco index bbd619500..dd0660010 100644 --- a/app/assets/javascripts/app/views/ticket_zoom/article_view.jst.eco +++ b/app/assets/javascripts/app/views/ticket_zoom/article_view.jst.eco @@ -86,7 +86,7 @@ <% if article.actions: %>
-
+
<% for action in article.actions: %> <%- @T( action.name ) %> diff --git a/test/browser/agent_ticket_actions_level5_test.rb b/test/browser/agent_ticket_actions_level5_test.rb new file mode 100644 index 000000000..0fa2cb90b --- /dev/null +++ b/test/browser/agent_ticket_actions_level5_test.rb @@ -0,0 +1,362 @@ +# encoding: utf-8 +require 'browser_test_helper' + +class AgentTicketActionLevel5Test < TestCase + def test_agent_signature_check + suffix = rand(99999999999999999).to_s + signature_name1 = 'sig name 1 äöüß ' + suffix + signature_body1 = "--\nsig body 1 äöüß " + suffix + signature_name2 = 'sig name 2 äöüß ' + suffix + signature_body2 = "--\nsig body 2 äöüß " + suffix + group_name1 = "group name 1 " + suffix + group_name2 = "group name 2 " + suffix + group_name3 = "group name 3 " + suffix + + tests = [ + { + :name => 'create groups and signatures', + :action => [ + + { + :execute => 'close_all_tasks', + }, + + # create signatures + { + :execute => 'create_signature', + :name => signature_name1, + :body => signature_body1, + }, + { + :execute => 'create_signature', + :name => signature_name2, + :body => signature_body2, + }, + + # create groups + { + :execute => 'create_group', + :name => group_name1, + :signature => signature_name1, + :member => [ + 'master@example.com' + ], + }, + { + :execute => 'create_group', + :name => group_name2, + :signature => signature_name2, + :member => [ + 'master@example.com' + ], + }, + { + :execute => 'create_group', + :name => group_name3, + :member => [ + 'master@example.com' + ], + }, + ], + }, + { + :name => 'check signature in new ticket', + :action => [ + + # reload instances to get new group permissions + { + :execute => 'reload', + }, + + { + :execute => 'create_ticket', + :group => 'Users', + :subject => 'some subject 4 - 123äöü', + :body => 'some body 4 - 123äöü', + :do_not_submit => true, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # select group + { + :execute => 'select', + :css => '.active [name="group_id"]', + :value => group_name1, + }, + + # select group + { + :execute => 'select', + :css => '.active [name="group_id"]', + :value => group_name1, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => false, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + # select create channel + { + :execute => 'click', + :css => '.active [data-type="email-out"]', + }, + + # select group + { + :execute => 'select', + :css => '.active select[name="group_id"]', + :value => group_name1, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => true, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + # select group + { + :execute => 'select', + :css => '.active select[name="group_id"]', + :value => group_name2, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => false, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => true, + }, + + # select group + { + :execute => 'select', + :css => '.active select[name="group_id"]', + :value => group_name3, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => false, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + + # select group + { + :execute => 'select', + :css => '.active select[name="group_id"]', + :value => group_name1, + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => true, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + # select create channel + { + :execute => 'click', + :css => '.active [data-type="phone-out"]', + }, + + # check content + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => 'some body 4', + :no_quote => true, + :match_result => true, + }, + + # check signature + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => false, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + ], + }, + { + :name => 'check signature in zoom ticket', + :action => [ + + { + :execute => 'create_ticket', + :group => group_name1, + :subject => 'some subject 5 - 123äöü', + :body => 'some body 5 - 123äöü', + }, + { + :execute => 'wait', + :value => 3, + }, + + # execute reply + { + :execute => 'click', + :css => '.active [data-type="reply"]', + }, + + # check if signature exists + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => true, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + # discard changes + { + :execute => 'click', + :css => '.active .js-reset', + }, + { + :execute => 'wait', + :value => 3, + }, + + # check if signature exists + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + :match_result => false, + }, + { + :execute => 'match', + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + :match_result => false, + }, + + ], + }, + ] + browser_signle_test_with_login(tests, { :username => 'master@example.com' }) + end +end \ No newline at end of file diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 271a741f9..536a02558 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -30,8 +30,12 @@ class TestCase < Test::Unit::TestCase end caps = Selenium::WebDriver::Remote::Capabilities.send( browser ) - caps.platform = ENV['BROWSER_OS'] || 'Windows 2008' - caps.version = ENV['BROWSER_VERSION'] || '8' + if ENV['BROWSER_OS'] + caps.platform = ENV['BROWSER_OS'] + end + if ENV['BROWSER_VERSION'] + caps.version = ENV['BROWSER_VERSION'] + end local_browser = Selenium::WebDriver.for( :remote, :url => ENV['REMOTE_URL'], @@ -291,7 +295,6 @@ class TestCase < Test::Unit::TestCase assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" ) return elsif action[:execute] == 'create_user' - instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click sleep 2 @@ -329,6 +332,82 @@ class TestCase < Test::Unit::TestCase assert( true, "(#{test[:name]}) user creation failed" ) return + elsif action[:execute] == 'create_signature' + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#channels/email"]' } )[0].click + instance.find_elements( { :css => 'a[href="#c-signature"]' } )[0].click + sleep 8 + instance.find_elements( { :css => '#content #c-signature a[data-type="new"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] + element.clear + element.send_keys( action[:name] ) + element = instance.find_elements( { :css => '.modal textarea[name=body]' } )[0] + element.clear + element.send_keys( action[:body] ) + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + (1..12).each {|loop| + element = instance.find_elements( { :css => 'body' } )[0] + text = element.text + if text =~ /#{Regexp.quote(action[:name])}/ + assert( true, "(#{test[:name]}) signature created" ) + return + end + sleep 1 + } + assert( true, "(#{test[:name]}) signature creation failed" ) + return + + elsif action[:execute] == 'create_group' + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#manage/groups"]' } )[0].click + sleep 2 + instance.find_elements( { :css => 'a[data-type="new"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] + element.clear + element.send_keys( action[:name] ) + element = instance.find_elements( { :css => '.modal select[name="email_address_id"]' } )[0] + dropdown = Selenium::WebDriver::Support::Select.new(element) + dropdown.select_by( :index, 1 ) + #dropdown.select_by( :text, action[:group]) + if action[:signature] + element = instance.find_elements( { :css => '.modal select[name="signature_id"]' } )[0] + dropdown = Selenium::WebDriver::Support::Select.new(element) + dropdown.select_by( :text, action[:signature]) + end + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + (1..12).each {|loop| + element = instance.find_elements( { :css => 'body' } )[0] + text = element.text + if text =~ /#{Regexp.quote(action[:name])}/ + assert( true, "(#{test[:name]}) group created" ) + + # add member + if action[:member] + action[:member].each {|login| + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '#content [name="search"]' } )[0] + element.clear + element.send_keys( login ) + sleep 2 + #instance.find_elements( { :css => '#content table [data-id]' } )[0].click + instance.execute_script( '$("#content table [data-id] td").first().click()' ) + sleep 2 + #instance.find_elements( { :css => 'label:contains(" ' + action[:name] + '")' } )[0].click + instance.execute_script( '$(\'label:contains(" ' + action[:name] + '")\').first().click()' ) + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + } + end + return + end + sleep 1 + } + assert( true, "(#{test[:name]}) group creation failed" ) + return + elsif action[:execute] == 'verify_task_attributes' if action[:title] text = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip