Refactoring of NotificationFactory.

This commit is contained in:
Martin Edenhofer 2016-04-14 01:40:37 +02:00
parent a71a87be60
commit ed5b058d6e
11 changed files with 521 additions and 805 deletions

View file

@ -175,7 +175,7 @@ class FirstStepsController < ApplicationController
customer = test_customer
from = "#{customer.fullname} <#{customer.email}>"
original_user_id = UserInfo.current_user_id
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'test_ticket',
locale: agent.preferences[:locale] || 'en-us',
objects: {

View file

@ -136,7 +136,7 @@ class UsersController < ApplicationController
# send inviteation if needed / only if session exists
if params[:invite] && current_user
token = Token.create(action: 'PasswordReset', user_id: user.id)
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: 'user_invite',
user: user,
objects: {
@ -150,7 +150,7 @@ class UsersController < ApplicationController
# send email verify
if params[:signup] && !current_user
token = Token.create(action: 'EmailVerify', user_id: user.id)
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: 'signup',
user: user,
objects: {
@ -421,7 +421,7 @@ curl http://localhost/api/v1/users/password_reset.json -v -u #{login}:#{password
# send mail
user = result[:user]
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: 'password_reset',
user: user,
objects: result
@ -478,7 +478,7 @@ curl http://localhost/api/v1/users/password_reset_verify.json -v -u #{login}:#{p
# send mail
if user
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: 'password_change',
user: user,
objects: {
@ -547,7 +547,7 @@ curl http://localhost/api/v1/users/password_change.json -v -u #{login}:#{passwor
user.update_attributes(password: params[:password_new])
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: 'password_change',
user: user,
objects: {

View file

@ -59,7 +59,7 @@ class Observer::Ticket::Notification::BackgroundJob
end
already_checked_recipient_ids = {}
possible_recipients.each {|user|
result = NotificationFactory.notification_settings(user, ticket, @p[:type])
result = NotificationFactory::Mailer.notification_settings(user, ticket, @p[:type])
next if !result
next if already_checked_recipient_ids[result[:user].id]
already_checked_recipient_ids[result[:user].id] = true
@ -165,7 +165,7 @@ class Observer::Ticket::Notification::BackgroundJob
raise "unknown type for notification #{@p[:type]}"
end
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: template,
user: user,
objects: {

View file

@ -189,7 +189,7 @@ send user notification about new device or new location for device
def notification_send(template)
user = User.find(user_id)
NotificationFactory.notification(
NotificationFactory::Mailer.notification(
template: template,
user: user,
objects: {

View file

@ -30,13 +30,16 @@
color: #aaaaaa;
}
</style>
<% if @objects[:standalone] != true %>
<div class="header">
<%= c 'product_name' %> <%= t 'Notification' %>
</div>
<% end %>
<%= d 'message', false %>
<% if @objects[:standalone] != true %>
<div class="footer">
<a href="<%= c 'http_type' %>://<%= c 'fqdn' %>/#profile/notifications"><%= t 'Manage your notifications settings' %></a> <% if !c('organization').empty? %>| <%= c 'organization' %><% end %>
</div>
<% end %>

View file

@ -2,330 +2,42 @@ module NotificationFactory
=begin
get notification settings for user and notification type
result = NotificationFactory.notification_settings(user, ticket, type)
type: create | update | reminder_reached | pending
returns
{
user: user,
channels: {
online: true,
email: true,
},
}
=end
def self.notification_settings(user, ticket, type)
return if !user.preferences
return if !user.preferences['notification_config']
matrix = user.preferences['notification_config']['matrix']
return if !matrix
# check if group is in selecd groups
if ticket.owner_id != user.id
selected_group_ids = user.preferences['notification_config']['group_ids']
if selected_group_ids
if selected_group_ids.class == Array
hit = nil
if selected_group_ids.empty?
hit = true
elsif selected_group_ids[0] == '-' && selected_group_ids.count == 1
hit = true
else
hit = false
selected_group_ids.each {|selected_group_id|
if selected_group_id.to_s == ticket.group_id.to_s
hit = true
break
end
}
end
return if !hit
end
end
end
return if !matrix[type]
data = matrix[type]
return if !data
return if !data['criteria']
channels = data['channel']
return if !channels
if data['criteria']['owned_by_me'] && ticket.owner_id == user.id
return {
user: user,
channels: channels
}
end
if data['criteria']['owned_by_nobody'] && ticket.owner_id == 1
return {
user: user,
channels: channels
}
end
return if !data['criteria']['no']
{
user: user,
channels: channels
}
end
=begin
# deprecated, will be removed with 2.0
result_string = NotificationFactory.build(
string: 'Hi #{recipient.firstname},',
objects: {
ticket : ticket,
recipient: User.find(2),
},
locale: 'en',
)
=end
def self.build(data)
data[:string].gsub!( / \#\{ \s* ( .+? ) \s* \} /xm ) { |placeholder|
# store possible callback to work with
# and check if it's valid for execution
original_string = $&
callback = $1
object_name = nil
object_method = nil
if callback =~ /\A ( [\w]+ )\.( [\w\.]+ ) \z/x
object_name = $1
object_method = $2
end
# do validaton, ignore some methodes
if callback =~ /(`|\.(|\s*)(save|destroy|delete|remove|drop|update\(|update_att|create\(|new|all|where|find))/i
placeholder = "#{original_string} (not allowed)"
# get value based on object_name and object_method
elsif object_name && object_method
# use config params
if object_name == 'config'
placeholder = Setting.get(object_method)
# if object_name dosn't exist
elsif !data[:objects][object_name.to_sym]
placeholder = "\#{#{object_name} / no such object}"
else
value = nil
object_refs = data[:objects][object_name.to_sym]
object_methods = object_method.split('.')
object_methods_s = ''
object_methods.each {|method|
if object_methods_s != ''
object_methods_s += '.'
end
object_methods_s += method
# if method exists
if !object_refs.respond_to?( method.to_sym )
value = "\#{#{object_name}.#{object_methods_s} / no such method}"
break
end
object_refs = object_refs.send( method.to_sym )
# add body quote
next if object_name != 'article'
next if method != 'body'
next if data[:objects][:article].content_type != 'text/html'
object_refs = object_refs.html2text.chomp
}
placeholder = if !value
object_refs
else
value
end
end
end
placeholder
}
# translate
data[:string].gsub!( /i18n\((|.+?)\)/ ) {
string = $1
locale = data[:locale] || 'en'
Translation.translate( locale, string )
}
data[:string]
end
=begin
success = NotificationFactory.send(
recipient: User.find(123),
subject: 'sime subject',
body: 'some body',
content_type: '', # optional, e. g. 'text/html'
references: ['message-id123', 'message-id456'],
)
=end
def self.send(data)
sender = Setting.get('notification_sender')
Rails.logger.info "Send notification to: #{data[:recipient][:email]} (from #{sender})"
content_type = 'text/plain'
if data[:content_type]
content_type = data[:content_type]
end
# get active Email::Outbound Channel and send
channel = Channel.find_by(area: 'Email::Notification', active: true)
channel.deliver(
{
# in_reply_to: in_reply_to,
from: sender,
to: data[:recipient][:email],
subject: data[:subject],
references: data[:references],
body: data[:body],
content_type: content_type,
},
true
)
end
=begin
NotificationFactory.notification(
template: 'password_reset',
user: User.find(2),
objects: {
recipient: User.find(2),
},
main_object: ticket.find(123), # optional
references: ['message-id123', 'message-id456'],
)
=end
def self.notification(data)
# get subject
result = NotificationFactory.template(
template: data[:template],
locale: data[:user].preferences[:locale],
objects: data[:objects],
)
# rebuild subject
if data[:main_object] && data[:main_object].respond_to?(:subject_build)
result[:subject] = data[:main_object].subject_build(result[:subject])
end
NotificationFactory.send(
recipient: data[:user],
subject: result[:subject],
body: result[:body],
content_type: 'text/html',
references: data[:references],
)
end
=begin
get count of already sent notifications
count = NotificationFactory.already_sent?(ticket, recipient_user, type)
retunes
8
=end
def self.already_sent?(ticket, recipient, type)
result = ticket.history_get()
count = 0
result.each {|item|
next if item['type'] != 'notification'
next if item['object'] != 'Ticket'
next if item['value_to'] !~ /#{recipient.email}/i
next if item['value_to'] !~ /#{type}/i
count += 1
}
count
end
=begin
result = NotificationFactory.template(
result = NotificationFactory.template_read(
template: 'password_reset',
locale: 'en-us',
objects: {
recipient: User.find(2),
},
)
result = NotificationFactory.template(
templateInline: "Invitation to <%= c 'product_name' %> at <%= c 'fqdn' %>",
locale: 'en-us',
objects: {
recipient: User.find(2),
},
)
only raw subject/body
result = NotificationFactory.template(
template: 'password_reset',
locale: 'en-us',
objects: {
recipient: User.find(2),
},
raw: true,
format: 'html', # md
type: 'mailer', # slack
)
returns
{
subject: 'some sobject',
subject: 'some subject',
body: 'some body',
}
=end
def self.template(data)
if data[:templateInline]
return NotificationFactory::Template.new(data[:objects], data[:locale], data[:templateInline], false).render
end
def self.template_read(data)
template_subject = nil
template_body = ''
locale = data[:locale] || 'en'
template = data[:template]
format = data[:format]
type = data[:type]
root = Rails.root
location = "#{root}/app/views/mailer/#{template}/#{locale}.html.erb"
location = "#{root}/app/views/#{type}/#{template}/#{locale}.#{format}.erb"
# as fallback, use 2 char locale
if !File.exist?(location)
locale = locale[0, 2]
location = "#{root}/app/views/mailer/#{template}/#{locale}.html.erb"
location = "#{root}/app/views/#{type}/#{template}/#{locale}.#{format}.erb"
end
# as fallback, use en
if !File.exist?(location)
location = "#{root}/app/views/mailer/#{template}/en.html.erb"
location = "#{root}/app/views/#{type}/#{template}/en.#{format}.erb"
end
File.open(location, 'r:UTF-8').each do |line|
@ -335,94 +47,34 @@ returns
end
template_body += line
end
message_subject = NotificationFactory::Template.new(data[:objects], data[:locale], template_subject, false).render
message_body = NotificationFactory::Template.new(data[:objects], data[:locale], template_body).render
if !data[:raw]
application_template = nil
File.open("#{root}/app/views/mailer/application.html.erb", 'r:UTF-8') do |file|
application_template = file.read
end
data[:objects][:message] = message_body
message_body = NotificationFactory::Template.new(data[:objects], data[:locale], application_template).render
end
{
subject: message_subject,
body: message_body,
subject: template_subject,
body: template_body,
}
end
class Template
=begin
def initialize(objects, locale, template, escape = true)
@objects = objects
@locale = locale || 'en-us'
@template = template
@escape = escape
end
def render
ERB.new(@template).result(binding)
end
def d(key, escape = nil)
# do validaton, ignore some methodes
if key =~ /(`|\.(|\s*)(save|destroy|delete|remove|drop|update\(|update_att|create\(|new|all|where|find))/i
return "#{key} (not allowed)"
end
value = nil
object_methods = key.split('.')
object_name = object_methods.shift.to_sym
object_refs = @objects[object_name]
object_methods_s = ''
object_methods.each {|method|
if object_methods_s != ''
object_methods_s += '.'
end
object_methods_s += method
# if method exists
if !object_refs.respond_to?( method.to_sym )
value = "\#{#{object_name}.#{object_methods_s} / no such method}"
break
end
object_refs = object_refs.send( method.to_sym )
}
placeholder = if !value
object_refs
else
value
end
return placeholder if escape == false || (escape.nil? && !@escape)
h placeholder
end
def c(key, escape = nil)
config = Setting.get(key)
return config if escape == false || (escape.nil? && !@escape)
h config
end
def t(key, escape = nil)
translation = Translation.translate(@locale, key)
return translation if escape == false || (escape.nil? && !@escape)
h translation
end
def a(article)
content_type = d "#{article}.content_type", false
if content_type =~ /html/
return d "#{article}.body", false
end
d("#{article}.body", false).text2html
end
def h(key)
return key if !key
CGI.escapeHTML(key.to_s)
string = NotificationFactory.application_template_read(
format: 'html', # md
type: 'mailer', # slack
)
returns
'some template'
=end
def self.application_template_read(data)
format = data[:format]
type = data[:type]
root = Rails.root
application_template = nil
File.open("#{root}/app/views/#{type}/application.#{format}.erb", 'r:UTF-8') do |file|
application_template = file.read
end
application_template
end
end

View file

@ -0,0 +1,248 @@
class NotificationFactory::Mailer
=begin
get notification settings for user and notification type
result = NotificationFactory::Mailer.notification_settings(user, ticket, type)
type: create | update | reminder_reached | pending
returns
{
user: user,
channels: {
online: true,
email: true,
},
}
=end
def self.notification_settings(user, ticket, type)
return if !user.preferences
return if !user.preferences['notification_config']
matrix = user.preferences['notification_config']['matrix']
return if !matrix
# check if group is in selecd groups
if ticket.owner_id != user.id
selected_group_ids = user.preferences['notification_config']['group_ids']
if selected_group_ids
if selected_group_ids.class == Array
hit = nil
if selected_group_ids.empty?
hit = true
elsif selected_group_ids[0] == '-' && selected_group_ids.count == 1
hit = true
else
hit = false
selected_group_ids.each {|selected_group_id|
if selected_group_id.to_s == ticket.group_id.to_s
hit = true
break
end
}
end
return if !hit
end
end
end
return if !matrix[type]
data = matrix[type]
return if !data
return if !data['criteria']
channels = data['channel']
return if !channels
if data['criteria']['owned_by_me'] && ticket.owner_id == user.id
return {
user: user,
channels: channels
}
end
if data['criteria']['owned_by_nobody'] && ticket.owner_id == 1
return {
user: user,
channels: channels
}
end
return if !data['criteria']['no']
{
user: user,
channels: channels
}
end
=begin
success = NotificationFactory::Mailer.send(
recipient: User.find(123),
subject: 'sime subject',
body: 'some body',
content_type: '', # optional, e. g. 'text/html'
references: ['message-id123', 'message-id456'],
)
=end
def self.send(data)
sender = Setting.get('notification_sender')
Rails.logger.info "Send notification to: #{data[:recipient][:email]} (from #{sender})"
content_type = 'text/plain'
if data[:content_type]
content_type = data[:content_type]
end
# get active Email::Outbound Channel and send
channel = Channel.find_by(area: 'Email::Notification', active: true)
channel.deliver(
{
# in_reply_to: in_reply_to,
from: sender,
to: data[:recipient][:email],
subject: data[:subject],
references: data[:references],
body: data[:body],
content_type: content_type,
},
true
)
end
=begin
NotificationFactory::Mailer.notification(
template: 'password_reset',
user: User.find(2),
objects: {
recipient: User.find(2),
},
main_object: ticket.find(123), # optional
references: ['message-id123', 'message-id456'],
standalone: true, # default: false - will send header & footer
)
=end
def self.notification(data)
# get subject
result = NotificationFactory::Mailer.template(
template: data[:template],
locale: data[:user][:preferences][:locale],
objects: data[:objects],
standalone: data[:standalone],
)
# rebuild subject
if data[:main_object] && data[:main_object].respond_to?(:subject_build)
result[:subject] = data[:main_object].subject_build(result[:subject])
end
NotificationFactory::Mailer.send(
recipient: data[:user],
subject: result[:subject],
body: result[:body],
content_type: 'text/html',
references: data[:references],
)
end
=begin
get count of already sent notifications
count = NotificationFactory::Mailer.already_sent?(ticket, recipient_user, type)
retunes
8
=end
def self.already_sent?(ticket, recipient, type)
result = ticket.history_get()
count = 0
result.each {|item|
next if item['type'] != 'notification'
next if item['object'] != 'Ticket'
next if item['value_to'] !~ /#{recipient.email}/i
next if item['value_to'] !~ /#{type}/i
count += 1
}
count
end
=begin
result = NotificationFactory::Mailer.template(
template: 'password_reset',
locale: 'en-us',
objects: {
recipient: User.find(2),
},
)
result = NotificationFactory::Mailer.template(
templateInline: "Invitation to <%= c 'product_name' %> at <%= c 'fqdn' %>",
locale: 'en-us',
objects: {
recipient: User.find(2),
},
)
only raw subject/body
result = NotificationFactory::Mailer.template(
template: 'password_reset',
locale: 'en-us',
objects: {
recipient: User.find(2),
},
raw: true, # will not add application template
standalone: true, # default: false - will send header & footer
)
returns
{
subject: 'some subject',
body: 'some body',
}
=end
def self.template(data)
if data[:templateInline]
return NotificationFactory::Template.new(data[:objects], data[:locale], data[:templateInline], false).render
end
template = NotificationFactory.template_read(
locale: data[:locale] || 'en',
template: data[:template],
format: 'html',
type: 'mailer',
)
message_subject = NotificationFactory::Template.new(data[:objects], data[:locale], template[:subject], false).render
message_body = NotificationFactory::Template.new(data[:objects], data[:locale], template[:body]).render
if !data[:raw]
application_template = NotificationFactory.application_template_read(
format: 'html',
type: 'mailer',
)
data[:objects][:message] = message_body
data[:objects][:standalone] = data[:standalone]
message_body = NotificationFactory::Template.new(data[:objects], data[:locale], application_template).render
end
{
subject: message_subject,
body: message_body,
}
end
end

View file

@ -0,0 +1,72 @@
class NotificationFactory::Template
def initialize(objects, locale, template, escape = true)
@objects = objects
@locale = locale || 'en-us'
@template = template
@escape = escape
end
def render
ERB.new(@template).result(binding)
end
def d(key, escape = nil)
# do validaton, ignore some methodes
if key =~ /(`|\.(|\s*)(save|destroy|delete|remove|drop|update\(|update_att|create\(|new|all|where|find))/i
return "#{key} (not allowed)"
end
value = nil
object_methods = key.split('.')
object_name = object_methods.shift.to_sym
object_refs = @objects[object_name]
object_methods_s = ''
object_methods.each {|method|
if object_methods_s != ''
object_methods_s += '.'
end
object_methods_s += method
# if method exists
if !object_refs.respond_to?( method.to_sym )
value = "\#{#{object_name}.#{object_methods_s} / no such method}"
break
end
object_refs = object_refs.send( method.to_sym )
}
placeholder = if !value
object_refs
else
value
end
return placeholder if escape == false || (escape.nil? && !@escape)
h placeholder
end
def c(key, escape = nil)
config = Setting.get(key)
return config if escape == false || (escape.nil? && !@escape)
h config
end
def t(key, escape = nil)
translation = Translation.translate(@locale, key)
return translation if escape == false || (escape.nil? && !@escape)
h translation
end
def a(article)
content_type = d "#{article}.content_type", false
if content_type =~ /html/
return d "#{article}.body", false
end
d("#{article}.body", false).text2html
end
def h(key)
return key if !key
CGI.escapeHTML(key.to_s)
end
end

View file

@ -1,12 +1,12 @@
# encoding: utf-8
require 'test_helper'
class NotificationFactoryTest < ActiveSupport::TestCase
class NotificationFactoryMailerTest < ActiveSupport::TestCase
Translation.load('de-de')
test 'notifications send' do
result = NotificationFactory.send(
result = NotificationFactory::Mailer.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some body',
@ -16,7 +16,7 @@ class NotificationFactoryTest < ActiveSupport::TestCase
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory.send(
result = NotificationFactory::Mailer.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some body',
@ -26,7 +26,7 @@ class NotificationFactoryTest < ActiveSupport::TestCase
assert_match('text/plain', result.to_s)
assert_no_match('text/html', result.to_s)
result = NotificationFactory.send(
result = NotificationFactory::Mailer.send(
recipient: User.find(2),
subject: 'sime subject',
body: 'some <span>body</span>',
@ -38,265 +38,6 @@ class NotificationFactoryTest < ActiveSupport::TestCase
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
test 'notifications template' do
groups = Group.where(name: 'Users')
roles = Role.where(name: 'Agent')
@ -316,7 +57,7 @@ next line, Group: Users',
created_by_id: 1,
)
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'password_reset',
locale: 'de-de',
objects: {
@ -330,7 +71,7 @@ next line, Group: Users',
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_no_match('Your', result[:body])
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'password_reset',
locale: 'de',
objects: {
@ -343,7 +84,7 @@ next line, Group: Users',
assert_match('Notification&lt;b&gt;xxx&lt;/b&gt;', result[:body])
assert_no_match('Your', result[:body])
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'password_reset',
locale: 'es-us',
objects: {
@ -380,7 +121,7 @@ next line, Group: Users',
)
changes = {}
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'ticket_create',
locale: 'es-us',
objects: {
@ -397,7 +138,7 @@ next line, Group: Users',
assert_match('Manage your notifications settings', result[:body])
assert_no_match('Dein', result[:body])
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'ticket_create',
locale: 'de-de',
objects: {
@ -430,7 +171,7 @@ next line, Group: Users',
state: %w(aaa bbb),
group: %w(xxx yyy),
}
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'ticket_update',
locale: 'es-us',
objects: {
@ -447,7 +188,7 @@ next line, Group: Users',
assert_match('Manage your notifications settings', result[:body])
assert_no_match('Dein', result[:body])
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
template: 'ticket_update',
locale: 'de-de',
objects: {
@ -549,146 +290,146 @@ next line, Group: Users',
agent1.preferences[:notification_config][:group_ids] = nil
agent1.save
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket4, 'create')
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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
result = NotificationFactory::Mailer.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')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket4, 'create')
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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
agent1.preferences[:notification_config][:group_ids] = ['-']
agent1.save
result = NotificationFactory.notification_settings(agent1, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket4, 'create')
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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
result = NotificationFactory::Mailer.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')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket2, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent1, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent1, ticket3, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent1, ticket4, 'create')
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
result = NotificationFactory.notification_settings(agent2, ticket1, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket1, 'create')
assert_equal(true, result[:channels][:online])
assert_equal(true, result[:channels][:email])
result = NotificationFactory.notification_settings(agent2, ticket2, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket2, 'create')
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket3, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket3, 'create')
assert_equal(nil, result)
assert_equal(nil, result)
result = NotificationFactory.notification_settings(agent2, ticket4, 'create')
result = NotificationFactory::Mailer.notification_settings(agent2, ticket4, 'create')
assert_equal(nil, result)
end

View file

@ -60,7 +60,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
tickets = []
tickets.push ticket1
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -79,7 +79,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
updated_by_id: customer_user.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -117,7 +117,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
tickets = []
tickets.push ticket2
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -136,7 +136,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
updated_by_id: customer_user.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -173,7 +173,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
# remember ticket
tickets.push ticket3
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -192,15 +192,15 @@ class OnlineNotificationTest < ActiveSupport::TestCase
updated_by_id: customer_user.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# because it's already closed
assert(OnlineNotification.all_seen?('Ticket', ticket3.id))
assert_equal(1, NotificationFactory.already_sent?(ticket3, agent_user1, 'update'))
assert_equal(1, NotificationFactory.already_sent?(ticket3, agent_user2, 'update'))
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket3, agent_user1, 'update'))
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket3, agent_user2, 'update'))
assert(!OnlineNotification.exists?(agent_user1, 'Ticket', ticket3.id, 'update', customer_user, false))
assert(OnlineNotification.exists?(agent_user1, 'Ticket', ticket3.id, 'update', customer_user, true))
assert(!OnlineNotification.exists?(agent_user2, 'Ticket', ticket3.id, 'update', customer_user, false))
@ -217,7 +217,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
internal: false
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -228,8 +228,8 @@ class OnlineNotificationTest < ActiveSupport::TestCase
assert(OnlineNotification.exists?(agent_user1, 'Ticket', ticket3.id, 'update', customer_user, true))
assert(OnlineNotification.exists?(agent_user2, 'Ticket', ticket3.id, 'update', customer_user, false))
assert(OnlineNotification.exists?(agent_user2, 'Ticket', ticket3.id, 'update', customer_user, true))
assert_equal(2, NotificationFactory.already_sent?(ticket3, agent_user1, 'update'))
assert_equal(2, NotificationFactory.already_sent?(ticket3, agent_user2, 'update'))
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket3, agent_user1, 'update'))
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket3, agent_user2, 'update'))
# case #4
ticket4 = Ticket.create(
@ -256,7 +256,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
# remember ticket
tickets.push ticket4
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -275,7 +275,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
updated_by_id: customer_user.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -312,7 +312,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
# remember ticket
tickets.push ticket5
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
@ -331,7 +331,7 @@ class OnlineNotificationTest < ActiveSupport::TestCase
updated_by_id: customer_user.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off

View file

@ -85,15 +85,15 @@ class TicketNotificationTest < ActiveSupport::TestCase
)
assert(ticket1)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = nil
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# create ticket in group
ticket1 = Ticket.create(
@ -120,15 +120,15 @@ class TicketNotificationTest < ActiveSupport::TestCase
)
assert(ticket1)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = true
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
end
test 'ticket notification - simple' do
@ -158,29 +158,29 @@ class TicketNotificationTest < ActiveSupport::TestCase
)
assert( ticket1, 'ticket created - ticket notification simple' )
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = true
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# update ticket attributes
ticket1.title = "#{ticket1.title} - #2"
ticket1.priority = Ticket::Priority.lookup(name: '3 high')
ticket1.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(2, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(2, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# add article to ticket
Ticket::Article.create(
@ -195,14 +195,14 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: agent1.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to not to agent1 but to agent2
assert_equal(2, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(3, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(3, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# update ticket by user
ticket1.owner_id = agent1.id
@ -220,14 +220,14 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: agent1.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to not to agent1 but to agent2
assert_equal(2, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(3, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(3, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# create ticket with agent1 as owner
ticket2 = Ticket.create(
@ -254,15 +254,15 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: agent1.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
assert(ticket2, 'ticket created')
# verify notifications to no one
assert_equal(0, NotificationFactory.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory.already_sent?(ticket2, agent2, 'email'), ticket2.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket2, agent2, 'email'), ticket2.id)
# update ticket
ticket2.title = "#{ticket2.title} - #2"
@ -270,14 +270,14 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket2.priority = Ticket::Priority.lookup(name: '3 high')
ticket2.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to no one
assert_equal(0, NotificationFactory.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory.already_sent?(ticket2, agent2, 'email'), ticket2.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket2, agent2, 'email'), ticket2.id)
# update ticket
ticket2.title = "#{ticket2.title} - #3"
@ -285,14 +285,14 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket2.priority = Ticket::Priority.lookup(name: '2 normal')
ticket2.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 and not to agent2
assert_equal(1, NotificationFactory.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory.already_sent?(ticket2, agent2, 'email'), ticket2.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket2, agent2, 'email'), ticket2.id)
# create ticket with agent2 and agent1 as owner
ticket3 = Ticket.create(
@ -319,15 +319,15 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: agent2.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
assert(ticket3, 'ticket created')
# verify notifications to agent1 and not to agent2
assert_equal(1, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
# update ticket
ticket3.title = "#{ticket3.title} - #2"
@ -335,14 +335,14 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket3.priority = Ticket::Priority.lookup(name: '3 high')
ticket3.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to no one
assert_equal(1, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
# update ticket
ticket3.title = "#{ticket3.title} - #3"
@ -350,27 +350,27 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket3.priority = Ticket::Priority.lookup(name: '2 normal')
ticket3.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 and not to agent2
assert_equal(2, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
# update article / not notification should be sent
article_inbound.internal = true
article_inbound.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications not to agent1 and not to agent2
assert_equal(2, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
delete = ticket1.destroy
assert(delete, 'ticket1 destroy')
@ -425,29 +425,29 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = false
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# update ticket attributes
ticket1.title = "#{ticket1.title} - #2"
ticket1.priority = Ticket::Priority.lookup(name: '3 high')
ticket1.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(2, NotificationFactory.already_sent?(ticket1, agent2, 'email'), ticket1.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket1, agent1, 'email'), ticket1.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket1, agent2, 'email'), ticket1.id)
# create ticket in group
ticket2 = Ticket.create(
@ -474,28 +474,28 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(1, NotificationFactory.already_sent?(ticket2, agent2, 'email'), ticket2.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket2, agent2, 'email'), ticket2.id)
# update ticket attributes
ticket2.title = "#{ticket2.title} - #2"
ticket2.priority = Ticket::Priority.lookup(name: '3 high')
ticket2.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(2, NotificationFactory.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(2, NotificationFactory.already_sent?(ticket2, agent2, 'email'), ticket2.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket2, agent1, 'email'), ticket2.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket2, agent2, 'email'), ticket2.id)
# create ticket in group
ticket3 = Ticket.create(
@ -522,28 +522,28 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(1, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
# update ticket attributes
ticket3.title = "#{ticket3.title} - #2"
ticket3.priority = Ticket::Priority.lookup(name: '3 high')
ticket3.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(2, NotificationFactory.already_sent?(ticket3, agent2, 'email'), ticket3.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket3, agent1, 'email'), ticket3.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket3, agent2, 'email'), ticket3.id)
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_me'] = true
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_nobody'] = false
@ -587,29 +587,29 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = false
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket4, agent1, 'email'), ticket4.id)
assert_equal(1, NotificationFactory.already_sent?(ticket4, agent2, 'email'), ticket4.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket4, agent1, 'email'), ticket4.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket4, agent2, 'email'), ticket4.id)
# update ticket attributes
ticket4.title = "#{ticket4.title} - #2"
ticket4.priority = Ticket::Priority.lookup(name: '3 high')
ticket4.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(2, NotificationFactory.already_sent?(ticket4, agent1, 'email'), ticket4.id)
assert_equal(2, NotificationFactory.already_sent?(ticket4, agent2, 'email'), ticket4.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket4, agent1, 'email'), ticket4.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket4, agent2, 'email'), ticket4.id)
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_me'] = true
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_nobody'] = false
@ -653,29 +653,29 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = false
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket5, agent1, 'email'), ticket5.id)
assert_equal(0, NotificationFactory.already_sent?(ticket5, agent2, 'email'), ticket5.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket5, agent1, 'email'), ticket5.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket5, agent2, 'email'), ticket5.id)
# update ticket attributes
ticket5.title = "#{ticket5.title} - #2"
ticket5.priority = Ticket::Priority.lookup(name: '3 high')
ticket5.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(2, NotificationFactory.already_sent?(ticket5, agent1, 'email'), ticket5.id)
assert_equal(0, NotificationFactory.already_sent?(ticket5, agent2, 'email'), ticket5.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket5, agent1, 'email'), ticket5.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket5, agent2, 'email'), ticket5.id)
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_me'] = true
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_nobody'] = false
@ -720,33 +720,33 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = false
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(1, NotificationFactory.already_sent?(ticket6, agent1, 'email'), ticket6.id)
assert_equal(1, NotificationFactory.already_sent?(ticket6, agent1, 'online'), ticket6.id)
assert_equal(0, NotificationFactory.already_sent?(ticket6, agent2, 'email'), ticket6.id)
assert_equal(0, NotificationFactory.already_sent?(ticket6, agent2, 'online'), ticket6.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket6, agent1, 'email'), ticket6.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket6, agent1, 'online'), ticket6.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket6, agent2, 'email'), ticket6.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket6, agent2, 'online'), ticket6.id)
# update ticket attributes
ticket6.title = "#{ticket6.title} - #2"
ticket6.priority = Ticket::Priority.lookup(name: '3 high')
ticket6.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(2, NotificationFactory.already_sent?(ticket6, agent1, 'email'), ticket6.id)
assert_equal(2, NotificationFactory.already_sent?(ticket6, agent1, 'online'), ticket6.id)
assert_equal(0, NotificationFactory.already_sent?(ticket6, agent2, 'email'), ticket6.id)
assert_equal(0, NotificationFactory.already_sent?(ticket6, agent2, 'online'), ticket6.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket6, agent1, 'email'), ticket6.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket6, agent1, 'online'), ticket6.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket6, agent2, 'email'), ticket6.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket6, agent2, 'online'), ticket6.id)
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_me'] = true
agent1.preferences['notification_config']['matrix']['create']['criteria']['owned_by_nobody'] = false
@ -799,33 +799,33 @@ class TicketNotificationTest < ActiveSupport::TestCase
created_by_id: customer.id,
)
# execute ticket events
# execute ticket transaction
Rails.configuration.webserver_is_active = false
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent1, 'email'), ticket7.id)
assert_equal(1, NotificationFactory.already_sent?(ticket7, agent1, 'online'), ticket7.id)
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent2, 'email'), ticket7.id)
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent2, 'online'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent1, 'email'), ticket7.id)
assert_equal(1, NotificationFactory::Mailer.already_sent?(ticket7, agent1, 'online'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent2, 'email'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent2, 'online'), ticket7.id)
# update ticket attributes
ticket7.title = "#{ticket7.title} - #2"
ticket7.priority = Ticket::Priority.lookup(name: '3 high')
ticket7.save
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
#puts Delayed::Job.all.inspect
Delayed::Worker.new.work_off
# verify notifications to agent1 + agent2
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent1, 'email'), ticket7.id)
assert_equal(2, NotificationFactory.already_sent?(ticket7, agent1, 'online'), ticket7.id)
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent2, 'email'), ticket7.id)
assert_equal(0, NotificationFactory.already_sent?(ticket7, agent2, 'online'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent1, 'email'), ticket7.id)
assert_equal(2, NotificationFactory::Mailer.already_sent?(ticket7, agent1, 'online'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent2, 'email'), ticket7.id)
assert_equal(0, NotificationFactory::Mailer.already_sent?(ticket7, agent2, 'online'), ticket7.id)
end
@ -856,7 +856,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
)
assert(ticket1, 'ticket created')
# execute ticket events
# execute ticket transaction
Observer::Ticket::Notification.transaction
# update ticket attributes
@ -864,7 +864,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket1.priority = Ticket::Priority.lookup(name: '3 high')
ticket1.save
list = EventBuffer.list
list = EventBuffer.list('notification')
list_objects = Observer::Ticket::Notification.get_uniq_changes(list)
assert_equal('some notification event test 1', list_objects[ticket1.id][:changes]['title'][0])
@ -878,7 +878,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
ticket1.priority = Ticket::Priority.lookup(name: '1 low')
ticket1.save
list = EventBuffer.list
list = EventBuffer.list('notification')
list_objects = Observer::Ticket::Notification.get_uniq_changes(list)
assert_equal('some notification event test 1', list_objects[ticket1.id][:changes]['title'][0])
@ -939,7 +939,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
assert_not( human_changes['pending_till'] )
# en notification
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
locale: agent2.preferences[:locale],
template: 'ticket_update',
objects: {
@ -971,7 +971,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
assert_not( human_changes['pending_till'] )
# de notification
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
locale: agent1.preferences[:locale],
template: 'ticket_update',
objects: {
@ -1015,7 +1015,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
assert_not(human_changes['pending_till'])
# de notification
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
locale: agent1.preferences[:locale],
template: 'ticket_update',
objects: {
@ -1040,7 +1040,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
human_changes = bg.human_changes(agent2, ticket1)
# en notification
result = NotificationFactory.template(
result = NotificationFactory::Mailer.template(
locale: agent2.preferences[:locale],
template: 'ticket_update',
objects: {