]> source.dussan.org Git - redmine.git/commitdiff
Adds a setting to remove incoming emails body after a delimiter (#4409).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 23 Dec 2009 18:35:19 +0000 (18:35 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 23 Dec 2009 18:35:19 +0000 (18:35 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3226 e93f8b46-1217-0410-a6f0-8f06a7374b81

41 files changed:
app/models/mail_handler.rb
app/views/settings/_mail_handler.rhtml
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en.yml
config/locales/es.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hu.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
config/settings.yml
public/stylesheets/application.css
test/fixtures/mail_handler/ticket_on_given_project.eml
test/unit/mail_handler_test.rb

index 2ecf3734e3fe23be80e754a6b459e4d39cac3d0d..188057573a6e7a400b17f30b45ab74eb5097e684 100644 (file)
@@ -136,7 +136,6 @@ class MailHandler < ActionMailer::Base
     if issue.subject.blank?
       issue.subject = '(no subject)'
     end
-    issue.description = plain_text_body
     # custom fields
     issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|
       if value = get_keyword(c.name, :override => true)
@@ -144,6 +143,7 @@ class MailHandler < ActionMailer::Base
       end
       h
     end
+    issue.description = cleaned_up_text_body
     # add To and Cc as watchers before saving so the watchers can reply to Redmine
     add_watchers(issue)
     issue.save!
@@ -174,7 +174,7 @@ class MailHandler < ActionMailer::Base
     end
 
     # add the note
-    journal = issue.init_journal(user, plain_text_body)
+    journal = issue.init_journal(user, cleaned_up_text_body)
     add_attachments(issue)
     # check workflow
     if status && issue.new_statuses_allowed_to(user).include?(status)
@@ -205,7 +205,7 @@ class MailHandler < ActionMailer::Base
       
       if !message.locked?
         reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip,
-                            :content => plain_text_body)
+                            :content => cleaned_up_text_body)
         reply.author = user
         reply.board = message.board
         message.children << reply
@@ -276,6 +276,9 @@ class MailHandler < ActionMailer::Base
     @plain_text_body
   end
   
+  def cleaned_up_text_body
+    cleanup_body(plain_text_body)
+  end
 
   def self.full_sanitizer
     @full_sanitizer ||= HTML::FullSanitizer.new
@@ -299,4 +302,16 @@ class MailHandler < ActionMailer::Base
       user.save ? user : nil
     end
   end
+
+  private
+  
+  # Removes the email body of text after the truncation configurations.
+  def cleanup_body(body)
+    delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
+    unless delimiters.empty?
+      regex = Regexp.new("^(#{ delimiters.join('|') })\s*$.*", Regexp::MULTILINE)
+      body = body.gsub(regex, '')
+    end
+    body.strip
+  end
 end
index 89ea55c5bdd0d09495597e07162e53c51ed18670..f3508ace3c8e372b07a3d28376aad57f285da940 100644 (file)
@@ -1,5 +1,12 @@
 <% form_tag({:action => 'edit', :tab => 'mail_handler'}) do %>
 
+<div class="box tabular settings">
+  <p>
+    <%= setting_text_area :mail_handler_body_delimiters, :rows => 5 %>
+    <br /><em><%= l(:text_line_separated) %></em>
+  </p>
+</div>
+
 <div class="box tabular settings">
 <p><%= setting_check_box :mail_handler_api_enabled, 
                                 :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }"%></p>
@@ -12,4 +19,5 @@
 </div>
 
 <%= submit_tag l(:button_save) %>
+
 <% end %>
index faf606df36b01980102e7d121aa41f5d843bbe99..d70626c9d58bdf01ba5316d73236e0163795a224 100644 (file)
@@ -865,3 +865,5 @@ bg:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index f8b26d6bf2dad6d93f205945546f033a23f9b2ec..860d1f25407bb05340cbeeaec3e6c2c9a578d309 100644 (file)
@@ -889,3 +889,5 @@ bs:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index ff857afd0ad4c23e0bc33a2173661e4f9407c762..0f4dbf010e06ef41001a644461260523c5b64348 100644 (file)
@@ -868,3 +868,5 @@ ca:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index ba9386d0d175c742421ae92443dbbd58f91165a8..6165b6d6fd3b2462d80122e838ae8915d8b4f1d5 100644 (file)
@@ -871,3 +871,5 @@ cs:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 9c9bc2bb026f88df5e218d7ac45135bf34d5317d..7877161e59fa90263e1e22e54a4a52595cf5916e 100644 (file)
@@ -891,3 +891,5 @@ da:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index b540f3c65931b58d54515e4d446352517d7ee1ab..7d1dbcbfe5e29600f5f5046b4773e4bc3b306bff 100644 (file)
@@ -891,3 +891,5 @@ de:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 6674f8187d024f7bac9b40f2f65e105b69bc30d9..d4b9616d46878b45a3244109555da347724f8127 100644 (file)
@@ -871,3 +871,5 @@ el:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index cf42a7b0ab3e1a8dedbf7e9a24f76e761e085d56..37709072a280e1fe4bb115e34890bd1723578052 100644 (file)
@@ -308,6 +308,7 @@ en:
   setting_activity_days_default: Days displayed on project activity
   setting_display_subprojects_issues: Display subprojects issues on main projects by default
   setting_enabled_scm: Enabled SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
   setting_mail_handler_api_enabled: Enable WS for incoming emails
   setting_mail_handler_api_key: API key
   setting_sequential_project_identifiers: Generate sequential project identifiers
@@ -812,6 +813,7 @@ en:
   text_tracker_no_workflow: No workflow defined for this tracker
   text_unallowed_characters: Unallowed characters
   text_comma_separated: Multiple values allowed (comma separated).
+  text_line_separated: Multiple values allowed (one line for each value).
   text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
   text_issue_added: "Issue {{id}} has been reported by {{author}}."
   text_issue_updated: "Issue {{id}} has been updated by {{author}}."
index 79da10c34909988d3e638825f8c3900c5b029ece..4b882884f91cd149722d1b8b73199959db4678cf 100644 (file)
@@ -912,3 +912,5 @@ es:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index fa03fc5e4b20fb9b931cbf0127570f9dc9548b71..2dcf4574f1297cf4e89b92d43e145697db83a045 100644 (file)
@@ -901,3 +901,5 @@ fi:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index f613b3c301c8cbbdc84d4ac80767a044306ec9fd..eb9b382ac7c9fa0beb25ba6a26475fc8e4232e35 100644 (file)
@@ -330,6 +330,7 @@ fr:
   setting_activity_days_default: Nombre de jours affichés sur l'activité des projets
   setting_display_subprojects_issues: Afficher par défaut les demandes des sous-projets sur les projets principaux
   setting_enabled_scm: SCM activés
+  setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes"
   setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails"
   setting_mail_handler_api_key: Clé de protection de l'API
   setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels
@@ -820,6 +821,7 @@ fr:
   text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker
   text_unallowed_characters: Caractères non autorisés
   text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules).
+  text_line_separated: Plusieurs valeurs possibles (une valeur par ligne).
   text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits
   text_issue_added: "La demande {{id}} a Ã©té soumise par {{author}}."
   text_issue_updated: "La demande {{id}} a Ã©té mise Ã  jour par {{author}}."
index a0d2b0561481f503d6a893c038b09112f4641d69..90a07f3d9d20de1df85150afe360948440ca2b55 100644 (file)
@@ -891,3 +891,5 @@ gl:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 1d45621bbf71660457ca90acce1f0869ef684d27..48300414abd3d7bf7ba9b5f515882d7cb81c4a69 100644 (file)
@@ -875,3 +875,5 @@ he:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index d4fbb9d0e9a1d961d8951b759887ae27356763b4..bc303fa45def8c3ca5ae4b7427c7cb351e73c705 100644 (file)
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 35b88efb700242afacdbd83e986d4d09d759c817..b06e00c8f4e1551db6816d29c7aecdbec58d25d4 100644 (file)
@@ -878,3 +878,5 @@ it:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index aefb7702aa561e92e8ca3355ce9ebe6fa3bc5a72..d2dfb2beecf3616b1a60c9c0910c280c3c37fe5e 100644 (file)
@@ -900,3 +900,5 @@ ja:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index a17bcb65edacb32f5077e19d7d5ea5c1b9997ed5..78d8a52aab8649fba4d3b35342922598e5eb2a35 100644 (file)
@@ -931,3 +931,5 @@ ko:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 4c34bf57980365bd4458183c03d5c169246b4a51..9294d2dc5a31a8240863077291674244bc4fa41c 100644 (file)
@@ -939,3 +939,5 @@ lt:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index af7c5bdf068e577fdb4496b570c7ada334bfb0a7..9ee414071257beee116606328d6dc3c61fede593 100644 (file)
@@ -853,3 +853,5 @@ nl:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 7eb22a8368b7533cae66601123f10d42f104283c..f6f9da3a32c9551e91b405797c9044e5ba5bb327 100644 (file)
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 8be9d6fd0aae05017c6189cde2f4c4d8e9f63192..affd8dceefec3c7e655b3722d32c85f163a20db5 100644 (file)
@@ -894,3 +894,5 @@ pl:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 63d60d3c4798f1903dfa6820f29537f2840d3db8..0fa944c17438d7cc33ed6dffdad178615232a366 100644 (file)
@@ -899,3 +899,5 @@ pt-BR:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 0885d323b5d24c989f97fd88748dda1be1503ffa..0a567a6bc9c49787b2f59376274269599ceec8cc 100644 (file)
@@ -883,3 +883,5 @@ pt:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 3cbd65e161800fbad8b9f5999afb9b5232ab5985..45956a4d8010e98b3c02443b3451f4df1b89b4af 100644 (file)
@@ -868,3 +868,5 @@ ro:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 73196f6acb9bfbfbe7889f2658bc510273b4c273..51bd8db8e14cb0b2c167a7eed6ef22c7d9cae63d 100644 (file)
@@ -979,3 +979,5 @@ ru:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 0289ab86be95468ffcc967b132bd1c7e0d8d89e9..e95eefab657230fcdd86905e073bb0bc46879723 100644 (file)
@@ -870,3 +870,5 @@ sk:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 77cea8210059291821456c1e9dd40913cef34e5d..5845ee009a89779ca14ea7c2d29c462608d0864f 100644 (file)
@@ -867,3 +867,5 @@ sl:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index d80d05fbdd08466c5fa412a112492bd2d7fcd19d..5cbd596431d79fda24ae4239747559d4717f325f 100644 (file)
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 7b64b350e9112a13c1984de0785374ad0f668dd8..3d7b2e37bfc63a06d979eeb49c4400afe96b2d46 100644 (file)
@@ -920,3 +920,5 @@ sv:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 6bb7e4eaaee1289bf7344f55c995d216445c602a..07de4c4b6c60193f0c11b3d448520a2471f49487 100644 (file)
@@ -868,3 +868,5 @@ th:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 7c04da80576da9fc0df9ddbc59932750cbadc44f..056cb5656ee9f704088457c8098db008dc2d3532 100644 (file)
@@ -898,3 +898,5 @@ tr:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 599099c1a813e9b69f7cfbfc24055fed32697b51..f5b83b241a33e49f71a02e2362f85708a5ca66b0 100644 (file)
@@ -867,3 +867,5 @@ uk:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index dc5add3eba109b913ab690684e4efd333f9c4123..50ac2d8b9e7984dbdd143e599219b203c40370dd 100644 (file)
@@ -930,3 +930,5 @@ vi:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 5fa4f5213118987150aedd0c3fb95e139f4ad7cd..471029cb6bb43d84f2da19ffe7b28635da9e2689 100644 (file)
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index c909282f2940ff29bfdaa7aa0373d2cb23ea8f58..883c4bb5e6795e2096f26d20569bc30f95684fb4 100644 (file)
@@ -895,3 +895,5 @@ zh:
   label_missing_api_access_key: Missing an API access key
   label_missing_feeds_access_key: Missing a RSS access key
   button_show: Show
+  text_line_separated: Multiple values allowed (one line for each value).
+  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
index 09bce1f20a752c88ec3b2da6a2586045a230b69e..cebfbb50011952f6f4bcc396543f8f931e2a2a77 100644 (file)
@@ -116,6 +116,8 @@ notified_events:
   default: 
   - issue_added
   - issue_updated
+mail_handler_body_delimiters:
+  default: ''
 mail_handler_api_enabled:
   default: 0
 mail_handler_api_key:
index f5e4e827861e276c64abc7c7c6d44ea43b7d7bed..64741d7ad8601eb0c19761a45fa4eca16d9114b1 100644 (file)
@@ -370,6 +370,7 @@ input#time_entry_comments { width: 90%;}
 
 .tabular.settings p{ padding-left: 300px; }
 .tabular.settings label{ margin-left: -300px; width: 295px; }
+.tabular.settings textarea { width: 99%; }
 
 fieldset.settings label { display: block; }
 
index 5dbd0dc2e9917b4242db4763897f42d53d8ca99b..372e7302ce31188bcb2327c16fe412ebe3933063 100644 (file)
@@ -26,10 +26,22 @@ in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras
 sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum \r
 id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus \r
 eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique \r
-sed, mauris. Pellentesque habitant morbi tristique senectus et netus et \r
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et \r
 malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse \r
 platea dictumst.\r
 \r
+--- This line starts with a delimiter and should not be stripped\r
+\r
+This paragraph is before delimiters.\r
+\r
+BREAK\r
+\r
+This paragraph is between delimiters.\r
+\r
+---\r
+\r
+This paragraph is after the delimiter so it shouldn't appear.\r
+\r
 Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque \r
 sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. \r
 Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, \r
index a4ae373453193ad6a4d8787585237dcecd3417c0..21d2aedd56b74cb0339b55dd1d266c0c97355c24 100644 (file)
@@ -279,10 +279,62 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal 'This is a html-only email.', issue.description
   end
 
+  context "truncate emails based on the Setting" do
+    context "with no setting" do
+      setup do
+        Setting.mail_handler_body_delimiters = ''
+      end
+
+      should "add the entire email into the issue" do
+        issue = submit_email('ticket_on_given_project.eml')
+        assert_issue_created(issue)
+        assert issue.description.include?('---')
+        assert issue.description.include?('This paragraph is after the delimiter')
+      end
+    end
+
+    context "with a single string" do
+      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)
+        assert issue.description.include?('This paragraph is before delimiters')
+        assert issue.description.include?('--- This line starts with a delimiter')
+        assert !issue.description.match(/^---$/)
+        assert !issue.description.include?('This paragraph is after the delimiter')
+      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)
+        assert issue.description.include?('This paragraph is before delimiters')
+        assert !issue.description.include?('BREAK')
+        assert !issue.description.include?('This paragraph is between delimiters')
+        assert !issue.description.match(/^---$/)
+        assert !issue.description.include?('This paragraph is after the delimiter')
+      end
+    end
+  end
+
   private
   
   def submit_email(filename, options={})
     raw = IO.read(File.join(FIXTURES_PATH, filename))
     MailHandler.receive(raw, options)
   end
+
+  def assert_issue_created(issue)
+    assert issue.is_a?(Issue)
+    assert !issue.new_record?
+    issue.reload
+  end
 end