From 468b2ac8aaafdb34a31ecde196b7f6099e92fb4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Fri, 21 Dec 2018 12:27:25 +0100 Subject: [PATCH] Rails 5 --- .travis.yml | 4 +- app/models/dmsf_mailer.rb | 127 +++++++++++++++++----------------- test/unit/dmsf_mailer_test.rb | 41 +++++++---- 3 files changed, 91 insertions(+), 81 deletions(-) diff --git a/.travis.yml b/.travis.yml index e91e4676..c9f92a17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,10 +23,10 @@ language: ruby sudo: true -dist: trusty +dist: xenial rvm: - - 2.4 + - 2.5 before_install: - mysql -e 'CREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8mb4;' diff --git a/app/models/dmsf_mailer.rb b/app/models/dmsf_mailer.rb index d08c721a..cfec0697 100644 --- a/app/models/dmsf_mailer.rb +++ b/app/models/dmsf_mailer.rb @@ -25,21 +25,63 @@ class DmsfMailer < Mailer layout 'mailer' def self.deliver_files_updated(project, files) + files = files.select { |file| file.notify? } users = get_notify_users(project, files) users.each do |user| files_updated(user, project, files).deliver_later end end + def files_updated(user, project, files) + if user && project && files.size > 0 + redmine_headers 'Project' => project.identifier if project + @files = files + @project = project + message_id project + set_language_if_valid user.language + mail :to => user.mail, subject: "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_updated_subject)}" + end + end + def self.deliver_files_deleted(project, files) + files = files.select { |file| file.notify? } users = get_notify_users(project, files) users.each do |user| files_deleted(user, project, files).deliver_later end end + def files_deleted(user, project, files) + if user && files.count > 0 + redmine_headers 'Project' => project.identifier if project + @files = files + @project = project + message_id project + set_language_if_valid user.language + mail :to => user.mail, + :subject => "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_deleted_subject)}" + end + end + def self.deliver_send_documents(project, email_params) - send_documents(email_params[:to], project, email_params).deliver_later + send_documents(User.current, project, email_params).deliver_later + end + + def send_documents(_, project, email_params) + redmine_headers 'Project' => project.identifier if project + @body = email_params[:body] + @links_only = email_params[:links_only] == '1' + @public_urls = email_params[:public_urls] == '1' + @expired_at = email_params[:expired_at] + @folders = email_params[:folders] + @files = email_params[:files] + + unless @links_only + zipped_content_data = open(email_params[:zipped_content], 'rb') { |io| io.read } + attachments['Documents.zip'] = { :content_type => 'application/zip', :content => zipped_content_data } + end + mail to: email_params[:to], cc: email_params[:cc], subject: email_params[:subject], 'From' => email_params[:from], + 'Reply-To' => email_params[:reply_to] end def self.deliver_workflow_notification(users, workflow, revision, subject_id, text1_id, text2_id, notice = nil) @@ -48,6 +90,25 @@ class DmsfMailer < Mailer end end + def workflow_notification(user, workflow, revision, subject_id, text1_id, text2_id, notice = nil) + if user && workflow && revision + if revision.dmsf_file && revision.dmsf_file.project + @project = revision.dmsf_file.project + redmine_headers 'Project' => @project.identifier + end + set_language_if_valid user.language + @user = user + message_id workflow + @workflow = workflow + @revision = revision + @text1 = l(text1_id, :name => workflow.name, :filename => revision.dmsf_file.name, :notice => notice) + @text2 = l(text2_id) + @notice = notice + mail :to => user.mail, + :subject => "[#{@project.name} - #{l(:field_label_dmsf_workflow)}] #{@workflow.name} #{l(subject_id)}" + end + end + def self.get_notify_users(project, files = [], force_notification = false) return [] unless project.active? if !force_notification && files.present? @@ -104,68 +165,4 @@ class DmsfMailer < Mailer notify_members.collect { |m| m.user }.uniq end - private - - def workflow_notification(user, workflow, revision, subject_id, text1_id, text2_id, notice = nil) - if user && workflow && revision - if revision.dmsf_file && revision.dmsf_file.project - @project = revision.dmsf_file.project - redmine_headers 'Project' => @project.identifier - end - set_language_if_valid user.language - @user = user - message_id workflow - @workflow = workflow - @revision = revision - @text1 = l(text1_id, :name => workflow.name, :filename => revision.dmsf_file.name, :notice => notice) - @text2 = l(text2_id) - @notice = notice - mail :to => user.mail, - :subject => "[#{@project.name} - #{l(:field_label_dmsf_workflow)}] #{@workflow.name} #{l(subject_id)}" - end - end - - def send_documents(user, project, email_params) - redmine_headers 'Project' => project.identifier if project - @body = email_params[:body] - @links_only = email_params[:links_only] == '1' - @public_urls = email_params[:public_urls] == '1' - @expired_at = email_params[:expired_at] - @folders = email_params[:folders] - @files = email_params[:files] - - unless @links_only - zipped_content_data = open(email_params[:zipped_content], 'rb') { |io| io.read } - attachments['Documents.zip'] = { :content_type => 'application/zip', :content => zipped_content_data } - end - mail :to => user, :cc => email_params[:cc], - :subject => email_params[:subject], 'From' => email_params[:from], 'Reply-To' => email_params[:reply_to] - end - - def files_deleted(user, project, files) - if user && files.count > 0 - files = files.select { |file| file.notify? } - redmine_headers 'Project' => project.identifier if project - @files = files - @project = project - message_id project - set_language_if_valid user.language - mail :to => user.mail, - :subject => "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_deleted_subject)}" - end - end - - def files_updated(user, project, files) - if user && project && files.count > 0 - files = files.select { |file| file.notify? } - redmine_headers 'Project' => project.identifier if project - @files = files - @project = project - message_id project - set_language_if_valid user.language - mail :to => user.mail, - :subject => "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_updated_subject)}" - end - end - end diff --git a/test/unit/dmsf_mailer_test.rb b/test/unit/dmsf_mailer_test.rb index 3319a904..d90d55f5 100644 --- a/test/unit/dmsf_mailer_test.rb +++ b/test/unit/dmsf_mailer_test.rb @@ -23,14 +23,21 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfMailerTest < RedmineDmsf::Test::UnitTest include Redmine::I18n - fixtures :users, :projects, :dmsf_files, :dmsf_workflows, :dmsf_file_revisions, :members + fixtures :users, :projects, :dmsf_files, :dmsf_workflows, :dmsf_file_revisions, :members, :email_addresses, + :roles, :member_roles def setup @user2 = User.find 2 @file1 = DmsfFile.find 1 + @file1.notify_activate @wf1 = DmsfWorkflow.find 1 @rev2 = DmsfFileRevision.find 2 @project1 = Project.find 1 + # Mailer settings + ActionMailer::Base.deliveries.clear + Setting.plain_text_mail = '0' + Setting.default_language = 'en' + User.current = nil end def test_truth @@ -42,15 +49,15 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest end def test_files_updated - email = DmsfMailer.files_updated(@user2, @file1.project, [@file1]).deliver_now - assert email + DmsfMailer.deliver_files_updated(@file1.project, [@file1]) + email = last_email assert text_part(email).body.include? @file1.project.name assert html_part(email).body.include? @file1.project.name end def test_files_deleted - email = DmsfMailer.files_deleted(@user2, @file1.project, [@file1]).deliver_now - assert email + DmsfMailer.deliver_files_deleted(@file1.project, [@file1]) + email = last_email assert text_part(email).body.include? @file1.project.name assert html_part(email).body.include? @file1.project.name end @@ -58,40 +65,40 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest def test_send_documents email_params = Hash.new body = 'Test' + email_params[:to] = @user2.mail + email_params[:from] = @user2.mail email_params[:body] = body email_params[:links_only] = '1' email_params[:public_urls] == '0' - email_params[:expired_at] = Date.today + email_params[:expired_at] = DateTime.current.to_s email_params[:folders] = nil email_params[:files] = "[\"#{@file1.id}\"]" - email = DmsfMailer.send_documents(@user2, @file1.project, email_params) - assert email + DmsfMailer.deliver_send_documents(@file1.project, email_params) + email = last_email assert text_part(email).body.include? body assert html_part(email).body.include? body end def test_workflow_notification - email = DmsfMailer.workflow_notification(@user2, @wf1, @rev2, :text_email_subject_started, :text_email_started, - :text_email_to_proceed).deliver_now - assert email + DmsfMailer.deliver_workflow_notification([@user2], @wf1, @rev2, :text_email_subject_started, + :text_email_started, :text_email_to_proceed) + email = last_email assert text_part(email).body.include? l(:text_email_subject_started) assert html_part(email).body.include? l(:text_email_subject_started) end def test_get_notify_users - @file1.notification = true users = DmsfMailer.get_notify_users(@project1, [@file1]) assert users.present? end def test_get_notify_users_notification_switched_off - @file1.notification = false + @file1.notify_deactivate users = DmsfMailer.get_notify_users(@project1, [@file1]) assert users.blank? end def test_get_notify_users_on_inactive_projects - @file1.notification = true @project1.status = Project::STATUS_CLOSED users = DmsfMailer.get_notify_users(@project1, [@file1]) assert users.blank? @@ -99,6 +106,12 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest private + def last_email + mail = ActionMailer::Base.deliveries.last + assert_not_nil mail + mail + end + def text_part(email) email.parts.detect {|part| part.content_type.include?('text/plain')} end