# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
require 'test_helper'
class NotificationFactoryMailerTest < ActiveSupport::TestCase
test 'notifications send' do
result = NotificationFactory::Mailer.deliver(
recipient: User.find(2),
subject: 'some subject',
body: 'some body',
content_type: '',
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory::Mailer.deliver(
recipient: User.find(2),
subject: 'some subject',
body: 'some body',
content_type: 'text/plain',
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory::Mailer.deliver(
recipient: User.find(2),
subject: 'some subject',
body: 'some body',
content_type: 'text/html',
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_match('body', result.to_s)
assert_match('text/html', result.to_s)
attachments = []
attachments.push Store.create!(
object: 'TestMailer',
o_id: 1,
data: 'content_file1_normally_should_be_an_image',
filename: 'some_file1.jpg',
preferences: {
'Content-Type' => 'image/jpeg',
'Mime-Type' => 'image/jpeg',
'Content-ID' => '15.274327094.140938@zammad.example.com',
'Content-Disposition' => 'inline'
},
created_by_id: 1,
)
attachments.push Store.create!(
object: 'TestMailer',
o_id: 1,
data: 'content_file2',
filename: 'some_file2.txt',
preferences: {
'Content-Type' => 'text/stream',
'Mime-Type' => 'text/stream',
},
created_by_id: 1,
)
result = NotificationFactory::Mailer.deliver(
recipient: User.find(2),
subject: 'some subject',
body: 'some bodyasdasd
',
content_type: 'text/html',
attachments: attachments,
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_match('body', result.to_s)
assert_match('text/html', result.to_s)
assert_match('Content-Type: image/jpeg', result.to_s)
assert_match('Content-Disposition: inline', result.to_s)
assert_match('Content-ID: <15.274327094.140938@zammad.example.com>', result.to_s)
assert_match('text/stream', result.to_s)
assert_match('some_file2.txt', result.to_s)
end
test 'notifications settings' do
groups = Group.all
roles = Role.where(name: 'Agent')
agent1 = User.create!(
login: 'notification-settings-agent1@example.com',
firstname: 'Notificationxxx',
lastname: 'Agent1',
email: 'notification-settings-agent1@example.com',
password: 'agentpw',
active: true,
roles: roles,
groups: groups,
updated_by_id: 1,
created_by_id: 1,
)
agent2 = User.create!(
login: 'notification-settings-agent2@example.com',
firstname: 'Notificationxxx',
lastname: 'Agent2',
email: 'notification-settings-agent2@example.com',
password: 'agentpw',
active: true,
roles: roles,
groups: groups,
updated_by_id: 1,
created_by_id: 1,
)
group_notification_setting = Group.create!(
name: 'NotificationSetting',
updated_by_id: 1,
created_by_id: 1,
)
ticket1 = Ticket.create(
group_id: Group.lookup(name: 'Users').id,
customer_id: User.lookup(email: 'nicole.braun@zammad.org').id,
owner_id: User.lookup(login: '-').id,
title: 'Notification Settings Test 1!',
state_id: Ticket::State.lookup(name: 'new').id,
priority_id: Ticket::Priority.lookup(name: '2 normal').id,
updated_by_id: 1,
created_by_id: 1,
)
ticket2 = Ticket.create(
group_id: Group.lookup(name: 'Users').id,
customer_id: User.lookup(email: 'nicole.braun@zammad.org').id,
owner_id: agent1.id,
title: 'Notification Settings Test 2!',
state_id: Ticket::State.lookup(name: 'new').id,
priority_id: Ticket::Priority.lookup(name: '2 normal').id,
updated_by_id: 1,
created_by_id: 1,
)
ticket3 = Ticket.create(
group_id: group_notification_setting.id,
customer_id: User.lookup(email: 'nicole.braun@zammad.org').id,
owner_id: User.lookup(login: '-').id,
title: 'Notification Settings Test 1!',
state_id: Ticket::State.lookup(name: 'new').id,
priority_id: Ticket::Priority.lookup(name: '2 normal').id,
updated_by_id: 1,
created_by_id: 1,
)
ticket4 = Ticket.create(
group_id: group_notification_setting.id,
customer_id: User.lookup(email: 'nicole.braun@zammad.org').id,
owner_id: agent1.id,
title: 'Notification Settings Test 2!',
state_id: Ticket::State.lookup(name: 'new').id,
priority_id: Ticket::Priority.lookup(name: '2 normal').id,
updated_by_id: 1,
created_by_id: 1,
)
agent1.preferences[:notification_config][:group_ids] = nil
agent1.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket4, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
agent2.preferences[:notification_config][:group_ids] = nil
agent2.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_nil(result)
# no group selection
agent1.preferences[:notification_config][:group_ids] = []
agent1.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket4, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
agent2.preferences[:notification_config][:group_ids] = []
agent2.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_nil(result)
agent1.preferences[:notification_config][:group_ids] = ['-']
agent1.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket4, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
agent2.preferences[:notification_config][:group_ids] = ['-']
agent2.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_nil(result)
# dedecated group selection
agent1.preferences[:notification_config][:group_ids] = [Group.lookup(name: 'Users').id]
agent1.save
travel 30.seconds
if Rails.application.config.cache_store.first.eql? :mem_cache_store
# External memcached does not support time travel, so clear the cache to avoid an outdated match.
Rails.cache.clear
end
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent1, ticket4, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
agent2.preferences[:notification_config][:group_ids] = [Group.lookup(name: 'Users').id]
agent2.save
travel 30.seconds
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_nil(result)
assert_nil(result)
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_nil(result)
end
end