From ed5b058d6ed04cb6a454b66cf867d6e83041a9ed Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 14 Apr 2016 01:40:37 +0200 Subject: [PATCH] Refactoring of NotificationFactory. --- app/controllers/first_steps_controller.rb | 2 +- app/controllers/users_controller.rb | 10 +- .../ticket/notification/background_job.rb | 4 +- app/models/user_device.rb | 2 +- app/views/mailer/application.html.erb | 7 +- lib/notification_factory.rb | 414 ++---------------- lib/notification_factory/mailer.rb | 248 +++++++++++ lib/notification_factory/template.rb | 72 +++ ...rb => notification_factory_mailer_test.rb} | 345 ++------------- test/unit/online_notifiaction_test.rb | 30 +- test/unit/ticket_notification_test.rb | 192 ++++---- 11 files changed, 521 insertions(+), 805 deletions(-) create mode 100644 lib/notification_factory/mailer.rb create mode 100644 lib/notification_factory/template.rb rename test/unit/{notification_factory_test.rb => notification_factory_mailer_test.rb} (53%) diff --git a/app/controllers/first_steps_controller.rb b/app/controllers/first_steps_controller.rb index a951016ac..bce7a8211 100644 --- a/app/controllers/first_steps_controller.rb +++ b/app/controllers/first_steps_controller.rb @@ -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: { diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 84b27eda8..a2c727aae 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -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: { diff --git a/app/models/observer/ticket/notification/background_job.rb b/app/models/observer/ticket/notification/background_job.rb index f116fad4c..72b0e197c 100644 --- a/app/models/observer/ticket/notification/background_job.rb +++ b/app/models/observer/ticket/notification/background_job.rb @@ -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: { diff --git a/app/models/user_device.rb b/app/models/user_device.rb index 857db1840..1b4d02c78 100644 --- a/app/models/user_device.rb +++ b/app/models/user_device.rb @@ -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: { diff --git a/app/views/mailer/application.html.erb b/app/views/mailer/application.html.erb index 61daf3ccb..913224ad3 100644 --- a/app/views/mailer/application.html.erb +++ b/app/views/mailer/application.html.erb @@ -30,13 +30,16 @@ color: #aaaaaa; } - +<% if @objects[:standalone] != true %>
<%= c 'product_name' %> <%= t 'Notification' %>
+<% end %> <%= d 'message', false %> +<% if @objects[:standalone] != true %> \ No newline at end of file + +<% end %> diff --git a/lib/notification_factory.rb b/lib/notification_factory.rb index 25b0be97e..0311720f5 100644 --- a/lib/notification_factory.rb +++ b/lib/notification_factory.rb @@ -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 diff --git a/lib/notification_factory/mailer.rb b/lib/notification_factory/mailer.rb new file mode 100644 index 000000000..d4106b226 --- /dev/null +++ b/lib/notification_factory/mailer.rb @@ -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 diff --git a/lib/notification_factory/template.rb b/lib/notification_factory/template.rb new file mode 100644 index 000000000..e953d1e27 --- /dev/null +++ b/lib/notification_factory/template.rb @@ -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 diff --git a/test/unit/notification_factory_test.rb b/test/unit/notification_factory_mailer_test.rb similarity index 53% rename from test/unit/notification_factory_test.rb rename to test/unit/notification_factory_mailer_test.rb index fb80406e3..c66e15c44 100644 --- a/test/unit/notification_factory_test.rb +++ b/test/unit/notification_factory_mailer_test.rb @@ -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 body', @@ -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 ', - 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 - 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<b>xxx</b>', 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<b>xxx</b>', 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 diff --git a/test/unit/online_notifiaction_test.rb b/test/unit/online_notifiaction_test.rb index 066c790ad..0e345ac4f 100644 --- a/test/unit/online_notifiaction_test.rb +++ b/test/unit/online_notifiaction_test.rb @@ -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 diff --git a/test/unit/ticket_notification_test.rb b/test/unit/ticket_notification_test.rb index 7f65dfa61..3e017a54f 100644 --- a/test/unit/ticket_notification_test.rb +++ b/test/unit/ticket_notification_test.rb @@ -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: {