Added browser tests for overview.
This commit is contained in:
parent
53f56d4087
commit
4a70ba3e3b
8 changed files with 175 additions and 4 deletions
|
@ -92,6 +92,7 @@ class Table extends App.Controller
|
||||||
# remeber bulk attributes
|
# remeber bulk attributes
|
||||||
@bulk = data.bulk
|
@bulk = data.bulk
|
||||||
|
|
||||||
|
# fill cache
|
||||||
@cache[data.view] = data
|
@cache[data.view] = data
|
||||||
|
|
||||||
# check if current view is updated
|
# check if current view is updated
|
||||||
|
|
|
@ -852,12 +852,18 @@ class OverviewNavigator extends App.Controller
|
||||||
|
|
||||||
open: (e) =>
|
open: (e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
|
||||||
|
# get requested object and location
|
||||||
id = $(e.target).data('id')
|
id = $(e.target).data('id')
|
||||||
url = $(e.target).attr('href')
|
url = $(e.target).attr('href')
|
||||||
if !id
|
if !id
|
||||||
id = $(e.target).closest('a').data('id')
|
id = $(e.target).closest('a').data('id')
|
||||||
url = $(e.target).closest('a').attr('href')
|
url = $(e.target).closest('a').attr('href')
|
||||||
console.log('id', id, 'url', url)
|
|
||||||
|
# return if we are unable to get id
|
||||||
|
return if !id
|
||||||
|
|
||||||
|
# open task via task manager to get overview information
|
||||||
App.TaskManager.execute(
|
App.TaskManager.execute(
|
||||||
key: 'Ticket-' + id
|
key: 'Ticket-' + id
|
||||||
controller: 'TicketZoom'
|
controller: 'TicketZoom'
|
||||||
|
|
|
@ -124,6 +124,10 @@ class _taskManagerSingleton extends Spine.Module
|
||||||
# input validation
|
# input validation
|
||||||
params.key = App.Utils.htmlAttributeCleanup(params.key)
|
params.key = App.Utils.htmlAttributeCleanup(params.key)
|
||||||
|
|
||||||
|
# if we have init task startups, let the controller know this
|
||||||
|
if params.init
|
||||||
|
params.params.init = true
|
||||||
|
|
||||||
# in case an init execute arrives later but is aleady executed, ignore it
|
# in case an init execute arrives later but is aleady executed, ignore it
|
||||||
if params.init && @workers[ params.key ]
|
if params.init && @workers[ params.key ]
|
||||||
#console.log('IGNORE LATER INIT', params)
|
#console.log('IGNORE LATER INIT', params)
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<div class="ticket-title"></div>
|
<div class="ticket-title"></div>
|
||||||
<div class="overview-navigator"></div>
|
<div class="overview-navigator"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="overview-navigator horizontal"></div>
|
||||||
<div class="page-header horizontal">
|
<div class="page-header horizontal">
|
||||||
<div class="flex vertical center">
|
<div class="flex vertical center">
|
||||||
<%- @ticket.customer.avatar("50") %>
|
<%- @ticket.customer.avatar("50") %>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="pagination-counter" title="<%- @T(@title) %>">
|
<div class="pagination-counter align-right" title="<%- @T(@title) %>">
|
||||||
<span class="pagination-item-current"><%= @current_position %></span>/<span class="pagination-total-items"><%= @total_count %></span>
|
<span class="pagination-item-current"><%= @current_position %></span>/<span class="pagination-total-items"><%= @total_count %></span>
|
||||||
</div>
|
</div>
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
|
@ -9,6 +9,5 @@
|
||||||
<li <% if !@next: %>class="disabled"<% end %> title="<%- @Ti( 'next in Overview' ) %>">
|
<li <% if !@next: %>class="disabled"<% end %> title="<%- @Ti( 'next in Overview' ) %>">
|
||||||
<a class="centered" href="<% if @next: %><%- @next.uiUrl() %><% end %>" data-id="<% if @next: %><%- @next.id %><% end %>">
|
<a class="centered" href="<% if @next: %><%- @next.uiUrl() %><% end %>" data-id="<% if @next: %><%- @next.id %><% end %>">
|
||||||
<span class="right arrow icon"></span>
|
<span class="right arrow icon"></span>
|
||||||
<% if @next: %>
|
|
||||||
</a>
|
</a>
|
||||||
</ul>
|
</ul>
|
|
@ -3162,7 +3162,7 @@ footer {
|
||||||
}
|
}
|
||||||
|
|
||||||
.ticketZoom .page-header {
|
.ticketZoom .page-header {
|
||||||
margin-top: 62px;
|
margin-top: 24px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
@ -3171,6 +3171,11 @@ footer {
|
||||||
margin-top: 55px;
|
margin-top: 55px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ticketZoom > .overview-navigator {
|
||||||
|
margin-top: 32px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.ticket-article,
|
.ticket-article,
|
||||||
.ticket-edit {
|
.ticket-edit {
|
||||||
max-width: 800px;
|
max-width: 800px;
|
||||||
|
|
87
test/browser/agent_ticket_overview_level1_test.rb
Normal file
87
test/browser/agent_ticket_overview_level1_test.rb
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
require 'browser_test_helper'
|
||||||
|
|
||||||
|
class AgentTicketOverviewLevel1Test < TestCase
|
||||||
|
def test_I
|
||||||
|
name = 'name-' + rand(999999).to_s
|
||||||
|
|
||||||
|
tests = [
|
||||||
|
{
|
||||||
|
:name => 'start',
|
||||||
|
:instance1 => browser_instance,
|
||||||
|
:instance2 => browser_instance,
|
||||||
|
:instance1_username => 'master@example.com',
|
||||||
|
:instance1_password => 'test',
|
||||||
|
:instance2_username => 'agent1@example.com',
|
||||||
|
:instance2_password => 'test',
|
||||||
|
:url => browser_url,
|
||||||
|
:action => [
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'close_all_tasks',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
:where => :instance2,
|
||||||
|
:execute => 'close_all_tasks',
|
||||||
|
},
|
||||||
|
|
||||||
|
# create new overview
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'create_overview',
|
||||||
|
:name => name,
|
||||||
|
:link => name,
|
||||||
|
:role => 'Agent',
|
||||||
|
:prio => 1000,
|
||||||
|
'order::direction' => 'down',
|
||||||
|
},
|
||||||
|
|
||||||
|
# create tickets
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'create_ticket',
|
||||||
|
:group => 'Users',
|
||||||
|
:subject => 'overview #1',
|
||||||
|
:body => 'overview #1',
|
||||||
|
},
|
||||||
|
|
||||||
|
# remember ticket for later
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'match',
|
||||||
|
:css => '.active .page-header .ticket-number',
|
||||||
|
:value => '^(.*)$',
|
||||||
|
:no_quote => true,
|
||||||
|
:match_result => true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'create_ticket',
|
||||||
|
:group => 'Users',
|
||||||
|
:subject => 'overview #2',
|
||||||
|
:body => 'overview #2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
:where => :instance1,
|
||||||
|
:execute => 'create_ticket',
|
||||||
|
:group => 'Users',
|
||||||
|
:subject => 'overview #3',
|
||||||
|
:body => 'overview #3',
|
||||||
|
},
|
||||||
|
|
||||||
|
# click on first ticket on overview
|
||||||
|
{
|
||||||
|
:where => :instance2,
|
||||||
|
:execute => 'overview_ticket',
|
||||||
|
:number => '###stack###',
|
||||||
|
:link => name,
|
||||||
|
},
|
||||||
|
|
||||||
|
# use overview navigation to got to #2 & #3
|
||||||
|
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
browser_double_test(tests)
|
||||||
|
end
|
||||||
|
end
|
|
@ -298,6 +298,8 @@ class TestCase < Test::Unit::TestCase
|
||||||
}
|
}
|
||||||
assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" )
|
assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" )
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# create user
|
||||||
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
|
||||||
|
@ -336,6 +338,7 @@ class TestCase < Test::Unit::TestCase
|
||||||
assert( true, "(#{test[:name]}) user creation failed" )
|
assert( true, "(#{test[:name]}) user creation failed" )
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# overview remember
|
||||||
elsif action[:execute] == 'overview_count_remember'
|
elsif action[:execute] == 'overview_count_remember'
|
||||||
instance.find_elements( { :css => '#navigation li.overviews a' } )[0].click
|
instance.find_elements( { :css => '#navigation li.overviews a' } )[0].click
|
||||||
sleep 2
|
sleep 2
|
||||||
|
@ -354,6 +357,8 @@ class TestCase < Test::Unit::TestCase
|
||||||
@overview_count_remember = overviews
|
@overview_count_remember = overviews
|
||||||
assert( !overviews.empty?, "(#{test[:name]}) overview_count_remember" )
|
assert( !overviews.empty?, "(#{test[:name]}) overview_count_remember" )
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# overview verify
|
||||||
elsif action[:execute] == 'overview_count_verify'
|
elsif action[:execute] == 'overview_count_verify'
|
||||||
instance.find_elements( { :css => '#navigation li.overviews a' } )[0].click
|
instance.find_elements( { :css => '#navigation li.overviews a' } )[0].click
|
||||||
sleep 2
|
sleep 2
|
||||||
|
@ -380,6 +385,8 @@ class TestCase < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# create signature
|
||||||
elsif action[:execute] == 'create_signature'
|
elsif action[:execute] == 'create_signature'
|
||||||
instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click
|
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="#channels/email"]' } )[0].click
|
||||||
|
@ -406,6 +413,47 @@ class TestCase < Test::Unit::TestCase
|
||||||
assert( true, "(#{test[:name]}) signature creation failed" )
|
assert( true, "(#{test[:name]}) signature creation failed" )
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# create overview
|
||||||
|
elsif action[:execute] == 'create_overview'
|
||||||
|
instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click
|
||||||
|
instance.find_elements( { :css => 'a[href="#manage/overviews"]' } )[0].click
|
||||||
|
instance.find_elements( { :css => '#content 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 input[name=link]' } )[0]
|
||||||
|
element.clear
|
||||||
|
element.send_keys( action[:link] )
|
||||||
|
|
||||||
|
element = instance.find_elements( { :css => '.modal select[name="role_id"]' } )[0]
|
||||||
|
dropdown = Selenium::WebDriver::Support::Select.new(element)
|
||||||
|
dropdown.select_by( :text, action[:role])
|
||||||
|
sleep 0.2
|
||||||
|
|
||||||
|
element = instance.find_elements( { :css => '.modal input[name=prio]' } )[0]
|
||||||
|
element.clear
|
||||||
|
element.send_keys( action[:prio] )
|
||||||
|
|
||||||
|
element = instance.find_elements( { :css => '.modal select[name="order::direction"]' } )[0]
|
||||||
|
dropdown = Selenium::WebDriver::Support::Select.new(element)
|
||||||
|
dropdown.select_by( :text, action['order::direction'])
|
||||||
|
sleep 0.2
|
||||||
|
|
||||||
|
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]}) overview created" )
|
||||||
|
return
|
||||||
|
end
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
assert( true, "(#{test[:name]}) overview creation failed" )
|
||||||
|
return
|
||||||
|
|
||||||
|
# create group
|
||||||
elsif action[:execute] == 'create_group'
|
elsif action[:execute] == 'create_group'
|
||||||
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/groups"]' } )[0].click
|
instance.find_elements( { :css => 'a[href="#manage/groups"]' } )[0].click
|
||||||
|
@ -704,6 +752,26 @@ class TestCase < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
assert( true, "(#{test[:name]}) ticket #{action[:number]} found" )
|
assert( true, "(#{test[:name]}) ticket #{action[:number]} found" )
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# overview ticket
|
||||||
|
elsif action[:execute] == 'overview_ticket'
|
||||||
|
instance.find_elements( { :css => '#navigation li.overviews a' } )[0].click
|
||||||
|
sleep 1
|
||||||
|
instance.find_elements( { :css => ".content.active .sidebar a[href=##{action[:link]}]" } ).click
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
action[:number].gsub! '###stack###', @stack
|
||||||
|
|
||||||
|
element = instance.find_element( { :partial_link_text => action[:number] } ).click
|
||||||
|
number = instance.find_elements( { :css => '.active .page-header .ticket-number' } )[0].text
|
||||||
|
if number !~ /#{action[:number]}/
|
||||||
|
assert( false, "(#{test[:name]}) unable to search/find ticket #{action[:number]}!" )
|
||||||
|
return
|
||||||
|
end
|
||||||
|
assert( true, "(#{test[:name]}) ticket #{action[:number]} found" )
|
||||||
|
return
|
||||||
|
|
||||||
|
# close all tasks
|
||||||
elsif action[:execute] == 'close_all_tasks'
|
elsif action[:execute] == 'close_all_tasks'
|
||||||
for i in 1..100
|
for i in 1..100
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
Loading…
Reference in a new issue