Added browser tests for signature.

This commit is contained in:
Martin Edenhofer 2015-01-23 23:24:03 +01:00
parent 30042e451d
commit a18157ba4d
4 changed files with 463 additions and 15 deletions

View file

@ -1479,10 +1479,10 @@ class ArticleView extends App.Controller
e.preventDefault() e.preventDefault()
# get reference article # get reference article
article_id = $(e.target).parents('[data-id]').data('id') article_id = $(e.target).parents('[data-id]').data('id')
article = App.TicketArticle.fullLocal( article_id ) article = App.TicketArticle.fullLocal( article_id )
type = App.TicketArticleType.find( article.type_id ) type = App.TicketArticleType.find( article.type_id )
customer = App.User.find( article.created_by_id ) customer = App.User.find( article.created_by_id )
@ui.el.find('.article-add').ScrollTo() @ui.el.find('.article-add').ScrollTo()
@ -1511,7 +1511,8 @@ class ArticleView extends App.Controller
to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid
articleNew.to = to 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' if article.sender.name is 'Agent'
articleNew.to = article.to articleNew.to = article.to
else else
@ -1655,22 +1656,28 @@ class Article extends App.Controller
] ]
#if @article.type.name is 'note' #if @article.type.name is 'note'
# actions.push [] # 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 { actions.push {
name: 'reply' name: 'reply'
type: 'reply' type: 'reply'
href: '#' href: '#'
} }
recipients = [] recipients = []
if @article.to if @article.sender.name is 'Agent'
localRecipients = emailAddresses.parseAddressList(@article.to) if @article.to
if localRecipients localRecipients = emailAddresses.parseAddressList(@article.to)
recipients = recipients.concat localRecipients if localRecipients
recipients = recipients.concat localRecipients
else
if @article.from
localRecipients = emailAddresses.parseAddressList(@article.from)
if localRecipients
recipients = recipients.concat localRecipients
if @article.cc if @article.cc
localRecipients = emailAddresses.parseAddressList(@article.cc) localRecipients = emailAddresses.parseAddressList(@article.cc)
if localRecipients if localRecipients
recipients = recipients.concat localRecipients recipients = recipients.concat localRecipients
if recipients.length > 0 if recipients.length > 1
actions.push { actions.push {
name: 'reply all' name: 'reply all'
type: 'replyAll' type: 'replyAll'

View file

@ -86,7 +86,7 @@
<% if article.actions: %> <% if article.actions: %>
<div> <div>
<div class="article-actions horizontal stretch"> <div class="article-content article-actions horizontal stretch">
<% for action in article.actions: %> <% for action in article.actions: %>
<a href="<%= action.href %>" data-type="<%= action.type %>" class="article-action u-clickable<% if action.class: %> <%= action.class %><% end %>"> <a href="<%= action.href %>" data-type="<%= action.type %>" class="article-action u-clickable<% if action.class: %> <%= action.class %><% end %>">
<span class="<%= action.type %> action icon"></span><%- @T( action.name ) %> <span class="<%= action.type %> action icon"></span><%- @T( action.name ) %>

View file

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

View file

@ -30,8 +30,12 @@ class TestCase < Test::Unit::TestCase
end end
caps = Selenium::WebDriver::Remote::Capabilities.send( browser ) caps = Selenium::WebDriver::Remote::Capabilities.send( browser )
caps.platform = ENV['BROWSER_OS'] || 'Windows 2008' if ENV['BROWSER_OS']
caps.version = ENV['BROWSER_VERSION'] || '8' caps.platform = ENV['BROWSER_OS']
end
if ENV['BROWSER_VERSION']
caps.version = ENV['BROWSER_VERSION']
end
local_browser = Selenium::WebDriver.for( local_browser = Selenium::WebDriver.for(
:remote, :remote,
:url => ENV['REMOTE_URL'], :url => ENV['REMOTE_URL'],
@ -291,7 +295,6 @@ class TestCase < Test::Unit::TestCase
assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" ) assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" )
return return
elsif action[:execute] == 'create_user' elsif action[:execute] == 'create_user'
instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click
instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click
sleep 2 sleep 2
@ -329,6 +332,82 @@ class TestCase < Test::Unit::TestCase
assert( true, "(#{test[:name]}) user creation failed" ) assert( true, "(#{test[:name]}) user creation failed" )
return 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' elsif action[:execute] == 'verify_task_attributes'
if action[:title] if action[:title]
text = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip text = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip