diff --git a/app/assets/javascripts/app/views/generic/time_range.jst.eco b/app/assets/javascripts/app/views/generic/time_range.jst.eco
new file mode 100644
index 000000000..ba3cf44e8
--- /dev/null
+++ b/app/assets/javascripts/app/views/generic/time_range.jst.eco
@@ -0,0 +1,16 @@
+
+
+ <%- @Icon('arrow-down', 'dropdown-arrow') %>
+
+
+
+ <%- @Icon('arrow-down', 'dropdown-arrow') %>
+
diff --git a/app/models/ticket.rb b/app/models/ticket.rb
index 161685a68..61c3bd043 100644
--- a/app/models/ticket.rb
+++ b/app/models/ticket.rb
@@ -118,9 +118,9 @@ returns
access_condition = [ 'group_id IN (?)', group_ids ]
else
if !user.organization || ( !user.organization.shared || user.organization.shared == false )
- access_condition = [ 'customer_id = ?', user.id ]
+ access_condition = [ 'tickets.customer_id = ?', user.id ]
else
- access_condition = [ '( customer_id = ? OR organization_id = ? )', user.id, user.organization.id ]
+ access_condition = [ '( tickets.customer_id = ? OR tickets.organization_id = ? )', user.id, user.organization.id ]
end
end
access_condition
@@ -289,16 +289,24 @@ returns
get count of tickets and tickets which match on selector
- ticket_count, tickets = Ticket.selectors(params[:condition], 6)
+ ticket_count, tickets = Ticket.selectors(params[:condition], limit, current_user)
=end
- def self.selectors(selectors, limit = 10)
- return if !selectors
+ def self.selectors(selectors, limit = 10, current_user = nil)
+ fail 'no selectors given' if !selectors
query, bind_params, tables = selector2sql(selectors)
return [] if !query
- ticket_count = Ticket.where(query, *bind_params).joins(tables).count
- tickets = Ticket.where(query, *bind_params).joins(tables).limit(limit)
+
+ if !current_user
+ ticket_count = Ticket.where(query, *bind_params).joins(tables).count
+ tickets = Ticket.where(query, *bind_params).joins(tables).limit(limit)
+ return [ticket_count, tickets]
+ end
+
+ access_condition = Ticket.access_condition(current_user)
+ ticket_count = Ticket.where(access_condition).where(query, *bind_params).joins(tables).count
+ tickets = Ticket.where(access_condition).where(query, *bind_params).joins(tables).limit(limit)
[ticket_count, tickets]
end
@@ -314,7 +322,16 @@ condition example
'ticket.state_id' => {
operator: 'is',
value: [1,2,5]
- }
+ },
+ 'ticket.created_at' => {
+ operator: 'after (absolute)', # after,before
+ value: '2015-10-17T06:00:00.000Z',
+ },
+ 'ticket.created_at' => {
+ operator: 'within next (relative)', # before,within,in,after
+ range: 'day', # minute|hour|day|month|year
+ value: '25',
+ },
}
=end
@@ -324,13 +341,27 @@ condition example
query = ''
bind_params = []
- tables = []
+ tables = ''
selectors.each {|attribute, selector|
selector = attribute.split(/\./)
next if !selector[1]
next if selector[0] == 'ticket'
next if tables.include?(selector[0])
- tables.push selector[0].to_sym
+ if query != ''
+ query += ' AND '
+ end
+ if selector[0] == 'customer'
+ tables += ', users customers'
+ query += 'tickets.customer_id = customers.id'
+ elsif selector[0] == 'organization'
+ tables += ', organizations'
+ query += 'tickets.organization_id = organizations.id'
+ elsif selector[0] == 'owner'
+ tables += ', users owners'
+ query += 'tickets.owner_id = owners.id'
+ else
+ fail "invalid selector #{attribute.inspect}->#{selector.inspect}"
+ end
}
selectors.each {|attribute, selector_raw|
@@ -341,7 +372,7 @@ condition example
fail "Invalid selector #{selector_raw.inspect}" if !selector_raw.respond_to?(:key?)
selector = selector_raw.stringify_keys
fail "Invalid selector, operator missing #{selector.inspect}" if !selector['operator']
- return nil if !selector['value']
+ return nil if selector['value'].nil?
return nil if selector['value'].respond_to?(:empty?) && selector['value'].empty?
attributes = attribute.split(/\./)
attribute = "#{attributes[0]}s.#{attributes[1]}"
@@ -365,12 +396,74 @@ condition example
elsif selector['operator'] == 'after (absolute)'
query += "#{attribute} >= ?"
bind_params.push selector['value']
+ elsif selector['operator'] == 'within last (relative)'
+ query += "#{attribute} >= ?"
+ time = nil
+ if selector['range'] == 'minute'
+ time = Time.zone.now - selector['value'].to_i.minutes
+ elsif selector['range'] == 'hour'
+ time = Time.zone.now - selector['value'].to_i.hours
+ elsif selector['range'] == 'day'
+ time = Time.zone.now - selector['value'].to_i.days
+ elsif selector['range'] == 'month'
+ time = Time.zone.now - selector['value'].to_i.months
+ elsif selector['range'] == 'year'
+ time = Time.zone.now - selector['value'].to_i.years
+ else
+ fail "Unknown selector attributes '#{selector.inspect}'"
+ end
+ bind_params.push time
+ elsif selector['operator'] == 'within next (relative)'
+ query += "#{attribute} >= ?"
+ time = nil
+ if selector['range'] == 'minute'
+ time = Time.zone.now + selector['value'].to_i.minutes
+ elsif selector['range'] == 'hour'
+ time = Time.zone.now + selector['value'].to_i.hours
+ elsif selector['range'] == 'day'
+ time = Time.zone.now + selector['value'].to_i.days
+ elsif selector['range'] == 'month'
+ time = Time.zone.now + selector['value'].to_i.months
+ elsif selector['range'] == 'year'
+ time = Time.zone.now + selector['value'].to_i.years
+ else
+ fail "Unknown selector attributes '#{selector.inspect}'"
+ end
+ bind_params.push time
elsif selector['operator'] == 'before (relative)'
query += "#{attribute} <= ?"
- bind_params.push Time.zone.now - selector['value'].to_i.minutes
+ time = nil
+ if selector['range'] == 'minute'
+ time = Time.zone.now - selector['value'].to_i.minutes
+ elsif selector['range'] == 'hour'
+ time = Time.zone.now - selector['value'].to_i.hours
+ elsif selector['range'] == 'day'
+ time = Time.zone.now - selector['value'].to_i.days
+ elsif selector['range'] == 'month'
+ time = Time.zone.now - selector['value'].to_i.months
+ elsif selector['range'] == 'year'
+ time = Time.zone.now - selector['value'].to_i.years
+ else
+ fail "Unknown selector attributes '#{selector.inspect}'"
+ end
+ bind_params.push time
elsif selector['operator'] == 'after (relative)'
query += "#{attribute} >= ?"
- bind_params.push Time.zone.now + selector['value'].to_i.minutes
+ time = nil
+ if selector['range'] == 'minute'
+ time = Time.zone.now + selector['value'].to_i.minutes
+ elsif selector['range'] == 'hour'
+ time = Time.zone.now + selector['value'].to_i.hours
+ elsif selector['range'] == 'day'
+ time = Time.zone.now + selector['value'].to_i.days
+ elsif selector['range'] == 'month'
+ time = Time.zone.now + selector['value'].to_i.months
+ elsif selector['range'] == 'year'
+ time = Time.zone.now + selector['value'].to_i.years
+ else
+ fail "Unknown selector attributes '#{selector.inspect}'"
+ end
+ bind_params.push time
else
fail "Invalid operator '#{selector['operator']}' for '#{selector['value'].inspect}'"
end
diff --git a/test/unit/ticket_selector_test.rb b/test/unit/ticket_selector_test.rb
new file mode 100644
index 000000000..d4793752d
--- /dev/null
+++ b/test/unit/ticket_selector_test.rb
@@ -0,0 +1,626 @@
+# encoding: utf-8
+require 'test_helper'
+
+class TicketSelectorTest < ActiveSupport::TestCase
+
+ # create base
+ group = Group.create_or_update(
+ name: 'SelectorTest',
+ updated_at: '2015-02-05 16:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ roles = Role.where( name: 'Agent' )
+ agent1 = User.create_or_update(
+ login: 'ticket-selector-agent1@example.com',
+ firstname: 'Notification',
+ lastname: 'Agent1',
+ email: 'ticket-selector-agent1@example.com',
+ password: 'agentpw',
+ active: true,
+ roles: roles,
+ groups: [group],
+ updated_at: '2015-02-05 16:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ agent2 = User.create_or_update(
+ login: 'ticket-selector-agent2@example.com',
+ firstname: 'Notification',
+ lastname: 'Agent2',
+ email: 'ticket-selector-agent2@example.com',
+ password: 'agentpw',
+ active: true,
+ roles: roles,
+ #groups: groups,
+ updated_at: '2015-02-05 16:38:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ roles = Role.where( name: 'Customer' )
+ organization1 = Organization.create_if_not_exists(
+ name: 'Selector Org',
+ updated_at: '2015-02-05 16:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ customer1 = User.create_or_update(
+ login: 'ticket-selector-customer1@example.com',
+ firstname: 'Notification',
+ lastname: 'Customer1',
+ email: 'ticket-selector-customer1@example.com',
+ password: 'customerpw',
+ active: true,
+ organization_id: organization1.id,
+ roles: roles,
+ updated_at: '2015-02-05 16:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ customer2 = User.create_or_update(
+ login: 'ticket-selector-customer2@example.com',
+ firstname: 'Notification',
+ lastname: 'Customer2',
+ email: 'ticket-selector-customer2@example.com',
+ password: 'customerpw',
+ active: true,
+ organization_id: nil,
+ roles: roles,
+ updated_at: '2015-02-05 16:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+
+ Ticket.where(group_id: group.id).destroy_all
+
+ test 'ticket create' do
+
+ ticket1 = Ticket.create(
+ title: 'some title1',
+ group: group,
+ customer_id: customer1.id,
+ owner_id: agent1.id,
+ state: Ticket::State.lookup( name: 'new' ),
+ priority: Ticket::Priority.lookup( name: '2 normal' ),
+ created_at: '2015-02-05 16:37:00',
+ #updated_at: '2015-02-05 17:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ assert( ticket1, 'ticket created' )
+ assert_equal( ticket1.customer.id, customer1.id )
+ assert_equal( ticket1.organization.id, organization1.id )
+ sleep 1
+
+ ticket2 = Ticket.create(
+ title: 'some title2',
+ group: group,
+ customer_id: customer2.id,
+ state: Ticket::State.lookup( name: 'new' ),
+ priority: Ticket::Priority.lookup( name: '2 normal' ),
+ created_at: '2015-02-05 16:37:00',
+ #updated_at: '2015-02-05 17:37:00',
+ updated_by_id: 1,
+ created_by_id: 1,
+ )
+ assert( ticket2, 'ticket created' )
+ assert_equal( ticket2.customer.id, customer2.id )
+ assert_equal( ticket2.organization_id, nil )
+ sleep 1
+
+ # search not matching
+ condition = {
+ 'ticket.state_id' => {
+ operator: 'is',
+ value: [99],
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ # search matching
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.state_id' => {
+ operator: 'is',
+ value: [Ticket::State.lookup( name: 'new' ).id],
+ },
+ }
+
+ ticket_count, tickets = Ticket.selectors(condition, 10)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.state_id' => {
+ operator: 'is not',
+ value: [Ticket::State.lookup( name: 'open' ).id],
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ # search - created_at
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'after (absolute)', # before (absolute)
+ value: '2015-02-05T16:00:00.000Z',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'after (absolute)', # before (absolute)
+ value: '2015-02-05T18:00:00.000Z',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'before (absolute)',
+ value: '2015-02-05T18:00:00.000Z',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'before (absolute)',
+ value: '2015-02-05T16:00:00.000Z',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'before (relative)',
+ range: 'day', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'within next (relative)',
+ range: 'year', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.created_at' => {
+ operator: 'within last (relative)',
+ range: 'year', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ # search - updated_at
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'before (absolute)',
+ value: (Time.zone.now + 1.day).iso8601,
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'before (absolute)',
+ value: (Time.zone.now - 1.day).iso8601,
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'after (absolute)',
+ value: (Time.zone.now + 1.day).iso8601,
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'after (absolute)',
+ value: (Time.zone.now - 1.day).iso8601,
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'before (relative)',
+ range: 'day', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'within next (relative)',
+ range: 'year', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'ticket.updated_at' => {
+ operator: 'within last (relative)',
+ range: 'year', # minute|hour|day|month|
+ value: '10',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ # invalid conditions
+ assert_raise RuntimeError do
+ ticket_count, tickets = Ticket.selectors(nil, 10)
+ end
+
+ # search with customers
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'customer.email' => {
+ operator: 'contains',
+ value: 'ticket-selector-customer1',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'customer.email' => {
+ operator: 'contains not',
+ value: 'ticket-selector-customer1-not_existing',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 2 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 1 )
+
+ # search with organizations
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'organization.name' => {
+ operator: 'contains',
+ value: 'selector',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ # search with organizations
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'organization.name' => {
+ operator: 'contains',
+ value: 'selector',
+ },
+ 'customer.email' => {
+ operator: 'contains',
+ value: 'ticket-selector-customer1',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 1 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ condition = {
+ 'ticket.group_id' => {
+ operator: 'is',
+ value: group.id,
+ },
+ 'organization.name' => {
+ operator: 'contains',
+ value: 'selector',
+ },
+ 'customer.email' => {
+ operator: 'contains not',
+ value: 'ticket-selector-customer1',
+ },
+ }
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, agent2)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer1)
+ assert_equal( ticket_count, 0 )
+
+ ticket_count, tickets = Ticket.selectors(condition, 10, customer2)
+ assert_equal( ticket_count, 0 )
+
+ end
+
+end