annotate test/unit/mail_handler_test.rb @ 855:7294e8db2515 bug_162

Close obsolete branch bug_162
author Chris Cannam
date Thu, 14 Jul 2011 11:59:19 +0100
parents cbce1fd3b1b7
children 0c939c159af4
rev   line source
Chris@0 1 # encoding: utf-8
Chris@0 2 #
Chris@0 3 # Redmine - project management software
Chris@441 4 # Copyright (C) 2006-2011 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@441 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@441 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@119 20 require File.expand_path('../../test_helper', __FILE__)
Chris@0 21
Chris@0 22 class MailHandlerTest < ActiveSupport::TestCase
Chris@441 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@119 39 :custom_fields_projects,
Chris@0 40 :boards,
Chris@0 41 :messages
Chris@441 42
Chris@0 43 FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
Chris@441 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@441 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@119 57 assert_equal Project.find(2), issue.project
Chris@119 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@119 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@441 73 assert !issue.description.match(/^Start Date:/i)
Chris@0 74 # Email notification should be sent
Chris@0 75 mail = ActionMailer::Base.deliveries.last
Chris@0 76 assert_not_nil mail
Chris@0 77 assert mail.subject.include?('New ticket on a given project')
Chris@0 78 end
Chris@441 79
Chris@119 80 def test_add_issue_with_default_tracker
Chris@119 81 # This email contains: 'Project: onlinestore'
Chris@119 82 issue = submit_email('ticket_on_given_project.eml', :issue => {:tracker => 'Support request'})
Chris@119 83 assert issue.is_a?(Issue)
Chris@119 84 assert !issue.new_record?
Chris@119 85 issue.reload
Chris@119 86 assert_equal 'Support request', issue.tracker.name
Chris@119 87 end
Chris@0 88
Chris@0 89 def test_add_issue_with_status
Chris@0 90 # This email contains: 'Project: onlinestore' and 'Status: Resolved'
Chris@0 91 issue = submit_email('ticket_on_given_project.eml')
Chris@0 92 assert issue.is_a?(Issue)
Chris@0 93 assert !issue.new_record?
Chris@0 94 issue.reload
Chris@0 95 assert_equal Project.find(2), issue.project
Chris@0 96 assert_equal IssueStatus.find_by_name("Resolved"), issue.status
Chris@0 97 end
Chris@441 98
Chris@0 99 def test_add_issue_with_attributes_override
Chris@0 100 issue = submit_email('ticket_with_attributes.eml', :allow_override => 'tracker,category,priority')
Chris@0 101 assert issue.is_a?(Issue)
Chris@0 102 assert !issue.new_record?
Chris@0 103 issue.reload
Chris@0 104 assert_equal 'New ticket on a given project', issue.subject
Chris@0 105 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 106 assert_equal Project.find(2), issue.project
Chris@0 107 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 108 assert_equal 'Stock management', issue.category.to_s
Chris@0 109 assert_equal 'Urgent', issue.priority.to_s
Chris@0 110 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 111 end
Chris@441 112
Chris@0 113 def test_add_issue_with_partial_attributes_override
Chris@0 114 issue = submit_email('ticket_with_attributes.eml', :issue => {:priority => 'High'}, :allow_override => ['tracker'])
Chris@0 115 assert issue.is_a?(Issue)
Chris@0 116 assert !issue.new_record?
Chris@0 117 issue.reload
Chris@0 118 assert_equal 'New ticket on a given project', issue.subject
Chris@0 119 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 120 assert_equal Project.find(2), issue.project
Chris@0 121 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 122 assert_nil issue.category
Chris@0 123 assert_equal 'High', issue.priority.to_s
Chris@0 124 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 125 end
Chris@441 126
Chris@0 127 def test_add_issue_with_spaces_between_attribute_and_separator
Chris@0 128 issue = submit_email('ticket_with_spaces_between_attribute_and_separator.eml', :allow_override => 'tracker,category,priority')
Chris@0 129 assert issue.is_a?(Issue)
Chris@0 130 assert !issue.new_record?
Chris@0 131 issue.reload
Chris@0 132 assert_equal 'New ticket on a given project', issue.subject
Chris@0 133 assert_equal User.find_by_login('jsmith'), issue.author
Chris@0 134 assert_equal Project.find(2), issue.project
Chris@0 135 assert_equal 'Feature request', issue.tracker.to_s
Chris@0 136 assert_equal 'Stock management', issue.category.to_s
Chris@0 137 assert_equal 'Urgent', issue.priority.to_s
Chris@0 138 assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
Chris@0 139 end
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@441 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@441 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@441 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@441 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@441 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@441 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@119 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@441 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@441 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@441 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@441 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@441 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@119 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@119 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@119 320 assert_equal "52.6", issue.custom_value_for(CustomField.find_by_name('Float field')).value
Chris@441 321 # keywords should be removed from the email body
Chris@441 322 assert !journal.notes.match(/^Status:/i)
Chris@441 323 assert !journal.notes.match(/^Start Date:/i)
Chris@0 324 end
Chris@0 325
Chris@0 326 def test_add_issue_note_should_send_email_notification
Chris@0 327 ActionMailer::Base.deliveries.clear
Chris@0 328 journal = submit_email('ticket_reply.eml')
Chris@0 329 assert journal.is_a?(Journal)
Chris@0 330 assert_equal 1, ActionMailer::Base.deliveries.size
Chris@0 331 end
Chris@441 332
Chris@119 333 def test_add_issue_note_should_not_set_defaults
Chris@119 334 journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
Chris@119 335 assert journal.is_a?(Journal)
Chris@119 336 assert_match /This is reply/, journal.notes
Chris@119 337 assert_equal 'Feature request', journal.issue.tracker.name
Chris@119 338 assert_equal 'Normal', journal.issue.priority.name
Chris@119 339 end
Chris@441 340
Chris@0 341 def test_reply_to_a_message
Chris@0 342 m = submit_email('message_reply.eml')
Chris@0 343 assert m.is_a?(Message)
Chris@0 344 assert !m.new_record?
Chris@0 345 m.reload
Chris@0 346 assert_equal 'Reply via email', m.subject
Chris@0 347 # The email replies to message #2 which is part of the thread of message #1
Chris@0 348 assert_equal Message.find(1), m.parent
Chris@0 349 end
Chris@441 350
Chris@0 351 def test_reply_to_a_message_by_subject
Chris@0 352 m = submit_email('message_reply_by_subject.eml')
Chris@0 353 assert m.is_a?(Message)
Chris@0 354 assert !m.new_record?
Chris@0 355 m.reload
Chris@0 356 assert_equal 'Reply to the first post', m.subject
Chris@0 357 assert_equal Message.find(1), m.parent
Chris@0 358 end
Chris@441 359
Chris@0 360 def test_should_strip_tags_of_html_only_emails
Chris@0 361 issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
Chris@0 362 assert issue.is_a?(Issue)
Chris@0 363 assert !issue.new_record?
Chris@0 364 issue.reload
Chris@0 365 assert_equal 'HTML email', issue.subject
Chris@0 366 assert_equal 'This is a html-only email.', issue.description
Chris@0 367 end
Chris@0 368
Chris@0 369 context "truncate emails based on the Setting" do
Chris@0 370 context "with no setting" do
Chris@0 371 setup do
Chris@0 372 Setting.mail_handler_body_delimiters = ''
Chris@0 373 end
Chris@0 374
Chris@0 375 should "add the entire email into the issue" do
Chris@0 376 issue = submit_email('ticket_on_given_project.eml')
Chris@0 377 assert_issue_created(issue)
Chris@0 378 assert issue.description.include?('---')
Chris@0 379 assert issue.description.include?('This paragraph is after the delimiter')
Chris@0 380 end
Chris@0 381 end
Chris@0 382
Chris@0 383 context "with a single string" do
Chris@0 384 setup do
Chris@0 385 Setting.mail_handler_body_delimiters = '---'
Chris@0 386 end
Chris@0 387 should "truncate the email at the delimiter for the issue" do
Chris@0 388 issue = submit_email('ticket_on_given_project.eml')
Chris@0 389 assert_issue_created(issue)
Chris@0 390 assert issue.description.include?('This paragraph is before delimiters')
Chris@0 391 assert issue.description.include?('--- This line starts with a delimiter')
Chris@0 392 assert !issue.description.match(/^---$/)
Chris@0 393 assert !issue.description.include?('This paragraph is after the delimiter')
Chris@0 394 end
Chris@0 395 end
Chris@0 396
chris@37 397 context "with a single quoted reply (e.g. reply to a Redmine email notification)" do
chris@37 398 setup do
chris@37 399 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
chris@37 400 end
chris@37 401 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
chris@37 402 journal = submit_email('issue_update_with_quoted_reply_above.eml')
chris@37 403 assert journal.is_a?(Journal)
chris@37 404 assert journal.notes.include?('An update to the issue by the sender.')
chris@37 405 assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
chris@37 406 assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
Chris@441 407 end
Chris@441 408 end
chris@37 409
chris@37 410 context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
chris@37 411 setup do
chris@37 412 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
chris@37 413 end
chris@37 414 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
chris@37 415 journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
chris@37 416 assert journal.is_a?(Journal)
chris@37 417 assert journal.notes.include?('An update to the issue by the sender.')
chris@37 418 assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
chris@37 419 assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
chris@37 420 end
chris@37 421 end
chris@37 422
Chris@0 423 context "with multiple strings" do
Chris@0 424 setup do
Chris@0 425 Setting.mail_handler_body_delimiters = "---\nBREAK"
Chris@0 426 end
Chris@0 427 should "truncate the email at the first delimiter found (BREAK)" do
Chris@0 428 issue = submit_email('ticket_on_given_project.eml')
Chris@0 429 assert_issue_created(issue)
Chris@0 430 assert issue.description.include?('This paragraph is before delimiters')
Chris@0 431 assert !issue.description.include?('BREAK')
Chris@0 432 assert !issue.description.include?('This paragraph is between delimiters')
Chris@0 433 assert !issue.description.match(/^---$/)
Chris@0 434 assert !issue.description.include?('This paragraph is after the delimiter')
Chris@0 435 end
Chris@0 436 end
Chris@0 437 end
Chris@441 438
Chris@0 439 def test_email_with_long_subject_line
Chris@0 440 issue = submit_email('ticket_with_long_subject.eml')
Chris@0 441 assert issue.is_a?(Issue)
Chris@0 442 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 443 end
Chris@0 444
Chris@0 445 private
Chris@441 446
Chris@0 447 def submit_email(filename, options={})
Chris@0 448 raw = IO.read(File.join(FIXTURES_PATH, filename))
Chris@0 449 MailHandler.receive(raw, options)
Chris@0 450 end
Chris@0 451
Chris@0 452 def assert_issue_created(issue)
Chris@0 453 assert issue.is_a?(Issue)
Chris@0 454 assert !issue.new_record?
Chris@0 455 issue.reload
Chris@0 456 end
Chris@0 457 end