diff --git a/app/models/task.rb b/app/models/task.rb index 3e40c5b..357554a 100644 --- a/app/models/task.rb +++ b/app/models/task.rb @@ -38,7 +38,7 @@ class Task < ActiveRecord::Base self.end_date = Time.now self.save! self.perform - self.notify_requestor(self.finish_message) + TaskMailer.deliver_task_finished(self) end end @@ -49,7 +49,7 @@ class Task < ActiveRecord::Base self.status = Task::Status::CANCELLED self.end_date = Time.now self.save! - self.notify_requestor(self.cancel_message) + TaskMailer.deliver_task_cancelled(self) end end @@ -65,11 +65,6 @@ class Task < ActiveRecord::Base def perform end - # sends a message to the requestor - def notify_requestor(msg) - # TODO: implement message sending - end - # The message that will be sent to the requestor of the task when its # finished. def finish_message diff --git a/app/models/task_mailer.rb b/app/models/task_mailer.rb index 702509e..4d5b51e 100644 --- a/app/models/task_mailer.rb +++ b/app/models/task_mailer.rb @@ -1,2 +1,23 @@ class TaskMailer < ActionMailer::Base + + def task_finished(task) + recipients task.requestor.email + from task.requestor.environment.contact_email + subject task + body :requestor => task.requestor.name, + :message => task.finish_message, + :environment => task.requestor.environment.name, + :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') + end + + def task_cancelled(task) + recipients task.requestor.email + from task.requestor.environment.contact_email + subject task + body :requestor => task.requestor.name, + :message => task.cancel_message, + :environment => task.requestor.environment.name, + :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') + end + end diff --git a/app/models/user.rb b/app/models/user.rb index bf94c34..4f9dd9e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,6 +26,7 @@ class User < ActiveRecord::Base validates_length_of :email, :within => 3..100 validates_uniqueness_of :login, :email, :case_sensitive => false before_save :encrypt_password + validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT 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.') diff --git a/app/views/task_mailer/task_cancelled.text.plain.rhtml b/app/views/task_mailer/task_cancelled.text.plain.rhtml new file mode 100644 index 0000000..743f634 --- /dev/null +++ b/app/views/task_mailer/task_cancelled.text.plain.rhtml @@ -0,0 +1,7 @@ +<%= _('Dear %s,') % @requestor %>, + +<%= @message %> + +-- +<%= _('%s environment system') % @environment %> +<%= @url %> diff --git a/app/views/task_mailer/task_finished.text.plain.rhtml b/app/views/task_mailer/task_finished.text.plain.rhtml new file mode 100644 index 0000000..743f634 --- /dev/null +++ b/app/views/task_mailer/task_finished.text.plain.rhtml @@ -0,0 +1,7 @@ +<%= _('Dear %s,') % @requestor %>, + +<%= @message %> + +-- +<%= _('%s environment system') % @environment %> +<%= @url %> diff --git a/test/unit/environment_test.rb b/test/unit/environment_test.rb index fc51ebf..7f60fd9 100644 --- a/test/unit/environment_test.rb +++ b/test/unit/environment_test.rb @@ -153,4 +153,12 @@ class EnvironmentTest < Test::Unit::TestCase assert !env.errors.invalid?(:contact_email) end + should 'provide a default hostname' do + env = Environment.create!(:name => 'test environment') + assert_nil env.default_hostname + + env.domains << Domain.create(:name => 'example.com') + assert_equal 'example.com', env.default_hostname + end + end diff --git a/test/unit/task_mailer_test.rb b/test/unit/task_mailer_test.rb index 43fb711..9c2af7e 100644 --- a/test/unit/task_mailer_test.rb +++ b/test/unit/task_mailer_test.rb @@ -16,6 +16,26 @@ class TaskMailerTest < Test::Unit::TestCase @expected.mime_version = '1.0' end + should 'be able to send a "task finished" message' do + + task = mock() + task.expects(:finish_message).returns('the message') + + requestor = mock() + requestor.expects(:email).returns('requestor@example.com') + requestor.expects(:name).returns('my name') + + environment = mock() + environment.expects(:contact_email).returns('sender@example.com') + environment.expects(:default_hostname).returns('example.com') + environment.expects(:name).returns('example') + + task.expects(:requestor).returns(requestor).at_least_once + requestor.expects(:environment).returns(environment).at_least_once + + TaskMailer.deliver_task_finished(task) + end + private def read_fixture(action) IO.readlines("#{FIXTURES_PATH}/task_mailer/#{action}") diff --git a/test/unit/task_test.rb b/test/unit/task_test.rb index d960fbb..4c38132 100644 --- a/test/unit/task_test.rb +++ b/test/unit/task_test.rb @@ -2,6 +2,12 @@ require File.dirname(__FILE__) + '/../test_helper' class TaskTest < Test::Unit::TestCase + def setup + ActionMailer::Base.delivery_method = :test + ActionMailer::Base.perform_deliveries = true + ActionMailer::Base.deliveries = [] + end + def test_relationship_with_requestor t = Task.create assert_raise ActiveRecord::AssociationTypeMismatch do @@ -23,6 +29,7 @@ class TaskTest < Test::Unit::TestCase end def test_should_call_perform_in_finish + TaskMailer.expects(:deliver_task_finished) t = Task.create t.expects(:perform) t.finish @@ -30,6 +37,7 @@ class TaskTest < Test::Unit::TestCase end def test_should_have_cancelled_status_after_cancel + TaskMailer.expects(:deliver_task_cancelled) t = Task.create t.cancel assert_equal Task::Status::CANCELLED, t.status @@ -41,16 +49,14 @@ class TaskTest < Test::Unit::TestCase end def test_should_notify_finish + TaskMailer.expects(:deliver_task_finished) t = Task.create - t.expects(:notify_requestor) - t.expects(:finish_message) t.finish end def test_should_notify_cancel + TaskMailer.expects(:deliver_task_cancelled) t = Task.create - t.expects(:notify_requestor) - t.expects(:cancel_message) t.cancel end -- libgit2 0.21.2