Rails 5
This commit is contained in:
parent
bdb3d2df48
commit
468b2ac8aa
@ -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;'
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user