# encoding: utf-8 require 'test_helper' class NotificationFactoryTest < ActiveSupport::TestCase Translation.load('de-de') 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