# encoding: utf-8
require 'test_helper'
class NotificationFactoryTest < ActiveSupport::TestCase
test 'notifications send' do
result = NotificationFactory.send(
recipient: User.find(2),
subject: 'sime 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.send(
recipient: User.find(2),
subject: 'sime 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.send(
recipient: User.find(2),
subject: 'sime 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)
end
test 'notifications base' do
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,
)
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 ',
body: 'some text',
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
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',
},
{
locale: 'de-de',
string: 'Subject #{article.from}, Group: #{ticket.group.name}',
result: 'Subject Zammad Feedback , Group: Users',
},
{
locale: 'de-de',
string: 'Body #{article.body}, Group: #{ticket.group.name}',
result: 'Body some text, Group: Users',
},
{
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),
},
locale: test[:locale]
)
assert_equal( test[:result], result, 'verify result' )
}
ticket.destroy
end
test 'notifications html' do
ticket = Ticket.create(
title: 'some title äöüß 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,
)
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 ',
body: 'some text
next line',
content_type: 'text/html',
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
tests = [
{
locale: 'de-de',
string: 'Subject #{ticket.title}',
result: 'Subject some title äöüß 2',
},
{
locale: 'de-de',
string: 'Subject #{article.from}, Group: #{ticket.group.name}',
result: 'Subject Zammad Feedback , Group: Users',
},
{
locale: 'de-de',
string: 'Body #{article.body}, Group: #{ticket.group.name}',
result: 'Body some text
next line, Group: Users',
},
]
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' )
}
ticket.destroy
end
test 'notifications attack' do
ticket = Ticket.create(
title: 'some title äöüß 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,
)
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 ',
body: 'some text
next line',
content_type: 'text/html',
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
tests = [
{
locale: 'de-de',
string: '\#{puts `ls`}',
result: '\#{puts `ls`} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.destroy}',
result: 'attack#1 #{article.destroy} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#2 #{Article.where}',
result: 'attack#2 #{Article.where} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.
destroy}',
result: 'attack#1 #{article.
destroy} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.find}',
result: 'attack#1 #{article.find} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.update(:name => "test")}',
result: 'attack#1 #{article.update(:name => "test")} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.all}',
result: 'attack#1 #{article.all} (not allowed)',
},
{
locale: 'de-de',
string: 'attack#1 #{article.delete}',
result: 'attack#1 #{article.delete} (not allowed)',
},
]
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' )
}
ticket.destroy
end
end