Commit f13cebfe5318ab22858a3383d6e7ffb7cbbf5555

Authored by AntonioTerceiro
1 parent 0aa7c21a

ActionItem96: implementing mailing in task finish/cancel



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@621 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/task.rb
... ... @@ -38,7 +38,7 @@ class Task < ActiveRecord::Base
38 38 self.end_date = Time.now
39 39 self.save!
40 40 self.perform
41   - self.notify_requestor(self.finish_message)
  41 + TaskMailer.deliver_task_finished(self)
42 42 end
43 43 end
44 44  
... ... @@ -49,7 +49,7 @@ class Task < ActiveRecord::Base
49 49 self.status = Task::Status::CANCELLED
50 50 self.end_date = Time.now
51 51 self.save!
52   - self.notify_requestor(self.cancel_message)
  52 + TaskMailer.deliver_task_cancelled(self)
53 53 end
54 54 end
55 55  
... ... @@ -65,11 +65,6 @@ class Task < ActiveRecord::Base
65 65 def perform
66 66 end
67 67  
68   - # sends a message to the requestor
69   - def notify_requestor(msg)
70   - # TODO: implement message sending
71   - end
72   -
73 68 # The message that will be sent to the requestor of the task when its
74 69 # finished.
75 70 def finish_message
... ...
app/models/task_mailer.rb
1 1 class TaskMailer < ActionMailer::Base
  2 +
  3 + def task_finished(task)
  4 + recipients task.requestor.email
  5 + from task.requestor.environment.contact_email
  6 + subject task
  7 + body :requestor => task.requestor.name,
  8 + :message => task.finish_message,
  9 + :environment => task.requestor.environment.name,
  10 + :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home')
  11 + end
  12 +
  13 + def task_cancelled(task)
  14 + recipients task.requestor.email
  15 + from task.requestor.environment.contact_email
  16 + subject task
  17 + body :requestor => task.requestor.name,
  18 + :message => task.cancel_message,
  19 + :environment => task.requestor.environment.name,
  20 + :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home')
  21 + end
  22 +
2 23 end
... ...
app/models/user.rb
... ... @@ -26,6 +26,7 @@ class User &lt; ActiveRecord::Base
26 26 validates_length_of :email, :within => 3..100
27 27 validates_uniqueness_of :login, :email, :case_sensitive => false
28 28 before_save :encrypt_password
  29 + validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT
29 30  
30 31 validates_inclusion_of :terms_accepted, :in => [ '1' ], :if => lambda { |u| ! u.terms_of_use.blank? }, :message => N_('%{fn} must be checked in order to signup.')
31 32  
... ...
app/views/task_mailer/task_cancelled.text.plain.rhtml 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +<%= _('Dear %s,') % @requestor %>,
  2 +
  3 +<%= @message %>
  4 +
  5 +--
  6 +<%= _('%s environment system') % @environment %>
  7 +<%= @url %>
... ...
app/views/task_mailer/task_finished.text.plain.rhtml 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +<%= _('Dear %s,') % @requestor %>,
  2 +
  3 +<%= @message %>
  4 +
  5 +--
  6 +<%= _('%s environment system') % @environment %>
  7 +<%= @url %>
... ...
test/unit/environment_test.rb
... ... @@ -153,4 +153,12 @@ class EnvironmentTest &lt; Test::Unit::TestCase
153 153 assert !env.errors.invalid?(:contact_email)
154 154 end
155 155  
  156 + should 'provide a default hostname' do
  157 + env = Environment.create!(:name => 'test environment')
  158 + assert_nil env.default_hostname
  159 +
  160 + env.domains << Domain.create(:name => 'example.com')
  161 + assert_equal 'example.com', env.default_hostname
  162 + end
  163 +
156 164 end
... ...
test/unit/task_mailer_test.rb
... ... @@ -16,6 +16,26 @@ class TaskMailerTest &lt; Test::Unit::TestCase
16 16 @expected.mime_version = '1.0'
17 17 end
18 18  
  19 + should 'be able to send a "task finished" message' do
  20 +
  21 + task = mock()
  22 + task.expects(:finish_message).returns('the message')
  23 +
  24 + requestor = mock()
  25 + requestor.expects(:email).returns('requestor@example.com')
  26 + requestor.expects(:name).returns('my name')
  27 +
  28 + environment = mock()
  29 + environment.expects(:contact_email).returns('sender@example.com')
  30 + environment.expects(:default_hostname).returns('example.com')
  31 + environment.expects(:name).returns('example')
  32 +
  33 + task.expects(:requestor).returns(requestor).at_least_once
  34 + requestor.expects(:environment).returns(environment).at_least_once
  35 +
  36 + TaskMailer.deliver_task_finished(task)
  37 + end
  38 +
19 39 private
20 40 def read_fixture(action)
21 41 IO.readlines("#{FIXTURES_PATH}/task_mailer/#{action}")
... ...
test/unit/task_test.rb
... ... @@ -2,6 +2,12 @@ require File.dirname(__FILE__) + &#39;/../test_helper&#39;
2 2  
3 3 class TaskTest < Test::Unit::TestCase
4 4  
  5 + def setup
  6 + ActionMailer::Base.delivery_method = :test
  7 + ActionMailer::Base.perform_deliveries = true
  8 + ActionMailer::Base.deliveries = []
  9 + end
  10 +
5 11 def test_relationship_with_requestor
6 12 t = Task.create
7 13 assert_raise ActiveRecord::AssociationTypeMismatch do
... ... @@ -23,6 +29,7 @@ class TaskTest &lt; Test::Unit::TestCase
23 29 end
24 30  
25 31 def test_should_call_perform_in_finish
  32 + TaskMailer.expects(:deliver_task_finished)
26 33 t = Task.create
27 34 t.expects(:perform)
28 35 t.finish
... ... @@ -30,6 +37,7 @@ class TaskTest &lt; Test::Unit::TestCase
30 37 end
31 38  
32 39 def test_should_have_cancelled_status_after_cancel
  40 + TaskMailer.expects(:deliver_task_cancelled)
33 41 t = Task.create
34 42 t.cancel
35 43 assert_equal Task::Status::CANCELLED, t.status
... ... @@ -41,16 +49,14 @@ class TaskTest &lt; Test::Unit::TestCase
41 49 end
42 50  
43 51 def test_should_notify_finish
  52 + TaskMailer.expects(:deliver_task_finished)
44 53 t = Task.create
45   - t.expects(:notify_requestor)
46   - t.expects(:finish_message)
47 54 t.finish
48 55 end
49 56  
50 57 def test_should_notify_cancel
  58 + TaskMailer.expects(:deliver_task_cancelled)
51 59 t = Task.create
52   - t.expects(:notify_requestor)
53   - t.expects(:cancel_message)
54 60 t.cancel
55 61 end
56 62  
... ...