Mercurial > hg > soundsoftware-site
diff test/unit/mail_handler_test.rb @ 524:1248a47e81b3 feature_36
Merge from branch "luisf"
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Mon, 25 Jul 2011 14:39:38 +0100 |
parents | 0c939c159af4 |
children | cbb26bc654de |
line wrap: on
line diff
--- a/test/unit/mail_handler_test.rb Fri Jul 15 17:21:05 2011 +0100 +++ b/test/unit/mail_handler_test.rb Mon Jul 25 14:39:38 2011 +0100 @@ -1,26 +1,26 @@ # encoding: utf-8 # # Redmine - project management software -# Copyright (C) 2006-2009 Jean-Philippe Lang +# Copyright (C) 2006-2011 Jean-Philippe Lang # # 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. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -require File.dirname(__FILE__) + '/../test_helper' +require File.expand_path('../../test_helper', __FILE__) class MailHandlerTest < ActiveSupport::TestCase - fixtures :users, :projects, + fixtures :users, :projects, :enabled_modules, :roles, :members, @@ -36,16 +36,17 @@ :issue_categories, :custom_fields, :custom_fields_trackers, + :custom_fields_projects, :boards, :messages - + FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler' - + def setup ActionMailer::Base.deliveries.clear Setting.notified_events = Redmine::Notifiable.all.collect(&:name) end - + def test_add_issue ActionMailer::Base.deliveries.clear # This email contains: 'Project: onlinestore' @@ -53,26 +54,38 @@ assert issue.is_a?(Issue) assert !issue.new_record? issue.reload + assert_equal Project.find(2), issue.project + assert_equal issue.project.trackers.first, issue.tracker assert_equal 'New ticket on a given project', issue.subject assert_equal User.find_by_login('jsmith'), issue.author - assert_equal Project.find(2), issue.project assert_equal IssueStatus.find_by_name('Resolved'), issue.status assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to - assert_equal Version.find_by_name('alpha'), issue.fixed_version + assert_equal Version.find_by_name('Alpha'), issue.fixed_version assert_equal 2.5, issue.estimated_hours assert_equal 30, issue.done_ratio + assert_equal [issue.id, 1, 2], [issue.root_id, issue.lft, issue.rgt] # keywords should be removed from the email body assert !issue.description.match(/^Project:/i) assert !issue.description.match(/^Status:/i) + assert !issue.description.match(/^Start Date:/i) # Email notification should be sent mail = ActionMailer::Base.deliveries.last assert_not_nil mail assert mail.subject.include?('New ticket on a given project') end + def test_add_issue_with_default_tracker + # This email contains: 'Project: onlinestore' + issue = submit_email('ticket_on_given_project.eml', :issue => {:tracker => 'Support request'}) + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_equal 'Support request', issue.tracker.name + end + def test_add_issue_with_status # This email contains: 'Project: onlinestore' and 'Status: Resolved' issue = submit_email('ticket_on_given_project.eml') @@ -82,7 +95,7 @@ assert_equal Project.find(2), issue.project assert_equal IssueStatus.find_by_name("Resolved"), issue.status end - + def test_add_issue_with_attributes_override issue = submit_email('ticket_with_attributes.eml', :allow_override => 'tracker,category,priority') assert issue.is_a?(Issue) @@ -96,7 +109,7 @@ assert_equal 'Urgent', issue.priority.to_s assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') end - + def test_add_issue_with_partial_attributes_override issue = submit_email('ticket_with_attributes.eml', :issue => {:priority => 'High'}, :allow_override => ['tracker']) assert issue.is_a?(Issue) @@ -110,7 +123,7 @@ assert_equal 'High', issue.priority.to_s assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') end - + def test_add_issue_with_spaces_between_attribute_and_separator issue = submit_email('ticket_with_spaces_between_attribute_and_separator.eml', :allow_override => 'tracker,category,priority') assert issue.is_a?(Issue) @@ -125,7 +138,6 @@ assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') end - def test_add_issue_with_attachment_to_specific_project issue = submit_email('ticket_with_attachment.eml', :issue => {:project => 'onlinestore'}) assert issue.is_a?(Issue) @@ -141,7 +153,7 @@ assert_equal 'image/jpeg', issue.attachments.first.content_type assert_equal 10790, issue.attachments.first.filesize end - + def test_add_issue_with_custom_fields issue = submit_email('ticket_with_custom_fields.eml', :issue => {:project => 'onlinestore'}) assert issue.is_a?(Issue) @@ -151,7 +163,7 @@ assert_equal 'Value for a custom field', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value assert !issue.description.match(/^searchable field:/i) end - + def test_add_issue_with_cc issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'}) assert issue.is_a?(Issue) @@ -160,13 +172,13 @@ assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo')) assert_equal 1, issue.watcher_user_ids.size end - + def test_add_issue_by_unknown_user assert_no_difference 'User.count' do assert_equal false, submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'}) end end - + def test_add_issue_by_anonymous_user Role.anonymous.add_permission!(:add_issues) assert_no_difference 'User.count' do @@ -184,7 +196,7 @@ assert issue.author.anonymous? end end - + def test_add_issue_by_anonymous_user_on_private_project Role.anonymous.add_permission!(:add_issues) assert_no_difference 'User.count' do @@ -193,7 +205,7 @@ end end end - + def test_add_issue_by_anonymous_user_on_private_project_without_permission_check assert_no_difference 'User.count' do assert_difference 'Issue.count' do @@ -201,10 +213,11 @@ assert issue.is_a?(Issue) assert issue.author.anonymous? assert !issue.project.is_public? + assert_equal [issue.id, 1, 2], [issue.root_id, issue.lft, issue.rgt] end end end - + def test_add_issue_by_created_user Setting.default_language = 'en' assert_difference 'User.count' do @@ -214,7 +227,7 @@ assert_equal 'john.doe@somenet.foo', issue.author.mail assert_equal 'John', issue.author.firstname assert_equal 'Doe', issue.author.lastname - + # account information email = ActionMailer::Base.deliveries.first assert_not_nil email @@ -224,7 +237,7 @@ assert_equal issue.author, User.try_to_login(login, password) end end - + def test_add_issue_without_from_header Role.anonymous.add_permission!(:add_issues) assert_equal false, submit_email('ticket_without_from_header.eml') @@ -257,7 +270,7 @@ assert_equal 'Urgent', issue.priority.to_s assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') end - + def test_add_issue_with_japanese_keywords tracker = Tracker.create!(:name => '開発') Project.find(1).trackers << tracker @@ -281,13 +294,14 @@ assert issue.is_a?(Issue) assert_equal 1, ActionMailer::Base.deliveries.size end - + def test_add_issue_note journal = submit_email('ticket_reply.eml') assert journal.is_a?(Journal) assert_equal User.find_by_login('jsmith'), journal.user assert_equal Issue.find(2), journal.journalized assert_match /This is reply/, journal.notes + assert_equal 'Feature request', journal.issue.tracker.name end def test_add_issue_note_with_attribute_changes @@ -298,11 +312,15 @@ assert_equal User.find_by_login('jsmith'), journal.user assert_equal Issue.find(2), journal.journalized assert_match /This is reply/, journal.notes + assert_equal 'Feature request', journal.issue.tracker.name assert_equal IssueStatus.find_by_name("Resolved"), issue.status assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to - assert_equal 'Updated custom value', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value + assert_equal "52.6", issue.custom_value_for(CustomField.find_by_name('Float field')).value + # keywords should be removed from the email body + assert !journal.notes.match(/^Status:/i) + assert !journal.notes.match(/^Start Date:/i) end def test_add_issue_note_should_send_email_notification @@ -311,7 +329,15 @@ assert journal.is_a?(Journal) assert_equal 1, ActionMailer::Base.deliveries.size end - + + def test_add_issue_note_should_not_set_defaults + journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'}) + assert journal.is_a?(Journal) + assert_match /This is reply/, journal.notes + assert_equal 'Feature request', journal.issue.tracker.name + assert_equal 'Normal', journal.issue.priority.name + end + def test_reply_to_a_message m = submit_email('message_reply.eml') assert m.is_a?(Message) @@ -321,7 +347,7 @@ # The email replies to message #2 which is part of the thread of message #1 assert_equal Message.find(1), m.parent end - + def test_reply_to_a_message_by_subject m = submit_email('message_reply_by_subject.eml') assert m.is_a?(Message) @@ -330,7 +356,7 @@ assert_equal 'Reply to the first post', m.subject assert_equal Message.find(1), m.parent end - + def test_should_strip_tags_of_html_only_emails issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'}) assert issue.is_a?(Issue) @@ -358,7 +384,6 @@ setup do Setting.mail_handler_body_delimiters = '---' end - should "truncate the email at the delimiter for the issue" do issue = submit_email('ticket_on_given_project.eml') assert_issue_created(issue) @@ -373,39 +398,32 @@ setup do Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' end - should "truncate the email at the delimiter with the quoted reply symbols (>)" do journal = submit_email('issue_update_with_quoted_reply_above.eml') assert journal.is_a?(Journal) assert journal.notes.include?('An update to the issue by the sender.') assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) assert !journal.notes.include?('Looks like the JSON api for projects was missed.') + end + end - end - - end - context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do setup do Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' end - should "truncate the email at the delimiter with the quoted reply symbols (>)" do journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml') assert journal.is_a?(Journal) assert journal.notes.include?('An update to the issue by the sender.') assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) assert !journal.notes.include?('Looks like the JSON api for projects was missed.') - end - end context "with multiple strings" do setup do Setting.mail_handler_body_delimiters = "---\nBREAK" end - should "truncate the email at the first delimiter found (BREAK)" do issue = submit_email('ticket_on_given_project.eml') assert_issue_created(issue) @@ -417,7 +435,7 @@ end end end - + def test_email_with_long_subject_line issue = submit_email('ticket_with_long_subject.eml') assert issue.is_a?(Issue) @@ -425,7 +443,7 @@ end private - + def submit_email(filename, options={}) raw = IO.read(File.join(FIXTURES_PATH, filename)) MailHandler.receive(raw, options)