2011-10-29 16:19:11 +04:00
#-- encoding: UTF-8
2011-05-30 00:11:52 +04:00
#-- copyright
# ChiliProject is a project management system.
2011-05-30 22:52:25 +04:00
#
2011-05-30 00:11:52 +04:00
# Copyright (C) 2010-2011 the ChiliProject Team
2011-05-30 22:52:25 +04:00
#
2007-02-02 17:47:40 +03:00
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
2011-05-30 22:52:25 +04:00
#
2011-05-30 00:11:52 +04:00
# See doc/COPYRIGHT.rdoc for more details.
#++
2010-12-13 02:24:34 +03:00
require File . expand_path ( '../../test_helper' , __FILE__ )
2007-02-02 17:47:40 +03:00
2009-09-13 21:14:35 +04:00
class MailerTest < ActiveSupport :: TestCase
2009-02-21 14:04:50 +03:00
include Redmine :: I18n
2009-11-14 22:40:56 +03:00
include ActionController :: Assertions :: SelectorAssertions
2011-03-04 17:32:58 +03:00
fixtures :all
2011-05-30 22:52:25 +04:00
2010-02-20 13:07:53 +03:00
def setup
2011-02-24 22:10:23 +03:00
User . current = nil # Clear current user in case of tests setting it and leaking data
2010-02-20 13:07:53 +03:00
ActionMailer :: Base . deliveries . clear
Setting . host_name = 'mydomain.foo'
Setting . protocol = 'http'
2011-03-27 20:38:08 +04:00
Setting . plain_text_mail = '0'
2010-02-20 13:07:53 +03:00
end
2011-05-30 22:52:25 +04:00
2008-02-17 17:17:20 +03:00
def test_generated_links_in_emails
Setting . host_name = 'mydomain.foo'
Setting . protocol = 'https'
2011-05-30 22:52:25 +04:00
2008-02-17 17:17:20 +03:00
journal = Journal . find ( 2 )
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_issue_edit ( journal , 'dlopper@somenet.foo' )
2008-02-17 17:17:20 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_kind_of TMail :: Mail , mail
2011-05-30 22:52:25 +04:00
2009-11-14 22:40:56 +03:00
assert_select_email do
# link to the main ticket
assert_select " a[href=?] " , " https://mydomain.foo/issues/1 " , :text = > " Bug # 1: Can't print recipes "
# link to a referenced ticket
assert_select " a[href=?][title=?] " , " https://mydomain.foo/issues/2 " , " Add ingredients categories (Assigned) " , :text = > " # 2 "
# link to a changeset
assert_select " a[href=?][title=?] " , " https://mydomain.foo/projects/ecookbook/repository/revisions/2 " , " This commit fixes # 1, # 2 and references # 1 & # 3 " , :text = > " r2 "
end
2008-02-17 17:17:20 +03:00
end
2011-05-30 22:52:25 +04:00
2008-11-08 16:25:45 +03:00
def test_generated_links_with_prefix
2009-01-04 20:09:25 +03:00
relative_url_root = Redmine :: Utils . relative_url_root
2008-11-08 16:25:45 +03:00
Setting . host_name = 'mydomain.foo/rdm'
Setting . protocol = 'http'
2009-01-04 20:09:25 +03:00
Redmine :: Utils . relative_url_root = '/rdm'
2011-05-30 22:52:25 +04:00
2008-11-08 16:25:45 +03:00
journal = Journal . find ( 2 )
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_issue_edit ( journal , 'dlopper@somenet.foo' )
2008-11-08 16:25:45 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_kind_of TMail :: Mail , mail
2009-11-14 22:40:56 +03:00
assert_select_email do
# link to the main ticket
assert_select " a[href=?] " , " http://mydomain.foo/rdm/issues/1 " , :text = > " Bug # 1: Can't print recipes "
# link to a referenced ticket
assert_select " a[href=?][title=?] " , " http://mydomain.foo/rdm/issues/2 " , " Add ingredients categories (Assigned) " , :text = > " # 2 "
# link to a changeset
assert_select " a[href=?][title=?] " , " http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2 " , " This commit fixes # 1, # 2 and references # 1 & # 3 " , :text = > " r2 "
end
2008-11-08 16:25:45 +03:00
ensure
# restore it
2009-01-04 20:09:25 +03:00
Redmine :: Utils . relative_url_root = relative_url_root
2008-11-08 16:25:45 +03:00
end
2011-05-30 22:52:25 +04:00
2008-11-08 16:25:45 +03:00
def test_generated_links_with_prefix_and_no_relative_url_root
2009-01-04 20:09:25 +03:00
relative_url_root = Redmine :: Utils . relative_url_root
2008-11-08 16:25:45 +03:00
Setting . host_name = 'mydomain.foo/rdm'
Setting . protocol = 'http'
2009-01-04 20:09:25 +03:00
Redmine :: Utils . relative_url_root = nil
2011-05-30 22:52:25 +04:00
2008-11-08 16:25:45 +03:00
journal = Journal . find ( 2 )
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_issue_edit ( journal , 'dlopper@somenet.foo' )
2008-11-08 16:25:45 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_kind_of TMail :: Mail , mail
2009-11-14 22:40:56 +03:00
assert_select_email do
# link to the main ticket
assert_select " a[href=?] " , " http://mydomain.foo/rdm/issues/1 " , :text = > " Bug # 1: Can't print recipes "
# link to a referenced ticket
assert_select " a[href=?][title=?] " , " http://mydomain.foo/rdm/issues/2 " , " Add ingredients categories (Assigned) " , :text = > " # 2 "
# link to a changeset
assert_select " a[href=?][title=?] " , " http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2 " , " This commit fixes # 1, # 2 and references # 1 & # 3 " , :text = > " r2 "
end
2008-11-08 16:25:45 +03:00
ensure
# restore it
2009-01-04 20:09:25 +03:00
Redmine :: Utils . relative_url_root = relative_url_root
2008-11-08 16:25:45 +03:00
end
2011-05-30 22:52:25 +04:00
2009-04-05 16:33:45 +04:00
def test_email_headers
issue = Issue . find ( 1 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_issue_add ( issue , 'dlopper@somenet.foo' )
2009-04-05 16:33:45 +04:00
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal 'bulk' , mail . header_string ( 'Precedence' )
assert_equal 'auto-generated' , mail . header_string ( 'Auto-Submitted' )
end
2008-10-16 03:50:33 +04:00
def test_plain_text_mail
Setting . plain_text_mail = 1
journal = Journal . find ( 2 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_issue_edit ( journal , 'dlopper@somenet.foo' )
2008-10-16 03:50:33 +04:00
mail = ActionMailer :: Base . deliveries . last
2009-10-24 15:57:01 +04:00
assert_equal " text/plain " , mail . content_type
assert_equal 0 , mail . parts . size
2009-09-13 21:14:35 +04:00
assert ! mail . encoded . include? ( 'href' )
2008-10-16 03:50:33 +04:00
end
2009-09-13 21:14:35 +04:00
def test_html_mail
Setting . plain_text_mail = 0
journal = Journal . find ( 2 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_issue_edit ( journal , 'dlopper@somenet.foo' )
2009-09-13 21:14:35 +04:00
mail = ActionMailer :: Base . deliveries . last
assert_equal 2 , mail . parts . size
assert mail . encoded . include? ( 'href' )
end
2011-05-30 22:52:25 +04:00
2010-02-17 22:08:04 +03:00
def test_mail_from_with_phrase
with_settings :mail_from = > 'Redmine app <redmine@example.net>' do
Mailer . deliver_test ( User . find ( 1 ) )
end
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal 'Redmine app' , mail . from_addrs . first . name
end
2011-05-30 22:52:25 +04:00
2010-02-28 20:18:21 +03:00
def test_should_not_send_email_without_recipient
news = News . find ( :first )
user = news . author
# Remove members except news author
news . project . memberships . each { | m | m . destroy unless m . user == user }
2011-05-30 22:52:25 +04:00
2010-02-28 20:18:21 +03:00
user . pref [ :no_self_notified ] = false
user . pref . save
User . current = user
2011-02-24 22:10:23 +03:00
Mailer . deliver_news_added ( news . reload , user . mail )
assert_equal 1 , last_email . to . size
2010-02-28 20:18:21 +03:00
# nobody to notify
user . pref [ :no_self_notified ] = true
user . pref . save
User . current = user
ActionMailer :: Base . deliveries . clear
2011-02-24 22:10:23 +03:00
Mailer . deliver_news_added ( news . reload , user . mail )
2010-02-28 20:18:21 +03:00
assert ActionMailer :: Base . deliveries . empty?
end
2009-09-13 21:14:35 +04:00
2009-01-18 18:16:31 +03:00
def test_issue_add_message_id
issue = Issue . find ( 1 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_issue_add ( issue , 'dlopper@somenet.foo' )
2009-01-18 18:16:31 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal Mailer . message_id_for ( issue ) , mail . message_id
assert_nil mail . references
end
2011-05-30 22:52:25 +04:00
2009-01-18 18:16:31 +03:00
def test_issue_edit_message_id
journal = Journal . find ( 1 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_issue_edit ( journal , " jsmith@somenet.foo " )
2009-01-18 18:16:31 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal Mailer . message_id_for ( journal ) , mail . message_id
2010-09-14 20:07:38 +04:00
assert_equal Mailer . message_id_for ( journal . journaled ) , mail . references . first . to_s
2009-01-18 18:16:31 +03:00
end
2011-05-30 22:52:25 +04:00
2009-01-18 18:16:31 +03:00
def test_message_posted_message_id
message = Message . find ( 1 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_message_posted ( message , " jsmith@somenet.foo " )
2009-01-18 18:16:31 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal Mailer . message_id_for ( message ) , mail . message_id
assert_nil mail . references
2010-02-20 13:07:53 +03:00
assert_select_email do
# link to the message
2011-07-09 01:47:54 +04:00
assert_select " a[href*=?] " , " http://mydomain.foo/boards/ #{ message . board . id } /topics/ #{ message . id } " , :text = > message . subject
2010-02-20 13:07:53 +03:00
end
2009-01-18 18:16:31 +03:00
end
2011-05-30 22:52:25 +04:00
2009-01-18 18:16:31 +03:00
def test_reply_posted_message_id
message = Message . find ( 3 )
2011-02-24 22:10:23 +03:00
Mailer . deliver_message_posted ( message , " jsmith@somenet.foo " )
2009-01-18 18:16:31 +03:00
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
assert_equal Mailer . message_id_for ( message ) , mail . message_id
2009-10-10 19:14:08 +04:00
assert_equal Mailer . message_id_for ( message . parent ) , mail . references . first . to_s
2010-02-20 13:07:53 +03:00
assert_select_email do
# link to the reply
assert_select " a[href=?] " , " http://mydomain.foo/boards/ #{ message . board . id } /topics/ #{ message . root . id } ?r= #{ message . id } # message- #{ message . id } " , :text = > message . subject
end
2009-01-18 18:16:31 +03:00
end
2011-05-30 22:52:25 +04:00
2009-12-13 17:26:54 +03:00
context ( " # issue_add " ) do
setup do
ActionMailer :: Base . deliveries . clear
Setting . bcc_recipients = '1'
2011-05-30 22:52:25 +04:00
@issue = Issue . find ( 1 )
2009-12-13 17:26:54 +03:00
end
2011-05-30 22:52:25 +04:00
2011-02-24 22:10:23 +03:00
should " send one email per recipient " do
assert Mailer . deliver_issue_add ( @issue , 'dlopper@somenet.foo' )
assert_equal 1 , ActionMailer :: Base . deliveries . length
assert_equal [ 'dlopper@somenet.foo' ] , last_email . to
2009-12-13 17:26:54 +03:00
end
end
2011-05-30 22:52:25 +04:00
2007-02-02 17:47:40 +03:00
# test mailer methods for each language
def test_issue_add
issue = Issue . find ( 1 )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-03-10 18:09:49 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_issue_add ( issue , 'dlopper@somenet.foo' )
2007-02-02 17:47:40 +03:00
end
end
def test_issue_edit
journal = Journal . find ( 1 )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-03-10 18:09:49 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_issue_edit ( journal , " jsmith@somenet.foo " )
2007-02-02 17:47:40 +03:00
end
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
def test_document_added
2007-02-02 17:47:40 +03:00
document = Document . find ( 1 )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-03-10 18:09:49 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_document_added ( document , " jsmith@somenet.foo " )
2007-02-02 17:47:40 +03:00
end
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
def test_attachments_added
attachements = [ Attachment . find_by_container_type ( 'Document' ) ]
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-11-04 13:43:39 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_attachments_added ( attachements , " jsmith@somenet.foo " )
2007-11-04 13:43:39 +03:00
end
end
2011-05-30 22:52:25 +04:00
2010-03-04 00:32:41 +03:00
def test_version_file_added
attachements = [ Attachment . find_by_container_type ( 'Version' ) ]
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_attachments_added ( attachements , " jsmith@somenet.foo " )
assert_equal [ " jsmith@somenet.foo " ] , last_email . to
2010-03-04 00:32:41 +03:00
end
2011-05-30 22:52:25 +04:00
2010-03-04 00:32:41 +03:00
def test_project_file_added
attachements = [ Attachment . find_by_container_type ( 'Project' ) ]
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_attachments_added ( attachements , " jsmith@somenet.foo " )
assert_equal [ " jsmith@somenet.foo " ] , last_email . to
2010-03-04 00:32:41 +03:00
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
def test_news_added
news = News . find ( :first )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-11-04 13:43:39 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_news_added ( news , " jsmith@somenet.foo " )
2007-11-04 13:43:39 +03:00
end
end
2011-05-30 22:52:25 +04:00
2011-03-04 17:32:58 +03:00
def test_news_comment_added
comment = Comment . find ( 2 )
valid_languages . each do | lang |
Setting . default_language = lang . to_s
assert Mailer . deliver_news_comment_added ( comment )
end
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
def test_message_posted
message = Message . find ( :first )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-11-04 13:43:39 +03:00
Setting . default_language = lang . to_s
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_message_posted ( message , " jsmith@somenet.foo " )
2007-11-04 13:43:39 +03:00
end
end
2011-05-30 22:52:25 +04:00
2010-12-08 01:07:55 +03:00
def test_wiki_content_added
2011-07-25 23:22:13 +04:00
content = WikiContent . find ( 1 )
2010-12-08 01:07:55 +03:00
valid_languages . each do | lang |
Setting . default_language = lang . to_s
assert_difference 'ActionMailer::Base.deliveries.size' do
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_wiki_content_added ( content , " jsmith@somenet.foo " )
2010-12-08 01:07:55 +03:00
end
end
end
2011-05-30 22:52:25 +04:00
2010-12-08 01:07:55 +03:00
def test_wiki_content_updated
2011-07-25 23:22:13 +04:00
content = WikiContent . find ( 1 )
2010-12-08 01:07:55 +03:00
valid_languages . each do | lang |
Setting . default_language = lang . to_s
assert_difference 'ActionMailer::Base.deliveries.size' do
2011-02-24 22:10:23 +03:00
assert Mailer . deliver_wiki_content_updated ( content , " jsmith@somenet.foo " )
2010-12-08 01:07:55 +03:00
end
end
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
def test_account_information
2010-04-30 15:27:08 +04:00
user = User . find ( 2 )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-11-04 13:43:39 +03:00
user . update_attribute :language , lang . to_s
user . reload
assert Mailer . deliver_account_information ( user , 'pAsswORd' )
end
end
2007-02-02 17:47:40 +03:00
def test_lost_password
token = Token . find ( 2 )
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-03-10 18:09:49 +03:00
token . user . update_attribute :language , lang . to_s
2007-11-04 13:43:39 +03:00
token . reload
2007-02-02 17:47:40 +03:00
assert Mailer . deliver_lost_password ( token )
end
end
def test_register
token = Token . find ( 1 )
2009-03-07 15:45:46 +03:00
Setting . host_name = 'redmine.foo'
Setting . protocol = 'https'
2011-05-30 22:52:25 +04:00
2009-02-21 14:04:50 +03:00
valid_languages . each do | lang |
2007-03-10 18:09:49 +03:00
token . user . update_attribute :language , lang . to_s
2007-11-04 13:43:39 +03:00
token . reload
2009-03-07 15:45:46 +03:00
ActionMailer :: Base . deliveries . clear
2007-02-02 17:47:40 +03:00
assert Mailer . deliver_register ( token )
2009-03-07 15:45:46 +03:00
mail = ActionMailer :: Base . deliveries . last
assert mail . body . include? ( " https://redmine.foo/account/activate?token= #{ token . value } " )
2007-02-02 17:47:40 +03:00
end
end
2011-05-30 22:52:25 +04:00
2010-03-21 14:17:29 +03:00
def test_test
user = User . find ( 1 )
valid_languages . each do | lang |
user . update_attribute :language , lang . to_s
assert Mailer . deliver_test ( user )
end
end
2011-05-30 22:52:25 +04:00
2008-05-25 21:31:50 +04:00
def test_reminders
Mailer . reminders ( :days = > 42 )
assert_equal 1 , ActionMailer :: Base . deliveries . size
mail = ActionMailer :: Base . deliveries . last
2011-02-24 22:10:23 +03:00
assert mail . to . include? ( 'dlopper@somenet.foo' )
2008-05-25 21:31:50 +04:00
assert mail . body . include? ( 'Bug #3: Error 281 when updating a recipe' )
2010-08-03 20:01:53 +04:00
assert_equal '1 issue(s) due in the next 42 days' , mail . subject
2008-05-25 21:31:50 +04:00
end
2011-05-30 22:52:25 +04:00
2010-09-21 03:17:51 +04:00
def test_reminders_for_users
Mailer . reminders ( :days = > 42 , :users = > [ '5' ] )
2011-02-24 22:10:23 +03:00
assert_equal 0 , ActionMailer :: Base . deliveries . size
2010-09-21 03:17:51 +04:00
Mailer . reminders ( :days = > 42 , :users = > [ '3' ] )
2011-02-24 22:10:23 +03:00
assert_equal 1 , ActionMailer :: Base . deliveries . size
2010-09-21 03:17:51 +04:00
mail = ActionMailer :: Base . deliveries . last
2011-02-24 22:10:23 +03:00
assert mail . to . include? ( 'dlopper@somenet.foo' )
2010-09-21 03:17:51 +04:00
assert mail . body . include? ( 'Bug #3: Error 281 when updating a recipe' )
end
2011-05-30 22:52:25 +04:00
2009-12-13 17:26:54 +03:00
def last_email
mail = ActionMailer :: Base . deliveries . last
assert_not_nil mail
mail
end
2011-05-30 22:52:25 +04:00
2010-01-10 17:54:02 +03:00
def test_mailer_should_not_change_locale
Setting . default_language = 'en'
# Set current language to italian
set_language_if_valid 'it'
# Send an email to a french user
user = User . find ( 1 )
user . language = 'fr'
Mailer . deliver_account_activated ( user )
mail = ActionMailer :: Base . deliveries . last
assert mail . body . include? ( 'Votre compte' )
2011-05-30 22:52:25 +04:00
2010-01-10 17:54:02 +03:00
assert_equal :it , current_language
end
2011-05-30 22:52:25 +04:00
2010-03-21 14:17:29 +03:00
def test_with_deliveries_off
Mailer . with_deliveries false do
Mailer . deliver_test ( User . find ( 1 ) )
end
assert ActionMailer :: Base . deliveries . empty?
# should restore perform_deliveries
assert ActionMailer :: Base . perform_deliveries
end
2010-11-02 22:00:36 +03:00
context " layout " do
should " include the emails_header " do
with_settings ( :emails_header = > " *Header content* " ) do
assert Mailer . deliver_test ( User . find ( 1 ) )
assert_select_email do
assert_select " .header " do
assert_select " strong " , :text = > " Header content "
end
end
end
2011-05-30 22:52:25 +04:00
2010-11-02 22:00:36 +03:00
end
2011-05-30 22:52:25 +04:00
2010-11-02 22:00:36 +03:00
end
2011-05-30 22:52:25 +04:00
2007-11-04 13:43:39 +03:00
end