# encoding: utf-8
require 'test_helper'
class EmailProcessBounceDeliveryPermanentFailedTest < ActiveSupport::TestCase
test 'process with bounce trigger email loop check - article based blocker' do
roles = Role.where(name: %w(Customer))
customer1 = User.create_or_update(
login: 'ticket-bounce-trigger1@example.com',
firstname: 'Notification',
lastname: 'Customer1',
email: 'ticket-bounce-trigger1@example.com',
active: true,
roles: roles,
preferences: {},
updated_by_id: 1,
created_by_id: 1,
)
Trigger.create_or_update(
name: 'auto reply new ticket',
condition: {
'ticket.action' => {
'operator' => 'is',
'value' => 'create',
},
},
perform: {
'notification.email' => {
'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}
#{article.body}',
'recipient' => 'ticket_customer',
'subject' => 'Thanks for your inquiry (#{ticket.title})!',
},
},
disable_notification: true,
active: true,
created_by_id: 1,
updated_by_id: 1,
)
Trigger.create_or_update(
name: 'auto reply followup',
condition: {
'ticket.action' => {
'operator' => 'is',
'value' => 'update',
},
},
perform: {
'notification.email' => {
'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}
#{article.body}',
'recipient' => 'ticket_customer',
'subject' => 'Thanks for your follow up (#{ticket.title})!',
},
},
disable_notification: true,
active: true,
created_by_id: 1,
updated_by_id: 1,
)
ticket = Ticket.create(
title: 'bounce check',
group: Group.lookup(name: 'Users'),
customer: customer1,
state: Ticket::State.lookup(name: 'new'),
priority: Ticket::Priority.lookup(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
)
article = Ticket::Article.create(
ticket_id: ticket.id,
from: 'some_sender@example.com',
to: 'some_recipient@example.com',
subject: 'bounce check',
message_id: '<20150830145601.30.6088xx@edenhofer.zammad.com>',
body: 'some message bounce check',
internal: false,
sender: Ticket::Article::Sender.where(name: 'Agent').first,
type: Ticket::Article::Type.where(name: 'email').first,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
assert_equal('new', ticket.state.name)
assert_equal(2, ticket.articles.count)
article = Ticket::Article.create(
ticket_id: ticket.id,
from: 'some_sender@example.com',
to: customer1.email,
subject: 'bounce check 2',
message_id: '<20150830145601.30.608881@edenhofer.zammad.com>',
body: 'some message bounce check 2',
internal: false,
sender: Ticket::Article::Sender.where(name: 'Agent').first,
type: Ticket::Article::Type.where(name: 'email').first,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
assert_equal(4, ticket.articles.count)
travel 1.second
email_raw_string = IO.binread('test/fixtures/mail33-undelivered-mail-returned-to-sender.box')
ticket_p, article_p, user_p = Channel::EmailParser.new.process({}, email_raw_string)
assert_equal(ticket.id, ticket_p.id)
assert_equal('open', ticket_p.state.name)
assert_equal(5, ticket_p.articles.count)
travel_back
ticket.destroy
end
test 'process with bounce trigger email loop check - bounce based blocker' do
roles = Role.where(name: %w(Customer))
customer2 = User.create_or_update(
login: 'ticket-bounce-trigger2@example.com',
firstname: 'Notification',
lastname: 'Customer2',
email: 'ticket-bounce-trigger2@example.com',
active: true,
roles: roles,
preferences: {},
updated_by_id: 1,
created_by_id: 1,
)
Trigger.create_or_update(
name: 'auto reply new ticket',
condition: {
'ticket.action' => {
'operator' => 'is',
'value' => 'create',
},
},
perform: {
'notification.email' => {
'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}
#{article.body}',
'recipient' => 'ticket_customer',
'subject' => 'Thanks for your inquiry (#{ticket.title})!',
},
},
disable_notification: true,
active: true,
created_by_id: 1,
updated_by_id: 1,
)
Trigger.create_or_update(
name: 'auto reply followup',
condition: {
'ticket.action' => {
'operator' => 'is',
'value' => 'update',
},
},
perform: {
'notification.email' => {
'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}
#{article.body}',
'recipient' => 'ticket_customer',
'subject' => 'Thanks for your follow up (#{ticket.title})!',
},
},
disable_notification: true,
active: true,
created_by_id: 1,
updated_by_id: 1,
)
ticket = Ticket.create(
title: 'bounce check',
group: Group.lookup(name: 'Users'),
customer: customer2,
state: Ticket::State.lookup(name: 'new'),
priority: Ticket::Priority.lookup(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
)
article = Ticket::Article.create(
ticket_id: ticket.id,
from: 'some_sender@example.com',
to: 'some_recipient@example.com',
subject: 'bounce check',
message_id: '<20150830145601.30.6088xx@edenhofer.zammad.com>',
body: 'some message bounce check',
internal: false,
sender: Ticket::Article::Sender.where(name: 'Agent').first,
type: Ticket::Article::Type.where(name: 'email').first,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
assert_equal('new', ticket.state.name)
assert_equal(2, ticket.articles.count)
article = Ticket::Article.create(
ticket_id: ticket.id,
from: 'some_sender@example.com',
to: 'some_recipient@example.com',
subject: 'bounce check 2',
message_id: '<20170526150141.232.13312@example.zammad.loc>',
body: 'some message bounce check 2',
internal: false,
sender: Ticket::Article::Sender.where(name: 'Agent').first,
type: Ticket::Article::Type.where(name: 'email').first,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
assert_equal(4, ticket.articles.count)
travel 1.second
email_raw_string = IO.binread('test/fixtures/mail55.box')
ticket_p, article_p, user_p = Channel::EmailParser.new.process({}, email_raw_string)
assert_equal(ticket.id, ticket_p.id)
assert_equal('open', ticket_p.state.name)
assert_equal(5, ticket_p.articles.count)
travel_back
ticket.destroy
end
end