123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'test_helper'
- class EmailProcessSenderIsSystemAddressOrAgent < ActiveSupport::TestCase
- setup do
- EmailAddress.create_or_update(
- channel_id: 1,
- name: '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
|