trabajo-afectivo/test/unit/notification_factory_test.rb

697 lines
22 KiB
Ruby
Raw Normal View History

# encoding: utf-8
require 'test_helper'
2014-05-27 13:22:21 +00:00
class NotificationFactoryTest < ActiveSupport::TestCase
2016-01-18 01:35:07 +00:00
Translation.load('de-de')
2015-01-07 12:11:30 +00:00
test 'notifications send' do
result = NotificationFactory.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some body',
content_type: '',
2015-01-07 12:11:30 +00:00
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some body',
content_type: 'text/plain',
2015-01-07 12:11:30 +00:00
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some <span>body</span>',
content_type: 'text/html',
2015-01-07 12:11:30 +00:00
)
assert_match('some body', result.to_s)
assert_match('text/plain', result.to_s)
assert_match('<span>body</span>', result.to_s)
assert_match('text/html', result.to_s)
end
2014-12-28 13:02:23 +00:00
test 'notifications base' do
2014-05-27 13:22:21 +00:00
ticket = Ticket.create(
title: 'some title äöüß',
group: Group.lookup(name: 'Users'),
customer_id: 2,
state: Ticket::State.lookup(name: 'new'),
priority: Ticket::Priority.lookup(name: '2 normal'),
updated_by_id: 2,
created_by_id: 2,
2014-12-28 13:02:23 +00:00
)
article_plain = Ticket::Article.create(
ticket_id: ticket.id,
type_id: Ticket::Article::Type.where(name: 'phone').first.id,
sender_id: Ticket::Article::Sender.where(name: 'Customer').first.id,
from: 'Zammad Feedback <feedback@example.org>',
body: 'some text',
internal: false,
updated_by_id: 1,
created_by_id: 1,
2014-05-27 13:22:21 +00:00
)
tests = [
{
locale: 'en',
string: 'Hi #{recipient.firstname},',
result: 'Hi Nicole,',
},
{
locale: 'de-de',
string: 'Hi #{recipient.firstname},',
result: 'Hi Nicole,',
},
{
locale: 'de-de',
string: 'Hi #{recipient.firstname}, Group: #{ticket.group.name}',
result: 'Hi Nicole, Group: Users',
},
{
locale: 'de-de',
string: '#{config.http_type} some text',
result: 'http some text',
},
{
locale: 'de-de',
string: 'i18n(New) some text',
result: 'Neu some text',
},
{
locale: 'de-de',
string: '\'i18n(#{ticket.state.name})\' ticket state',
result: '\'neu\' ticket state',
},
{
locale: 'de-de',
string: 'a #{not_existing_object.test}',
result: 'a #{not_existing_object / no such object}',
},
{
locale: 'de-de',
string: 'a #{ticket.level1}',
result: 'a #{ticket.level1 / no such method}',
},
{
locale: 'de-de',
string: 'a #{ticket.level1.level2}',
result: 'a #{ticket.level1 / no such method}',
},
{
locale: 'de-de',
string: 'a #{ticket.title.level2}',
result: 'a #{ticket.title.level2 / no such method}',
},
{
locale: 'de-de',
string: 'by #{ticket.updated_by.fullname}',
result: 'by Nicole Braun',
},
2014-12-28 13:02:23 +00:00
{
locale: 'de-de',
string: 'Subject #{article.from}, Group: #{ticket.group.name}',
result: 'Subject Zammad Feedback <feedback@example.org>, Group: Users',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'Body #{article.body}, Group: #{ticket.group.name}',
result: 'Body some text, Group: Users',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: '\#{puts `ls`}',
result: '\#{puts `ls`} (not allowed)',
},
{
locale: 'de-de',
string: 'test i18n(new)',
result: 'test neu',
},
{
locale: 'de-de',
string: 'test i18n()',
result: 'test ',
},
{
locale: 'de-de',
string: 'test i18n(new) i18n(open)',
result: 'test neu offen',
},
]
tests.each { |test|
result = NotificationFactory.build(
string: test[:string],
objects: {
ticket: ticket,
article: article_plain,
recipient: User.find(2),
2014-12-28 13:02:23 +00:00
},
locale: test[:locale]
2014-12-28 13:02:23 +00:00
)
assert_equal(test[:result], result, 'verify result')
2014-12-28 13:02:23 +00:00
}
ticket.destroy
end
test 'notifications html' do
ticket = Ticket.create(
title: 'some title <b>äöüß</b> 2',
group: Group.lookup(name: 'Users'),
customer_id: 2,
state: Ticket::State.lookup(name: 'new'),
priority: Ticket::Priority.lookup(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
2014-12-28 13:02:23 +00:00
)
article_html = Ticket::Article.create(
ticket_id: ticket.id,
type_id: Ticket::Article::Type.where(name: 'phone').first.id,
sender_id: Ticket::Article::Sender.where(name: 'Customer').first.id,
from: 'Zammad Feedback <feedback@example.org>',
body: 'some <b>text</b><br>next line',
content_type: 'text/html',
internal: false,
updated_by_id: 1,
created_by_id: 1,
2014-12-28 13:02:23 +00:00
)
tests = [
{
locale: 'de-de',
string: 'Subject #{ticket.title}',
result: 'Subject some title <b>äöüß</b> 2',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'Subject #{article.from}, Group: #{ticket.group.name}',
result: 'Subject Zammad Feedback <feedback@example.org>, Group: Users',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'Body #{article.body}, Group: #{ticket.group.name}',
result: 'Body some text
next line, Group: Users',
2014-12-28 13:02:23 +00:00
},
]
tests.each { |test|
result = NotificationFactory.build(
string: test[:string],
objects: {
ticket: ticket,
article: article_html,
recipient: User.find(2),
2014-12-28 13:02:23 +00:00
},
locale: test[:locale]
2014-12-28 13:02:23 +00:00
)
assert_equal(test[:result], result, 'verify result')
2014-12-28 13:02:23 +00:00
}
ticket.destroy
end
test 'notifications attack' do
ticket = Ticket.create(
title: 'some title <b>äöüß</b> 3',
group: Group.lookup(name: 'Users'),
customer_id: 2,
state: Ticket::State.lookup(name: 'new'),
priority: Ticket::Priority.lookup(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
2014-12-28 13:02:23 +00:00
)
article_html = Ticket::Article.create(
ticket_id: ticket.id,
type_id: Ticket::Article::Type.where(name: 'phone').first.id,
sender_id: Ticket::Article::Sender.where(name: 'Customer').first.id,
from: 'Zammad Feedback <feedback@example.org>',
body: 'some <b>text</b><br>next line',
content_type: 'text/html',
internal: false,
updated_by_id: 1,
created_by_id: 1,
2014-12-28 13:02:23 +00:00
)
tests = [
{
locale: 'de-de',
string: '\#{puts `ls`}',
result: '\#{puts `ls`} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.destroy}',
result: 'attack#1 #{article.destroy} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#2 #{Article.where}',
result: 'attack#2 #{Article.where} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.
2014-12-28 13:02:23 +00:00
destroy}',
result: 'attack#1 #{article.
destroy} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.find}',
result: 'attack#1 #{article.find} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.update(:name => "test")}',
result: 'attack#1 #{article.update(:name => "test")} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.all}',
result: 'attack#1 #{article.all} (not allowed)',
2014-12-28 13:02:23 +00:00
},
{
locale: 'de-de',
string: 'attack#1 #{article.delete}',
result: 'attack#1 #{article.delete} (not allowed)',
2014-12-28 13:02:23 +00:00
},
]
tests.each { |test|
result = NotificationFactory.build(
string: test[:string],
objects: {
ticket: ticket,
article: article_html,
recipient: User.find(2),
},
locale: test[:locale]
)
assert_equal(test[:result], result, 'verify result')
}
2014-05-27 13:22:21 +00:00
ticket.destroy
end
test 'notifications template' do
groups = Group.where(name: 'Users')
roles = Role.where(name: 'Agent')
agent1 = User.create_or_update(
login: 'notification-template-agent1@example.com',
firstname: 'Notification<b>xxx</b>',
lastname: 'Agent1<b>yyy</b>',
email: 'notification-template-agent1@example.com',
password: 'agentpw',
active: true,
roles: roles,
groups: groups,
preferences: {
locale: 'de-de',
},
updated_by_id: 1,
created_by_id: 1,
)
result = NotificationFactory.template(
template: 'password_reset',
locale: 'de-de',
objects: {
user: agent1,
},
)
assert_match('Zurücksetzen Deines', result[:subject])
assert_match('wir haben eine Anfrage zum Zurücksetzen', result[:body])
assert_match('Dein', result[:body])
assert_match('Dein', result[:body])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_no_match('Your', result[:body])
result = NotificationFactory.template(
template: 'password_reset',
locale: 'de',
objects: {
user: agent1,
},
)
assert_match('Zurücksetzen Deines', result[:subject])
assert_match('wir haben eine Anfrage zum Zurücksetzen', result[:body])
assert_match('Dein', result[:body])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_no_match('Your', result[:body])
result = NotificationFactory.template(
template: 'password_reset',
locale: 'es-us',
objects: {
user: agent1,
},
)
assert_match('Reset your', result[:subject])
assert_match('We received a request to reset the password', result[:body])
assert_match('Your', result[:body])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_no_match('Dein', result[:body])
ticket = Ticket.create(
2016-02-20 08:08:35 +00:00
group_id: Group.lookup(name: 'Users').id,
customer_id: User.lookup(email: 'nicole.braun@zammad.org').id,
owner_id: User.lookup(login: '-').id,
title: 'Welcome to Zammad!',
2016-02-20 08:08:35 +00:00
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,
)
article = Ticket::Article.create(
ticket_id: ticket.id,
2016-02-20 08:08:35 +00:00
type_id: Ticket::Article::Type.lookup(name: 'phone').id,
sender_id: Ticket::Article::Sender.lookup(name: 'Customer').id,
from: 'Zammad Feedback <feedback@zammad.org>',
content_type: 'text/plain',
body: 'Welcome!
<b>test123</b>',
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
changes = {}
result = NotificationFactory.template(
template: 'ticket_create',
locale: 'es-us',
objects: {
ticket: ticket,
article: article,
recipient: agent1,
changes: changes,
},
)
assert_match('New Ticket', result[:subject])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_match('has been created by', result[:body])
assert_match('&lt;b&gt;test123&lt;/b&gt;', result[:body])
assert_match('Manage your notifications settings', result[:body])
assert_no_match('Dein', result[:body])
result = NotificationFactory.template(
template: 'ticket_create',
locale: 'de-de',
objects: {
ticket: ticket,
article: article,
recipient: agent1,
changes: changes,
},
)
assert_match('Neues Ticket', result[:subject])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_match('es wurde ein neues Ticket', result[:body])
assert_match('&lt;b&gt;test123&lt;/b&gt;', result[:body])
2016-02-23 12:01:39 +00:00
assert_match('Benachrichtigungseinstellungen Verwalten', result[:body])
assert_no_match('Your', result[:body])
article = Ticket::Article.create(
ticket_id: ticket.id,
2016-02-20 08:08:35 +00:00
type_id: Ticket::Article::Type.lookup(name: 'phone').id,
sender_id: Ticket::Article::Sender.lookup(name: 'Customer').id,
from: 'Zammad Feedback <feedback@zammad.org>',
content_type: 'text/html',
body: 'Welcome!
<b>test123</b>',
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
changes = {
state: %w(aaa bbb),
group: %w(xxx yyy),
}
result = NotificationFactory.template(
template: 'ticket_update',
locale: 'es-us',
objects: {
ticket: ticket,
article: article,
recipient: agent1,
changes: changes,
},
)
assert_match('Updated Ticket', result[:subject])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_match('has been updated by', result[:body])
assert_match('<b>test123</b>', result[:body])
assert_match('Manage your notifications settings', result[:body])
assert_no_match('Dein', result[:body])
result = NotificationFactory.template(
template: 'ticket_update',
locale: 'de-de',
objects: {
ticket: ticket,
article: article,
recipient: agent1,
changes: changes,
},
)
assert_match('Ticket aktualisiert', result[:subject])
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_match('wurde von', result[:body])
assert_match('<b>test123</b>', result[:body])
2016-02-23 12:01:39 +00:00
assert_match('Benachrichtigungseinstellungen Verwalten', result[:body])
assert_no_match('Your', result[:body])
end
test 'notifications settings' do
groups = Group.all
roles = Role.where(name: 'Agent')
agent1 = User.create_or_update(
login: 'notification-settings-agent1@example.com',
firstname: 'Notification<b>xxx</b>',
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_or_update(
login: 'notification-settings-agent2@example.com',
firstname: 'Notification<b>xxx</b>',
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_or_update(
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
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
# no group selection
agent1.preferences[:notification_config][:group_ids] = []
agent1.save
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
agent1.preferences[:notification_config][:group_ids] = ['-']
agent1.save
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
# dedecated group selection
agent1.preferences[:notification_config][:group_ids] = [Group.lookup(name: 'Users').id]
agent1.save
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
assert_equal(nil, result)
result = NotificationFactory.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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
assert_equal(nil, result)
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
end
end