Project

General

Profile

Patch #2702 » mail_handler_update.diff

mail_handler.rb, mail_handler_test.rb, fixtures - Go MAEDA, 2009-02-09 08:01

View differences:

app/models/mail_handler.rb (working copy)
104 104
    issue.subject = email.subject.chomp.toutf8
105 105
    issue.description = plain_text_body
106 106
    # custom fields
107
    issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|
108
      if value = get_keyword(c.name, :override => true)
109
        h[c.id] = value
110
      end
111
      h
112
    end
107
    issue.custom_field_values = get_custom_field_values(issue.available_custom_fields)
108
    # other fields
109
    set_issue_field_values(issue)
113 110
    issue.save!
114 111
    add_attachments(issue)
115 112
    logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
......
146 143
    if status && issue.new_statuses_allowed_to(user).include?(status)
147 144
      issue.status = status
148 145
    end
146
    # custom fields
147
    issue.custom_field_values = get_custom_field_values(issue.available_custom_fields)
148
    # other fields
149
    set_issue_field_values(issue)
149 150
    issue.save!
150 151
    logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
151 152
    Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
......
229 230
    end
230 231
    @plain_text_body.strip!
231 232
  end
233
  
234
  def get_custom_field_values(custom_fields)
235
    custom_fields.inject({}) do |h, c|
236
      if value = get_keyword(c.name, :override => true)
237
        h[c.id] = value
238
      end
239
      h
240
    end
241
  end
242

  
243
  def set_issue_field_values(issue)
244
    issue.start_date = get_keyword(:start_date, :override => true)
245
    issue.due_date = get_keyword(:due_date, :override => true)
246
    v = get_keyword(:startdate, :override => true)
247
    issue.start_date = dt.to_date if v
248
    v = get_keyword(:startdate, :override => true)
249
    issue.due_date = dt.to_date if v
250
    issue.done_ratio = get_keyword(:done_ratio, :override => true) || 0
251
    issue.estimated_hours = get_keyword(:estimated_hours, :override => true)
252

  
253
    assigned_to = get_keyword(:assigned_to, :override => true)
254
    if assigned_to then
255
      if assigned_to =~ /@/ then
256
        issue.assigned_to = User.find_by_mail(assigned_to)
257
      else
258
        issue.assigned_to = User.find_by_login(assigned_to)
259
      end
260
    end
261
  end
232 262
end
test/unit/mail_handler_test.rb (working copy)
89 89
    assert_equal 'High', issue.priority.to_s
90 90
    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
91 91
  end
92

  
93
  def test_add_issue_with_full_attributes_override
94
    issue = submit_email('ticket_with_full_attributes.eml', :allow_override => 'tracker,category,priority')
95
    assert issue.is_a?(Issue)
96
    assert !issue.new_record?
97
    issue.reload
98
    assert_equal 'New ticket on a given project', issue.subject
99
    assert_equal User.find_by_login('jsmith'), issue.author
100
    assert_equal Project.find(2), issue.project
101
    assert_equal 'Feature request', issue.tracker.to_s
102
    assert_equal 'Stock management', issue.category.to_s
103
    assert_equal 'Urgent', issue.priority.to_s
104
    assert_equal '2009-01-31'.to_date, issue.start_date
105
    assert_equal '2009-02-03'.to_date, issue.due_date
106
    assert_equal 70, issue.done_ratio
107
    assert_equal 28, issue.estimated_hours
108
    assert_equal User.find_by_login('jsmith'), issue.assigned_to
109
    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
110
  end
92 111
  
93 112
  def test_add_issue_with_attachment_to_specific_project
94 113
    issue = submit_email('ticket_with_attachment.eml', :issue => {:project => 'onlinestore'})
......
142 161
    assert_match /This is reply/, journal.notes
143 162
    assert_equal IssueStatus.find_by_name("Resolved"), issue.status
144 163
  end
164

  
165
  def test_add_issue_note_with_custom_fields
166
    journal = submit_email('ticket_reply_with_custom_fields.eml')
167
    assert journal.is_a?(Journal)
168
    issue = Issue.find(journal.issue.id)
169
    assert_match /This is reply/, journal.notes
170
    assert_equal 'Updated value for a custom field', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
171
  end
145 172
  
146 173
  def test_reply_to_a_message
147 174
    m = submit_email('message_reply.eml')
test/fixtures/mail_handler/ticket_with_full_attributes.eml (revision 0)
1
Return-Path: <jsmith@somenet.foo>
2
Received: from osiris ([127.0.0.1])
3
	by OSIRIS
4
	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
5
Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
6
From: "John Smith" <jsmith@somenet.foo>
7
To: <redmine@somenet.foo>
8
Subject: New ticket on a given project
9
Date: Sun, 22 Jun 2008 12:28:07 +0200
10
MIME-Version: 1.0
11
Content-Type: text/plain;
12
	format=flowed;
13
	charset="iso-8859-1";
14
	reply-type=original
15
Content-Transfer-Encoding: 7bit
16
X-Priority: 3
17
X-MSMail-Priority: Normal
18
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
19
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
20

  
21
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
22
turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
23
blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
24
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
25
in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
26
sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
27
id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
28
eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
29
sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
30
malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
31
platea dictumst.
32

  
33
Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
34
sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
35
Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
36
dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
37
massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
38
pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
39

  
40
Project: onlinestore
41
Tracker: Feature request
42
category: Stock management
43
priority: Urgent
44
start_date: 2009-01-31
45
due_date: 2009-02-03
46
done_ratio: 70
47
estimated_hours: 28.0
48
assigned_to: jsmith@somenet.foo
test/fixtures/mail_handler/ticket_reply_with_custom_fields.eml (revision 0)
1
Return-Path: <jsmith@somenet.foo>
2
Received: from osiris ([127.0.0.1])
3
	by OSIRIS
4
	with hMailServer ; Sat, 21 Jun 2008 18:41:39 +0200
5
Message-ID: <006a01c8d3bd$ad9baec0$0a00a8c0@osiris>
6
From: "John Smith" <jsmith@somenet.foo>
7
To: <redmine@somenet.foo>
8
References: <485d0ad366c88_d7014663a025f@osiris.tmail>
9
Subject: Re: [onlinestore - Bug #4] (New) Issue on project 2
10
Date: Sat, 21 Jun 2008 18:41:39 +0200
11
MIME-Version: 1.0
12
Content-Type: multipart/alternative;
13
	boundary="----=_NextPart_000_0067_01C8D3CE.711F9CC0"
14
X-Priority: 3
15
X-MSMail-Priority: Normal
16
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
17
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
18

  
19
This is a multi-part message in MIME format.
20

  
21
------=_NextPart_000_0067_01C8D3CE.711F9CC0
22
Content-Type: text/plain;
23
	charset="utf-8"
24
Content-Transfer-Encoding: quoted-printable
25

  
26
This is reply
27

  
28
searchable field: Updated value for a custom field
29
------=_NextPart_000_0067_01C8D3CE.711F9CC0
30
Content-Type: text/html;
31
	charset="utf-8"
32
Content-Transfer-Encoding: quoted-printable
33

  
34
=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
35
<HTML><HEAD>
36
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
37
<STYLE>BODY {
38
	FONT-SIZE: 0.8em; COLOR: #484848; FONT-FAMILY: Verdana, sans-serif
39
}
40
BODY H1 {
41
	FONT-SIZE: 1.2em; MARGIN: 0px; FONT-FAMILY: "Trebuchet MS", Verdana, =
42
sans-serif
43
}
44
A {
45
	COLOR: #2a5685
46
}
47
A:link {
48
	COLOR: #2a5685
49
}
50
A:visited {
51
	COLOR: #2a5685
52
}
53
A:hover {
54
	COLOR: #c61a1a
55
}
56
A:active {
57
	COLOR: #c61a1a
58
}
59
HR {
60
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BACKGROUND: #ccc; BORDER-LEFT: 0px; =
61
WIDTH: 100%; BORDER-BOTTOM: 0px; HEIGHT: 1px
62
}
63
.footer {
64
	FONT-SIZE: 0.8em; FONT-STYLE: italic
65
}
66
</STYLE>
67

  
68
<META content=3D"MSHTML 6.00.2900.2883" name=3DGENERATOR></HEAD>
69
<BODY bgColor=3D#ffffff>
70
<DIV><SPAN class=3Dfooter><FONT face=3DArial color=3D#000000 =
71
size=3D2>This is=20
72
reply Status: Resolved</FONT></DIV></SPAN></BODY></HTML>
73

  
74
------=_NextPart_000_0067_01C8D3CE.711F9CC0--
75

  
(1-1/2)