123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- # 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 <span>body</span>',
- content_type: 'text/html',
- )
- 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
- 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 <feedback@example.org>',
- 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 <feedback@example.org>, 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 <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,
- )
- 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,
- )
- tests = [
- {
- locale: 'de-de',
- string: 'Subject #{ticket.title}',
- result: 'Subject some title <b>äöüß</b> 2',
- },
- {
- locale: 'de-de',
- string: 'Subject #{article.from}, Group: #{ticket.group.name}',
- result: 'Subject Zammad Feedback <feedback@example.org>, 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 <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,
- )
- 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,
- )
- 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
|