From bea44638d5846356b20bac504cb130507b3534c4 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 26 Aug 2019 22:14:33 +0200 Subject: [PATCH] Martin Edenhofer's avatar Fixed issue #2719 - Unable to set owner via `X-Zammad-Ticket-owner` header. --- app/models/channel/email_parser.rb | 10 +-- test/unit/email_process_test.rb | 104 +++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 4 deletions(-) diff --git a/app/models/channel/email_parser.rb b/app/models/channel/email_parser.rb index 1e56a8969..7c9713e3c 100644 --- a/app/models/channel/email_parser.rb +++ b/app/models/channel/email_parser.rb @@ -417,7 +417,7 @@ returns end # only set value on _id if value/reference lookup exists - if mail[ header.to_sym ] + if mail[header.to_sym] Rails.logger.info "set_attributes_by_x_headers header #{header} found #{mail[header.to_sym]}" item_object.class.reflect_on_all_associations.map do |assoc| @@ -426,14 +426,16 @@ returns Rails.logger.info "set_attributes_by_x_headers found #{assoc.class_name} lookup for '#{mail[header.to_sym]}'" item = assoc.class_name.constantize - assoc_object = nil - if item.respond_to?(:name) + if item.new.respond_to?(:name) assoc_object = item.lookup(name: mail[header.to_sym]) end - if !assoc_object && item.respond_to?(:login) + if !assoc_object && item.new.respond_to?(:login) assoc_object = item.lookup(login: mail[header.to_sym]) end + if !assoc_object && item.new.respond_to?(:email) + assoc_object = item.lookup(email: mail[header.to_sym]) + end if assoc_object.blank? diff --git a/test/unit/email_process_test.rb b/test/unit/email_process_test.rb index f3bc98947..13579c28c 100644 --- a/test/unit/email_process_test.rb +++ b/test/unit/email_process_test.rb @@ -3180,6 +3180,31 @@ Content-Type: text/html; charset=us-ascii; format=flowed end test 'process trusted' do + groups = Group.all + roles = Role.where(name: 'Agent') + agent1 = User.create!( + login: 'agent1', + firstname: 'Firstname', + lastname: 'agent1', + email: 'agent1@example.com', + active: true, + roles: roles, + groups: groups, + updated_by_id: 1, + created_by_id: 1, + ) + roles = Role.where(name: 'Customer') + customer1 = User.create!( + login: 'customer1', + firstname: 'Firstname', + lastname: 'customer1', + email: 'customer1@example.com', + active: true, + roles: roles, + updated_by_id: 1, + created_by_id: 1, + ) + files = [ { data: 'From: me@example.com @@ -3199,6 +3224,7 @@ To: customer@example.com Subject: some subject X-Zammad-Ticket-Followup-State: closed X-Zammad-Ticket-priority: 3 high +X-Zammad-Ticket-owner: agent1@example.com X-Zammad-Article-sender: System x-Zammad-Article-type: phone x-Zammad-Article-Internal: true @@ -3213,6 +3239,7 @@ Some Text', state: 'new', priority: '3 high', title: 'some subject', + owner: agent1, }, 1 => { sender: 'System', @@ -3227,6 +3254,7 @@ To: customer@example.com Subject: some subject X-Zammad-Ticket-Followup-State: closed X-Zammad-Ticket-priority_id: 777777 +X-Zammad-Ticket-owner: not_existing@example.com X-Zammad-Article-sender_id: 999999 x-Zammad-Article-type: phone x-Zammad-Article-Internal: true @@ -3241,6 +3269,7 @@ Some Text', state: 'new', priority: '2 normal', title: 'some subject', + owner: User.find(1), }, 1 => { sender: 'Customer', @@ -3249,6 +3278,81 @@ Some Text', }, }, }, + { + data: 'From: me@example.com +To: customer@example.com +Subject: some subject / with customer as agent - customer can not be owner +X-Zammad-Ticket-owner: customer1@example.com + +Some Text', + channel: { + trusted: true, + }, + success: true, + result: { + 0 => { + state: 'new', + priority: '2 normal', + title: 'some subject / with customer as agent - customer can not be owner', + owner: User.find(1), + }, + 1 => { + sender: 'Customer', + type: 'email', + internal: false, + }, + }, + }, + { + data: 'From: me@example.com +To: customer@example.com +Subject: some subject / with agent login +X-Zammad-Ticket-owner: agent1 + +Some Text', + channel: { + trusted: true, + }, + success: true, + result: { + 0 => { + state: 'new', + priority: '2 normal', + title: 'some subject / with agent login', + owner: agent1, + }, + 1 => { + sender: 'Customer', + type: 'email', + internal: false, + }, + }, + }, + { + data: 'From: me@example.com +To: customer@example.com +Subject: some subject / with agent email +X-Zammad-Ticket-owner: agent1@example.com + +Some Text', + channel: { + trusted: true, + }, + success: true, + result: { + 0 => { + state: 'new', + priority: '2 normal', + title: 'some subject / with agent email', + owner: agent1, + }, + 1 => { + sender: 'Customer', + type: 'email', + internal: false, + }, + }, + }, ] assert_process(files) end