annotate test/unit/.svn/text-base/mail_handler_test.rb.svn-base @ 904:0a8317a50fa0 redmine-1.1

Close obsolete branch redmine-1.1
author Chris Cannam
date Fri, 14 Jan 2011 12:53:21 +0000
parents af80e5618e9b
children cbce1fd3b1b7
rev   line source
Chris@0 1 # encoding: utf-8
Chris@0 2 #
Chris@0 3 # Redmine - project management software
Chris@0 4 # Copyright (C) 2006-2009 Jean-Philippe Lang
Chris@0 5 #
Chris@0 6 # This program is free software; you can redistribute it and/or
Chris@0 7 # modify it under the terms of the GNU General Public License
Chris@0 8 # as published by the Free Software Foundation; either version 2
Chris@0 9 # of the License, or (at your option) any later version.
Chris@0 10 #
Chris@0 11 # This program is distributed in the hope that it will be useful,
Chris@0 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 14 # GNU General Public License for more details.
Chris@0 15 #
Chris@0 16 # You should have received a copy of the GNU General Public License
Chris@0 17 # along with this program; if not, write to the Free Software
Chris@0 18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 19
Chris@117 20 require File.expand_path('../../test_helper', __FILE__)
Chris@0 21
Chris@0 22 class MailHandlerTest < ActiveSupport::TestCase
Chris@0 23 fixtures :users, :projects,
Chris@0 24 :enabled_modules,
Chris@0 25 :roles,
Chris@0 26 :members,
Chris@0 27 :member_roles,
chris@37 28 :users,
Chris@0 29 :issues,
Chris@0 30 :issue_statuses,
Chris@0 31 :workflows,
Chris@0 32 :trackers,
Chris@0 33 :projects_trackers,
chris@37 34 :versions,
Chris@0 35 :enumerations,
Chris@0 36 :issue_categories,
Chris@0 37 :custom_fields,
Chris@0 38 :custom_fields_trackers,
Chris@117 39 :custom_fields_projects,
Chris@0 40 :boards,
Chris@0 41 :messages
Chris@0 42
Chris@0 43 FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
Chris@0 44
Chris@0 45 def setup
Chris@0 46 ActionMailer::Base.deliveries.clear
chris@37 47 Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
Chris@0 48 end
Chris@0 49
Chris@0 50 def test_add_issue
Chris@0 51 ActionMailer::Base.deliveries.clear
Chris@0 52 # This email contains: 'Project: onlinestore'
Chris@0 53 issue = submit_email('ticket_on_given_project.eml')
Chris@0 54 assert issue.is_a?(Issue)
Chris@0 55 assert !issue.new_record?
Chris@0 56 issue.reload
Chris@117 57 assert_equal Project.find(2), issue.project
Chris@117 58 assert_equal issue.project.trackers.first, issue.tracker
Chris@0 59 assert_equal 'New ticket on a given project', issue.subject
Chris@0 60 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 61 assert_equal IssueStatus.find_by_name('Resolved'), issue.status
Chris@0 62 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 63 assert_equal '2010-01-01', issue.start_date.to_s
Chris@0 64 assert_equal '2010-12-31', issue.due_date.to_s
Chris@0 65 assert_equal User.find_by_login('jsmith'), issue.assigned_to
chris@37 66 assert_equal Version.find_by_name('alpha'), issue.fixed_version
chris@37 67 assert_equal 2.5, issue.estimated_hours
chris@37 68 assert_equal 30, issue.done_ratio
Chris@117 69 assert_equal [issue.id, 1, 2], [issue.root_id, issue.lft, issue.rgt]
Chris@0 70 # keywords should be removed from the email body
Chris@0 71 assert !issue.description.match(/^Project:/i)
Chris@0 72 assert !issue.description.match(/^Status:/i)
Chris@0 73 # Email notification should be sent
Chris@0 74 mail = ActionMailer::Base.deliveries.last
Chris@0 75 assert_not_nil mail
Chris@0 76 assert mail.subject.include?('New ticket on a given project')
Chris@0 77 end
Chris@117 78
Chris@117 79 def test_add_issue_with_default_tracker
Chris@117 80 # This email contains: 'Project: onlinestore'
Chris@117 81 issue = submit_email('ticket_on_given_project.eml', :issue => {:tracker => 'Support request'})
Chris@117 82 assert issue.is_a?(Issue)
Chris@117 83 assert !issue.new_record?
Chris@117 84 issue.reload
Chris@117 85 assert_equal 'Support request', issue.tracker.name
Chris@117 86 end
Chris@0 87
Chris@0 88 def test_add_issue_with_status
Chris@0 89 # This email contains: 'Project: onlinestore' and 'Status: Resolved'
Chris@0 90 issue = submit_email('ticket_on_given_project.eml')
Chris@0 91 assert issue.is_a?(Issue)
Chris@0 92 assert !issue.new_record?
Chris@0 93 issue.reload
Chris@0 94 assert_equal Project.find(2), issue.project
Chris@0 95 assert_equal IssueStatus.find_by_name("Resolved"), issue.status
Chris@0 96 end
Chris@0 97
Chris@0 98 def test_add_issue_with_attributes_override
Chris@0 99 issue = submit_email('ticket_with_attributes.eml', :allow_override => 'tracker,category,priority')
Chris@0 100 assert issue.is_a?(Issue)
Chris@0 101 assert !issue.new_record?
Chris@0 102 issue.reload
Chris@0 103 assert_equal 'New ticket on a given project', issue.subject
Chris@0 104 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 105 assert_equal Project.find(2), issue.project
Chris@0 106 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 107 assert_equal 'Stock management', issue.category.to_s
Chris@0 108 assert_equal 'Urgent', issue.priority.to_s
Chris@0 109 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 110 end
Chris@0 111
Chris@0 112 def test_add_issue_with_partial_attributes_override
Chris@0 113 issue = submit_email('ticket_with_attributes.eml', :issue => {:priority => 'High'}, :allow_override => ['tracker'])
Chris@0 114 assert issue.is_a?(Issue)
Chris@0 115 assert !issue.new_record?
Chris@0 116 issue.reload
Chris@0 117 assert_equal 'New ticket on a given project', issue.subject
Chris@0 118 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 119 assert_equal Project.find(2), issue.project
Chris@0 120 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 121 assert_nil issue.category
Chris@0 122 assert_equal 'High', issue.priority.to_s
Chris@0 123 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 124 end
Chris@0 125
Chris@0 126 def test_add_issue_with_spaces_between_attribute_and_separator
Chris@0 127 issue = submit_email('ticket_with_spaces_between_attribute_and_separator.eml', :allow_override => 'tracker,category,priority')
Chris@0 128 assert issue.is_a?(Issue)
Chris@0 129 assert !issue.new_record?
Chris@0 130 issue.reload
Chris@0 131 assert_equal 'New ticket on a given project', issue.subject
Chris@0 132 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 133 assert_equal Project.find(2), issue.project
Chris@0 134 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 135 assert_equal 'Stock management', issue.category.to_s
Chris@0 136 assert_equal 'Urgent', issue.priority.to_s
Chris@0 137 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 138 end
Chris@0 139
Chris@0 140
Chris@0 141 def test_add_issue_with_attachment_to_specific_project
Chris@0 142 issue = submit_email('ticket_with_attachment.eml', :issue => {:project => 'onlinestore'})
Chris@0 143 assert issue.is_a?(Issue)
Chris@0 144 assert !issue.new_record?
Chris@0 145 issue.reload
Chris@0 146 assert_equal 'Ticket created by email with attachment', issue.subject
Chris@0 147 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 148 assert_equal Project.find(2), issue.project
Chris@0 149 assert_equal 'This is a new ticket with attachments', issue.description
Chris@0 150 # Attachment properties
Chris@0 151 assert_equal 1, issue.attachments.size
Chris@0 152 assert_equal 'Paella.jpg', issue.attachments.first.filename
Chris@0 153 assert_equal 'image/jpeg', issue.attachments.first.content_type
Chris@0 154 assert_equal 10790, issue.attachments.first.filesize
Chris@0 155 end
Chris@0 156
Chris@0 157 def test_add_issue_with_custom_fields
Chris@0 158 issue = submit_email('ticket_with_custom_fields.eml', :issue => {:project => 'onlinestore'})
Chris@0 159 assert issue.is_a?(Issue)
Chris@0 160 assert !issue.new_record?
Chris@0 161 issue.reload
Chris@0 162 assert_equal 'New ticket with custom field values', issue.subject
Chris@0 163 assert_equal 'Value for a custom field', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
Chris@0 164 assert !issue.description.match(/^searchable field:/i)
Chris@0 165 end
Chris@0 166
Chris@0 167 def test_add_issue_with_cc
Chris@0 168 issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
Chris@0 169 assert issue.is_a?(Issue)
Chris@0 170 assert !issue.new_record?
Chris@0 171 issue.reload
Chris@0 172 assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
chris@37 173 assert_equal 1, issue.watcher_user_ids.size
Chris@0 174 end
Chris@0 175
Chris@0 176 def test_add_issue_by_unknown_user
Chris@0 177 assert_no_difference 'User.count' do
Chris@0 178 assert_equal false, submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'})
Chris@0 179 end
Chris@0 180 end
Chris@0 181
Chris@0 182 def test_add_issue_by_anonymous_user
Chris@0 183 Role.anonymous.add_permission!(:add_issues)
Chris@0 184 assert_no_difference 'User.count' do
Chris@0 185 issue = submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'}, :unknown_user => 'accept')
Chris@0 186 assert issue.is_a?(Issue)
Chris@0 187 assert issue.author.anonymous?
Chris@0 188 end
Chris@0 189 end
Chris@0 190
Chris@0 191 def test_add_issue_by_anonymous_user_with_no_from_address
Chris@0 192 Role.anonymous.add_permission!(:add_issues)
Chris@0 193 assert_no_difference 'User.count' do
Chris@0 194 issue = submit_email('ticket_by_empty_user.eml', :issue => {:project => 'ecookbook'}, :unknown_user => 'accept')
Chris@0 195 assert issue.is_a?(Issue)
Chris@0 196 assert issue.author.anonymous?
Chris@0 197 end
Chris@0 198 end
Chris@0 199
Chris@0 200 def test_add_issue_by_anonymous_user_on_private_project
Chris@0 201 Role.anonymous.add_permission!(:add_issues)
Chris@0 202 assert_no_difference 'User.count' do
Chris@0 203 assert_no_difference 'Issue.count' do
Chris@0 204 assert_equal false, submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'onlinestore'}, :unknown_user => 'accept')
Chris@0 205 end
Chris@0 206 end
Chris@0 207 end
Chris@0 208
Chris@0 209 def test_add_issue_by_anonymous_user_on_private_project_without_permission_check
Chris@0 210 assert_no_difference 'User.count' do
Chris@0 211 assert_difference 'Issue.count' do
Chris@0 212 issue = submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'onlinestore'}, :no_permission_check => '1', :unknown_user => 'accept')
Chris@0 213 assert issue.is_a?(Issue)
Chris@0 214 assert issue.author.anonymous?
Chris@0 215 assert !issue.project.is_public?
Chris@117 216 assert_equal [issue.id, 1, 2], [issue.root_id, issue.lft, issue.rgt]
Chris@0 217 end
Chris@0 218 end
Chris@0 219 end
Chris@0 220
Chris@0 221 def test_add_issue_by_created_user
Chris@0 222 Setting.default_language = 'en'
Chris@0 223 assert_difference 'User.count' do
Chris@0 224 issue = submit_email('ticket_by_unknown_user.eml', :issue => {:project => 'ecookbook'}, :unknown_user => 'create')
Chris@0 225 assert issue.is_a?(Issue)
Chris@0 226 assert issue.author.active?
Chris@0 227 assert_equal 'john.doe@somenet.foo', issue.author.mail
Chris@0 228 assert_equal 'John', issue.author.firstname
Chris@0 229 assert_equal 'Doe', issue.author.lastname
Chris@0 230
Chris@0 231 # account information
Chris@0 232 email = ActionMailer::Base.deliveries.first
Chris@0 233 assert_not_nil email
Chris@0 234 assert email.subject.include?('account activation')
Chris@0 235 login = email.body.match(/\* Login: (.*)$/)[1]
Chris@0 236 password = email.body.match(/\* Password: (.*)$/)[1]
Chris@0 237 assert_equal issue.author, User.try_to_login(login, password)
Chris@0 238 end
Chris@0 239 end
Chris@0 240
Chris@0 241 def test_add_issue_without_from_header
Chris@0 242 Role.anonymous.add_permission!(:add_issues)
Chris@0 243 assert_equal false, submit_email('ticket_without_from_header.eml')
Chris@0 244 end
chris@37 245
chris@37 246 def test_add_issue_with_invalid_attributes
chris@37 247 issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority')
chris@37 248 assert issue.is_a?(Issue)
chris@37 249 assert !issue.new_record?
chris@37 250 issue.reload
chris@37 251 assert_nil issue.assigned_to
chris@37 252 assert_nil issue.start_date
chris@37 253 assert_nil issue.due_date
chris@37 254 assert_equal 0, issue.done_ratio
chris@37 255 assert_equal 'Normal', issue.priority.to_s
chris@37 256 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
chris@37 257 end
chris@37 258
chris@37 259 def test_add_issue_with_localized_attributes
chris@37 260 User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
chris@37 261 issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
chris@37 262 assert issue.is_a?(Issue)
chris@37 263 assert !issue.new_record?
chris@37 264 issue.reload
chris@37 265 assert_equal 'New ticket on a given project', issue.subject
chris@37 266 assert_equal User.find_by_login('jsmith'), issue.author
chris@37 267 assert_equal Project.find(2), issue.project
chris@37 268 assert_equal 'Feature request', issue.tracker.to_s
chris@37 269 assert_equal 'Stock management', issue.category.to_s
chris@37 270 assert_equal 'Urgent', issue.priority.to_s
chris@37 271 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
chris@37 272 end
Chris@0 273
Chris@0 274 def test_add_issue_with_japanese_keywords
Chris@0 275 tracker = Tracker.create!(:name => '開発')
Chris@0 276 Project.find(1).trackers << tracker
Chris@0 277 issue = submit_email('japanese_keywords_iso_2022_jp.eml', :issue => {:project => 'ecookbook'}, :allow_override => 'tracker')
Chris@0 278 assert_kind_of Issue, issue
Chris@0 279 assert_equal tracker, issue.tracker
Chris@0 280 end
Chris@0 281
Chris@0 282 def test_should_ignore_emails_from_emission_address
Chris@0 283 Role.anonymous.add_permission!(:add_issues)
Chris@0 284 assert_no_difference 'User.count' do
Chris@0 285 assert_equal false, submit_email('ticket_from_emission_address.eml', :issue => {:project => 'ecookbook'}, :unknown_user => 'create')
Chris@0 286 end
Chris@0 287 end
Chris@0 288
Chris@0 289 def test_add_issue_should_send_email_notification
chris@37 290 Setting.notified_events = ['issue_added']
Chris@0 291 ActionMailer::Base.deliveries.clear
Chris@0 292 # This email contains: 'Project: onlinestore'
Chris@0 293 issue = submit_email('ticket_on_given_project.eml')
Chris@0 294 assert issue.is_a?(Issue)
Chris@0 295 assert_equal 1, ActionMailer::Base.deliveries.size
Chris@0 296 end
Chris@0 297
Chris@0 298 def test_add_issue_note
Chris@0 299 journal = submit_email('ticket_reply.eml')
Chris@0 300 assert journal.is_a?(Journal)
Chris@0 301 assert_equal User.find_by_login('jsmith'), journal.user
Chris@0 302 assert_equal Issue.find(2), journal.journalized
Chris@0 303 assert_match /This is reply/, journal.notes
Chris@117 304 assert_equal 'Feature request', journal.issue.tracker.name
Chris@0 305 end
Chris@0 306
Chris@0 307 def test_add_issue_note_with_attribute_changes
Chris@0 308 # This email contains: 'Status: Resolved'
Chris@0 309 journal = submit_email('ticket_reply_with_status.eml')
Chris@0 310 assert journal.is_a?(Journal)
Chris@0 311 issue = Issue.find(journal.issue.id)
Chris@0 312 assert_equal User.find_by_login('jsmith'), journal.user
Chris@0 313 assert_equal Issue.find(2), journal.journalized
Chris@0 314 assert_match /This is reply/, journal.notes
Chris@117 315 assert_equal 'Feature request', journal.issue.tracker.name
Chris@0 316 assert_equal IssueStatus.find_by_name("Resolved"), issue.status
Chris@0 317 assert_equal '2010-01-01', issue.start_date.to_s
Chris@0 318 assert_equal '2010-12-31', issue.due_date.to_s
Chris@0 319 assert_equal User.find_by_login('jsmith'), issue.assigned_to
Chris@117 320 assert_equal "52.6", issue.custom_value_for(CustomField.find_by_name('Float field')).value
Chris@0 321 end
Chris@0 322
Chris@0 323 def test_add_issue_note_should_send_email_notification
Chris@0 324 ActionMailer::Base.deliveries.clear
Chris@0 325 journal = submit_email('ticket_reply.eml')
Chris@0 326 assert journal.is_a?(Journal)
Chris@0 327 assert_equal 1, ActionMailer::Base.deliveries.size
Chris@0 328 end
Chris@0 329
Chris@117 330 def test_add_issue_note_should_not_set_defaults
Chris@117 331 journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
Chris@117 332 assert journal.is_a?(Journal)
Chris@117 333 assert_match /This is reply/, journal.notes
Chris@117 334 assert_equal 'Feature request', journal.issue.tracker.name
Chris@117 335 assert_equal 'Normal', journal.issue.priority.name
Chris@117 336 end
Chris@117 337
Chris@0 338 def test_reply_to_a_message
Chris@0 339 m = submit_email('message_reply.eml')
Chris@0 340 assert m.is_a?(Message)
Chris@0 341 assert !m.new_record?
Chris@0 342 m.reload
Chris@0 343 assert_equal 'Reply via email', m.subject
Chris@0 344 # The email replies to message #2 which is part of the thread of message #1
Chris@0 345 assert_equal Message.find(1), m.parent
Chris@0 346 end
Chris@0 347
Chris@0 348 def test_reply_to_a_message_by_subject
Chris@0 349 m = submit_email('message_reply_by_subject.eml')
Chris@0 350 assert m.is_a?(Message)
Chris@0 351 assert !m.new_record?
Chris@0 352 m.reload
Chris@0 353 assert_equal 'Reply to the first post', m.subject
Chris@0 354 assert_equal Message.find(1), m.parent
Chris@0 355 end
Chris@0 356
Chris@0 357 def test_should_strip_tags_of_html_only_emails
Chris@0 358 issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
Chris@0 359 assert issue.is_a?(Issue)
Chris@0 360 assert !issue.new_record?
Chris@0 361 issue.reload
Chris@0 362 assert_equal 'HTML email', issue.subject
Chris@0 363 assert_equal 'This is a html-only email.', issue.description
Chris@0 364 end
Chris@0 365
Chris@0 366 context "truncate emails based on the Setting" do
Chris@0 367 context "with no setting" do
Chris@0 368 setup do
Chris@0 369 Setting.mail_handler_body_delimiters = ''
Chris@0 370 end
Chris@0 371
Chris@0 372 should "add the entire email into the issue" do
Chris@0 373 issue = submit_email('ticket_on_given_project.eml')
Chris@0 374 assert_issue_created(issue)
Chris@0 375 assert issue.description.include?('---')
Chris@0 376 assert issue.description.include?('This paragraph is after the delimiter')
Chris@0 377 end
Chris@0 378 end
Chris@0 379
Chris@0 380 context "with a single string" do
Chris@0 381 setup do
Chris@0 382 Setting.mail_handler_body_delimiters = '---'
Chris@0 383 end
Chris@0 384
Chris@0 385 should "truncate the email at the delimiter for the issue" do
Chris@0 386 issue = submit_email('ticket_on_given_project.eml')
Chris@0 387 assert_issue_created(issue)
Chris@0 388 assert issue.description.include?('This paragraph is before delimiters')
Chris@0 389 assert issue.description.include?('--- This line starts with a delimiter')
Chris@0 390 assert !issue.description.match(/^---$/)
Chris@0 391 assert !issue.description.include?('This paragraph is after the delimiter')
Chris@0 392 end
Chris@0 393 end
Chris@0 394
chris@37 395 context "with a single quoted reply (e.g. reply to a Redmine email notification)" do
chris@37 396 setup do
chris@37 397 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
chris@37 398 end
chris@37 399
chris@37 400 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
chris@37 401 journal = submit_email('issue_update_with_quoted_reply_above.eml')
chris@37 402 assert journal.is_a?(Journal)
chris@37 403 assert journal.notes.include?('An update to the issue by the sender.')
chris@37 404 assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
chris@37 405 assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
chris@37 406
chris@37 407 end
chris@37 408
chris@37 409 end
chris@37 410
chris@37 411 context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
chris@37 412 setup do
chris@37 413 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
chris@37 414 end
chris@37 415
chris@37 416 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
chris@37 417 journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
chris@37 418 assert journal.is_a?(Journal)
chris@37 419 assert journal.notes.include?('An update to the issue by the sender.')
chris@37 420 assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
chris@37 421 assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
chris@37 422
chris@37 423 end
chris@37 424
chris@37 425 end
chris@37 426
Chris@0 427 context "with multiple strings" do
Chris@0 428 setup do
Chris@0 429 Setting.mail_handler_body_delimiters = "---\nBREAK"
Chris@0 430 end
Chris@0 431
Chris@0 432 should "truncate the email at the first delimiter found (BREAK)" do
Chris@0 433 issue = submit_email('ticket_on_given_project.eml')
Chris@0 434 assert_issue_created(issue)
Chris@0 435 assert issue.description.include?('This paragraph is before delimiters')
Chris@0 436 assert !issue.description.include?('BREAK')
Chris@0 437 assert !issue.description.include?('This paragraph is between delimiters')
Chris@0 438 assert !issue.description.match(/^---$/)
Chris@0 439 assert !issue.description.include?('This paragraph is after the delimiter')
Chris@0 440 end
Chris@0 441 end
Chris@0 442 end
Chris@0 443
Chris@0 444 def test_email_with_long_subject_line
Chris@0 445 issue = submit_email('ticket_with_long_subject.eml')
Chris@0 446 assert issue.is_a?(Issue)
Chris@0 447 assert_equal issue.subject, 'New ticket on a given project with a very long subject line which exceeds 255 chars and should not be ignored but chopped off. And if the subject line is still not long enough, we just add more text. And more text. Wow, this is really annoying. Especially, if you have nothing to say...'[0,255]
Chris@0 448 end
Chris@0 449
Chris@0 450 private
Chris@0 451
Chris@0 452 def submit_email(filename, options={})
Chris@0 453 raw = IO.read(File.join(FIXTURES_PATH, filename))
Chris@0 454 MailHandler.receive(raw, options)
Chris@0 455 end
Chris@0 456
Chris@0 457 def assert_issue_created(issue)
Chris@0 458 assert issue.is_a?(Issue)
Chris@0 459 assert !issue.new_record?
Chris@0 460 issue.reload
Chris@0 461 end
Chris@0 462 end