trabajo-afectivo/test/unit/email_process_sender_is_system_address_or_agent_test.rb
2021-09-20 12:47:05 +02:00

231 lines
8.4 KiB
Ruby

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
require 'test_helper'
class EmailProcessSenderIsSystemAddressOrAgent < ActiveSupport::TestCase
setup do
EmailAddress.create_or_update(
channel_id: 1,
realname: 'My System',
email: 'Myzammad@system.TEST',
active: true,
updated_by_id: 1,
created_by_id: 1,
)
end
test 'process email with sender as system address check' do
subject = "some new subject #{SecureRandom.uuid}"
email_raw_string = "From: me+is+customer@example.com
To: customer@example.com
Subject: #{subject}
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal(subject, ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Customer', ticket.create_article_sender.name)
assert_equal('Customer', article.sender.name)
assert_equal('me+is+customer@example.com', ticket.customer.email)
# check article sender + customer of ticket
subject = "some new subject #{SecureRandom.uuid}"
email_raw_string = "From: myzammad@system.test
To: me+is+customer@example.com, customer@example.com
Subject: #{subject}
Message-ID: <123456789-1@linuxhotel.de>
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal(subject, ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('me+is+customer@example.com', ticket.customer.email)
# check if follow-up based on inital system sender address
setting_orig = Setting.get('postmaster_follow_up_search_in')
Setting.set('postmaster_follow_up_search_in', [])
# follow-up possible because same subject
email_raw_string = "From: me+is+customer@example.com
To: myzammad@system.test
Subject: #{subject}
Message-ID: <123456789-2@linuxhotel.de>
References: <123456789-1@linuxhotel.de>
Some Text"
ticket_p2, _article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket2 = Ticket.find(ticket_p2.id)
assert_equal(subject, ticket2.title)
assert_equal(ticket.id, ticket2.id)
# follow-up not possible because subject has changed
subject = "new subject without ticket ref #{SecureRandom.uuid}"
email_raw_string = "From: me+is+customer@example.com
To: myzammad@system.test
Subject: #{subject}
Message-ID: <123456789-3@linuxhotel.de>
References: <123456789-1@linuxhotel.de>
Some Text"
ticket_p2, _article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket2 = Ticket.find(ticket_p2.id)
assert_not_equal(ticket.id, ticket2.id)
assert_equal(subject, ticket2.title)
assert_equal('new', ticket2.state.name)
Setting.set('postmaster_follow_up_search_in', setting_orig)
end
test 'process email with sender as agent address check' do
# create customer
roles = Role.where(name: 'Customer')
customer1 = User.create_or_update(
login: 'ticket-system-sender-customer1@example.com',
firstname: 'system-sender',
lastname: 'Customer1',
email: 'ticket-system-sender-customer1@example.com',
password: 'customerpw',
active: true,
roles: roles,
updated_by_id: 1,
created_by_id: 1,
)
# create agent
groups = Group.all
roles = Role.where(name: 'Agent')
agent1 = User.create_or_update(
login: 'ticket-system-sender-agent1@example.com',
firstname: 'system-sender',
lastname: 'Agent1',
email: 'ticket-system-sender-agent1@example.com',
password: 'agentpw',
active: true,
roles: roles,
groups: groups,
updated_by_id: 1,
created_by_id: 1,
)
# process customer email
email_raw_string = "From: ticket-system-sender-customer1@example.com
To: myzammad@system.test
Subject: some subject #1
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #1', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Customer', ticket.create_article_sender.name)
assert_equal('Customer', article.sender.name)
assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
assert_equal(customer1.id, ticket.created_by_id)
assert_equal(customer1.id, article.created_by_id)
# process agent email
email_raw_string = "From: ticket-system-sender-agent1@example.com
To: ticket-system-sender-customer1@example.com, myzammad@system.test
Subject: some subject #2
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #2', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
assert_equal(agent1.id, ticket.created_by_id)
assert_equal(agent1.id, article.created_by_id)
email_raw_string = "From: ticket-system-sender-agent1@example.com
To: myzammad@system.test, ticket-system-sender-customer1@example.com
Subject: some subject #3
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #3', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
assert_equal(agent1.id, ticket.created_by_id)
assert_equal(agent1.id, article.created_by_id)
email_raw_string = "From: ticket-system-sender-AGENT1@example.com
To: MYZAMMAD@system.test, ticket-system-sender-CUSTOMER1@example.com
Subject: some subject #4
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #4', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
assert_equal(agent1.id, ticket.created_by_id)
assert_equal(agent1.id, article.created_by_id)
email_raw_string = "From: ticket-system-sender-agent1@example.com
To: myzammad@system.test
Subject: some subject #5
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #5', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
assert_equal(agent1.id, ticket.created_by_id)
assert_equal(agent1.id, article.created_by_id)
email_raw_string = "From: ticket-system-sender-agent1@example.com
To: myZammad@system.Test
Subject: some subject #6
Some Text"
ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
ticket = Ticket.find(ticket_p.id)
article = Ticket::Article.find(article_p.id)
assert_equal('some subject #6', ticket.title)
assert_equal('new', ticket.state.name)
assert_equal('Agent', ticket.create_article_sender.name)
assert_equal('Agent', article.sender.name)
assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
assert_equal(agent1.id, ticket.created_by_id)
assert_equal(agent1.id, article.created_by_id)
end
end