This commit is contained in:
Karel Pičman 2018-12-21 12:27:25 +01:00
parent bdb3d2df48
commit 468b2ac8aa
3 changed files with 91 additions and 81 deletions

View File

@ -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;'

View File

@ -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

View File

@ -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