Fixed issue #1149 - Trigger: Wrong behaviour for condition "is not" "not set".
This commit is contained in:
parent
164aa47e57
commit
74ebb10d2c
2 changed files with 225 additions and 3 deletions
|
@ -504,7 +504,7 @@ condition example
|
||||||
query += "#{attribute} IN (?)"
|
query += "#{attribute} IN (?)"
|
||||||
bind_params.push 1
|
bind_params.push 1
|
||||||
else
|
else
|
||||||
query += "#{attribute} IS NOT NULL"
|
query += "#{attribute} IS NULL"
|
||||||
end
|
end
|
||||||
elsif selector['pre_condition'] == 'current_user.id'
|
elsif selector['pre_condition'] == 'current_user.id'
|
||||||
raise "Use current_user.id in selector, but no current_user is set #{selector.inspect}" if !current_user_id
|
raise "Use current_user.id in selector, but no current_user is set #{selector.inspect}" if !current_user_id
|
||||||
|
@ -518,7 +518,7 @@ condition example
|
||||||
else
|
else
|
||||||
# rubocop:disable Style/IfInsideElse
|
# rubocop:disable Style/IfInsideElse
|
||||||
if selector['value'].nil?
|
if selector['value'].nil?
|
||||||
query += "#{attribute} IS NOT NULL"
|
query += "#{attribute} IS NULL"
|
||||||
else
|
else
|
||||||
query += "#{attribute} IN (?)"
|
query += "#{attribute} IN (?)"
|
||||||
bind_params.push selector['value']
|
bind_params.push selector['value']
|
||||||
|
@ -531,7 +531,7 @@ condition example
|
||||||
query += "#{attribute} NOT IN (?)"
|
query += "#{attribute} NOT IN (?)"
|
||||||
bind_params.push 1
|
bind_params.push 1
|
||||||
else
|
else
|
||||||
query += "#{attribute} IS NULL"
|
query += "#{attribute} IS NOT NULL"
|
||||||
end
|
end
|
||||||
elsif selector['pre_condition'] == 'current_user.id'
|
elsif selector['pre_condition'] == 'current_user.id'
|
||||||
query += "#{attribute} NOT IN (?)"
|
query += "#{attribute} NOT IN (?)"
|
||||||
|
|
|
@ -1414,6 +1414,228 @@ class TicketTriggerTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test '6.1 owner auto assignment based on organization' do
|
||||||
|
trigger1 = Trigger.create_or_update(
|
||||||
|
name: 'aaa auto assignment',
|
||||||
|
condition: {
|
||||||
|
'ticket.organization_id' => {
|
||||||
|
'operator' => 'is not',
|
||||||
|
'pre_condition' => 'not_set',
|
||||||
|
'value' => '',
|
||||||
|
'value_completion' => '',
|
||||||
|
},
|
||||||
|
'ticket.action' => {
|
||||||
|
'operator' => 'is',
|
||||||
|
'value' => 'update',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
perform: {
|
||||||
|
'ticket.owner_id' => {
|
||||||
|
'pre_condition' => 'current_user.id',
|
||||||
|
'value' => '',
|
||||||
|
'value_completion' => '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
disable_notification: true,
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
roles = Role.where(name: 'Agent')
|
||||||
|
agent = User.create_or_update(
|
||||||
|
login: 'agent@example.com',
|
||||||
|
firstname: 'Trigger',
|
||||||
|
lastname: 'Agent1',
|
||||||
|
email: 'agent@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
roles = Role.where(name: 'Customer')
|
||||||
|
customer = User.create_or_update(
|
||||||
|
login: 'customer@example.com',
|
||||||
|
firstname: 'Trigger',
|
||||||
|
lastname: 'Customer1',
|
||||||
|
email: 'customer@example.com',
|
||||||
|
password: 'customerpw',
|
||||||
|
vip: true,
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
ticket1 = Ticket.create(
|
||||||
|
title: 'test 123',
|
||||||
|
group: Group.lookup(name: 'Users'),
|
||||||
|
customer: customer,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
Ticket::Article.create(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'some subject',
|
||||||
|
message_id: 'some@id',
|
||||||
|
body: "some message <b>note</b>\nnew line",
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Agent'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'note'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
Observer::Transaction.commit
|
||||||
|
|
||||||
|
assert_equal('test 123', ticket1.title, 'ticket1.title verify')
|
||||||
|
assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
|
||||||
|
assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
|
||||||
|
assert_equal('new', ticket1.state.name, 'ticket1.state verify')
|
||||||
|
assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
|
||||||
|
assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
|
||||||
|
assert_equal([], ticket1.tag_list)
|
||||||
|
|
||||||
|
ticket1.update_attribute(:customer, User.lookup(email: 'nicole.braun@zammad.org') )
|
||||||
|
|
||||||
|
UserInfo.current_user_id = agent.id
|
||||||
|
Ticket::Article.create(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'update',
|
||||||
|
message_id: 'some@id',
|
||||||
|
content_type: 'text/html',
|
||||||
|
body: 'update',
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Agent'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'note'),
|
||||||
|
)
|
||||||
|
Observer::Transaction.commit
|
||||||
|
UserInfo.current_user_id = nil
|
||||||
|
|
||||||
|
ticket1.reload
|
||||||
|
assert_equal('test 123', ticket1.title, 'ticket1.title verify')
|
||||||
|
assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
|
||||||
|
assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
|
||||||
|
assert_equal('new', ticket1.state.name, 'ticket1.state verify')
|
||||||
|
assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
|
||||||
|
assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
|
||||||
|
assert_equal([], ticket1.tag_list)
|
||||||
|
end
|
||||||
|
|
||||||
|
test '6.2 owner auto assignment based on organization' do
|
||||||
|
trigger1 = Trigger.create_or_update(
|
||||||
|
name: 'aaa auto assignment',
|
||||||
|
condition: {
|
||||||
|
'ticket.organization_id' => {
|
||||||
|
'operator' => 'is',
|
||||||
|
'pre_condition' => 'not_set',
|
||||||
|
'value' => '',
|
||||||
|
'value_completion' => '',
|
||||||
|
},
|
||||||
|
'ticket.action' => {
|
||||||
|
'operator' => 'is',
|
||||||
|
'value' => 'update',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
perform: {
|
||||||
|
'ticket.owner_id' => {
|
||||||
|
'pre_condition' => 'current_user.id',
|
||||||
|
'value' => '',
|
||||||
|
'value_completion' => '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
disable_notification: true,
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
roles = Role.where(name: 'Agent')
|
||||||
|
agent = User.create_or_update(
|
||||||
|
login: 'agent@example.com',
|
||||||
|
firstname: 'Trigger',
|
||||||
|
lastname: 'Agent1',
|
||||||
|
email: 'agent@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
roles = Role.where(name: 'Customer')
|
||||||
|
customer = User.create_or_update(
|
||||||
|
login: 'customer@example.com',
|
||||||
|
firstname: 'Trigger',
|
||||||
|
lastname: 'Customer1',
|
||||||
|
email: 'customer@example.com',
|
||||||
|
password: 'customerpw',
|
||||||
|
vip: true,
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
ticket1 = Ticket.create(
|
||||||
|
title: 'test 123',
|
||||||
|
group: Group.lookup(name: 'Users'),
|
||||||
|
customer: User.lookup(email: 'nicole.braun@zammad.org'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
Ticket::Article.create(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'some subject',
|
||||||
|
message_id: 'some@id',
|
||||||
|
body: "some message <b>note</b>\nnew line",
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Agent'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'note'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
Observer::Transaction.commit
|
||||||
|
|
||||||
|
assert_equal('test 123', ticket1.title, 'ticket1.title verify')
|
||||||
|
assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
|
||||||
|
assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
|
||||||
|
assert_equal('new', ticket1.state.name, 'ticket1.state verify')
|
||||||
|
assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
|
||||||
|
assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
|
||||||
|
assert_equal([], ticket1.tag_list)
|
||||||
|
|
||||||
|
ticket1.update_attribute(:customer, customer )
|
||||||
|
|
||||||
|
UserInfo.current_user_id = agent.id
|
||||||
|
Ticket::Article.create(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'update',
|
||||||
|
message_id: 'some@id',
|
||||||
|
content_type: 'text/html',
|
||||||
|
body: 'update',
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Agent'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'note'),
|
||||||
|
)
|
||||||
|
Observer::Transaction.commit
|
||||||
|
UserInfo.current_user_id = nil
|
||||||
|
|
||||||
|
ticket1.reload
|
||||||
|
assert_equal('test 123', ticket1.title, 'ticket1.title verify')
|
||||||
|
assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
|
||||||
|
assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
|
||||||
|
assert_equal('new', ticket1.state.name, 'ticket1.state verify')
|
||||||
|
assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
|
||||||
|
assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
|
||||||
|
assert_equal([], ticket1.tag_list)
|
||||||
|
end
|
||||||
|
|
||||||
test '7 owner auto assignment' do
|
test '7 owner auto assignment' do
|
||||||
trigger1 = Trigger.create_or_update(
|
trigger1 = Trigger.create_or_update(
|
||||||
name: 'aaa auto assignment',
|
name: 'aaa auto assignment',
|
||||||
|
|
Loading…
Reference in a new issue