diff --git a/app/controllers/my_profile/cms_controller.rb b/app/controllers/my_profile/cms_controller.rb index dcc67e6..f113080 100644 --- a/app/controllers/my_profile/cms_controller.rb +++ b/app/controllers/my_profile/cms_controller.rb @@ -159,7 +159,6 @@ class CmsController < MyProfileController end def publish - @article = profile.articles.find(params[:id]) record_coming_from_public_view @groups = profile.memberships - [profile] diff --git a/app/models/add_friend.rb b/app/models/add_friend.rb index 83e253a..543d808 100644 --- a/app/models/add_friend.rb +++ b/app/models/add_friend.rb @@ -17,12 +17,6 @@ class AddFriend < Task target.add_friend(requestor, group_for_friend) end - # Returns false. Adding friends by itself does not trigger e-mail - # sending. - def sends_email? - false - end - def description _('%s wants to be your friend') % requestor.name end @@ -31,4 +25,9 @@ class AddFriend < Task :manage_friends end + def target_notification_message + description + "\n\n" + + _('You need login to accept this.') + end + end diff --git a/app/models/add_member.rb b/app/models/add_member.rb index c3363e3..e9c52a4 100644 --- a/app/models/add_member.rb +++ b/app/models/add_member.rb @@ -19,11 +19,6 @@ class AddMember < Task target.affiliate(requestor, self.roles.map{|i| Role.find(i)}) end - # FIXME should send email to community admin? - def sends_email? - false - end - def description _('%s wants to be a member') % requestor.name end @@ -32,4 +27,9 @@ class AddMember < Task :manage_memberships end + def target_notification_message + description + "\n\n" + + _('You need login to accept this.') + end + end diff --git a/app/models/approve_article.rb b/app/models/approve_article.rb index 8a8321a..ada0df7 100644 --- a/app/models/approve_article.rb +++ b/app/models/approve_article.rb @@ -1,6 +1,8 @@ class ApproveArticle < Task serialize :data, Hash + validates_presence_of :requestor_id, :target_id + def description _('%s wants to publish %s') % [requestor.name, article.name] end @@ -37,7 +39,9 @@ class ApproveArticle < Task PublishedArticle.create(:name => name, :profile => target, :reference_article => article) end - def sends_email? - true + def target_notification_message + description + "\n\n" + + _('You need login to accept this.') end + end diff --git a/app/models/task.rb b/app/models/task.rb index ab4012e..49cf626 100644 --- a/app/models/task.rb +++ b/app/models/task.rb @@ -51,11 +51,17 @@ class Task < ActiveRecord::Base end after_create do |task| - task.send(:send_notification, :created) + begin + task.send(:send_notification, :created) + rescue NotImplementedError => ex + RAILS_DEFAULT_LOGGER.info ex.to_s + end - target_msg = task.target_notification_message - unless target_msg.nil? + begin + target_msg = task.target_notification_message TaskMailer.deliver_target_notification(task, target_msg) + rescue NotImplementedError => ex + RAILS_DEFAULT_LOGGER.info ex.to_s end end @@ -68,7 +74,11 @@ class Task < ActiveRecord::Base self.end_date = Time.now self.save! self.perform - send_notification(:finished) + begin + send_notification(:finished) + rescue NotImplementedError => ex + RAILS_DEFAULT_LOGGER.info ex.to_s + end end end @@ -79,7 +89,11 @@ class Task < ActiveRecord::Base self.status = Task::Status::CANCELLED self.end_date = Time.now self.save! - send_notification(:cancelled) + begin + send_notification(:cancelled) + rescue NotImplementedError => ex + RAILS_DEFAULT_LOGGER.info ex.to_s + end end end @@ -95,20 +109,19 @@ class Task < ActiveRecord::Base # The message that will be sent to the requestor of the task when the task is # created. def task_created_message - # FIXME: use a date properly recorded. - _("The task was created at %s") % Time.now + raise NotImplementedError, "#{self} does not implement #task_created_message" end # The message that will be sent to the requestor of the task when its # finished. def task_finished_message - _("The task was finished at %s") % (self.end_date.to_s) + raise NotImplementedError, "#{self} does not implement #task_finished_message" end # The message that will be sent to the requestor of the task when its # cancelled. def task_cancelled_message - _("The task was cancelled at %s") % (self.end_date.to_s) + raise NotImplementedError, "#{self} does not implement #task_cancelled_message" end # The message that will be sent to the *target* of the task when it is @@ -119,7 +132,7 @@ class Task < ActiveRecord::Base # not to be sent. If you want to send a notification to the target upon task # creation, override this method and return a String. def target_notification_message - nil + raise NotImplementedError, "#{self} does not implement #target_notification_message" end # What permission is required to perform task? diff --git a/app/models/task_mailer.rb b/app/models/task_mailer.rb index 0021386..0b2b29e 100644 --- a/app/models/task_mailer.rb +++ b/app/models/task_mailer.rb @@ -15,7 +15,7 @@ class TaskMailer < ActionMailer::Base recipients task.target.contact_email from self.class.generate_from(task) - subject task.description + subject _('%s - %s') % [task.requestor.environment.name, task.description] body :requestor => task.requestor.name, :target => task.target.name, :message => msg, diff --git a/app/views/task_mailer/target_notification.rhtml b/app/views/task_mailer/target_notification.rhtml index f6b8b37..f17ea3f 100644 --- a/app/views/task_mailer/target_notification.rhtml +++ b/app/views/task_mailer/target_notification.rhtml @@ -1,4 +1,4 @@ -Dear <%= @target %>, +<%= _('Dear %s,') % @target %> <%= @message %> diff --git a/test/unit/add_friend_test.rb b/test/unit/add_friend_test.rb index 5c1a1fc..7428499 100644 --- a/test/unit/add_friend_test.rb +++ b/test/unit/add_friend_test.rb @@ -57,26 +57,19 @@ class AddFriendTest < ActiveSupport::TestCase ok('must validate when target is given') { task.errors.invalid?(:target_id)} end - should 'not send e-mails' do - + should 'send e-mails' do p1 = create_user('testuser1').person p2 = create_user('testuser2').person - TaskMailer.expects(:deliver_task_finished).never - TaskMailer.expects(:deliver_task_created).never + TaskMailer.expects(:deliver_target_notification).at_least_once task = AddFriend.create!(:person => p1, :friend => p2) - task.finish - end should 'provide proper description' do p1 = create_user('testuser1').person p2 = create_user('testuser2').person - TaskMailer.expects(:deliver_task_finished).never - TaskMailer.expects(:deliver_task_created).never - task = AddFriend.create!(:person => p1, :friend => p2) assert_equal 'testuser1 wants to be your friend', task.description @@ -96,4 +89,13 @@ class AddFriendTest < ActiveSupport::TestCase end end + should 'override target notification message method from Task' do + p1 = create_user('testuser1').person + p2 = create_user('testuser2').person + task = AddFriend.new(:person => p1, :friend => p2) + assert_nothing_raised NotImplementedError do + task.target_notification_message + end + end + end diff --git a/test/unit/add_member_test.rb b/test/unit/add_member_test.rb index 38b7315..8933165 100644 --- a/test/unit/add_member_test.rb +++ b/test/unit/add_member_test.rb @@ -9,6 +9,7 @@ class AddMemberTest < ActiveSupport::TestCase should 'actually add memberships when confirmed' do p = create_user('testuser1').person c = Community.create!(:name => 'closed community', :closed => true) + TaskMailer.stubs(:deliver_target_notification) task = AddMember.create!(:person => p, :community => c) assert_difference c, :members, [p] do task.finish @@ -38,23 +39,20 @@ class AddMemberTest < ActiveSupport::TestCase ok('must validate when target is given') { task.errors.invalid?(:target_id)} end - should 'not send e-mails' do + should 'send e-mails' do p = create_user('testuser1').person c = Community.create!(:name => 'closed community', :closed => true) - TaskMailer.expects(:deliver_task_finished).never - TaskMailer.expects(:deliver_task_created).never + TaskMailer.expects(:deliver_target_notification).at_least_once task = AddMember.create!(:person => p, :community => c) - task.finish end should 'provide proper description' do p = create_user('testuser1').person c = Community.create!(:name => 'closed community', :closed => true) - TaskMailer.expects(:deliver_task_finished).never - TaskMailer.expects(:deliver_task_created).never + TaskMailer.stubs(:deliver_target_notification) task = AddMember.create!(:person => p, :community => c) @@ -74,6 +72,7 @@ class AddMemberTest < ActiveSupport::TestCase should 'have roles' do p = create_user('testuser1').person c = Community.create!(:name => 'community_test') + TaskMailer.stubs(:deliver_target_notification) task = AddMember.create!(:roles => [1,2,3], :person => p, :community => c) assert_equal [1,2,3], task.roles end @@ -83,6 +82,7 @@ class AddMemberTest < ActiveSupport::TestCase c = Community.create!(:name => 'community_test') roles = [Profile::Roles.member, Profile::Roles.admin] + TaskMailer.stubs(:deliver_target_notification) task = AddMember.create!(:roles => roles.map(&:id), :person => p, :community => c) task.finish @@ -91,4 +91,13 @@ class AddMemberTest < ActiveSupport::TestCase assert_includes current_roles, roles[1] end + should 'override target notification message method from Task' do + p1 = create_user('testuser1').person + p2 = create_user('testuser2').person + task = AddFriend.new(:person => p1, :friend => p2) + assert_nothing_raised NotImplementedError do + task.target_notification_message + end + end + end diff --git a/test/unit/approve_article_test.rb b/test/unit/approve_article_test.rb index 94a5ce1..386f7d0 100644 --- a/test/unit/approve_article_test.rb +++ b/test/unit/approve_article_test.rb @@ -6,7 +6,7 @@ class ApproveArticleTest < ActiveSupport::TestCase profile = create_user('test_user').person article = profile.articles.create!(:name => 'test article') - a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile) + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) assert_equal 'test name', a.name assert_equal article, a.article @@ -16,11 +16,20 @@ class ApproveArticleTest < ActiveSupport::TestCase should 'create published article when finished' do profile = create_user('test_user').person article = profile.articles.create!(:name => 'test article') - a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile) + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) assert_difference PublishedArticle, :count do a.finish end + end + should 'override target notification message method from Task' do + p1 = create_user('testuser1').person + p2 = create_user('testuser2').person + task = AddFriend.new(:person => p1, :friend => p2) + assert_nothing_raised NotImplementedError do + task.target_notification_message + end end + end diff --git a/test/unit/create_enterprise_test.rb b/test/unit/create_enterprise_test.rb index 299b9a3..3ec6842 100644 --- a/test/unit/create_enterprise_test.rb +++ b/test/unit/create_enterprise_test.rb @@ -161,10 +161,11 @@ class CreateEnterpriseTest < Test::Unit::TestCase end should 'override message methods from Task' do - generic = Task.new specific = CreateEnterprise.new %w[ task_created_message task_finished_message task_cancelled_message ].each do |method| - assert_not_equal generic.send(method), specific.send(method) + assert_nothing_raised NotImplementedError do + specific.send(method) + end end end diff --git a/test/unit/task_test.rb b/test/unit/task_test.rb index 8a2ffb2..6abdf34 100644 --- a/test/unit/task_test.rb +++ b/test/unit/task_test.rb @@ -127,7 +127,7 @@ class TaskTest < Test::Unit::TestCase assert_nil Task.find_by_code(task.code) end - should 'be able to find active tasks ' do + should 'be able to find active tasks' do task = Task.new task.requestor = sample_user task.save! @@ -144,11 +144,11 @@ class TaskTest < Test::Unit::TestCase assert_equal 7, Task.create(:code_length => 7).code.size end - should 'not send notification to target when target_notification_message is nil (as in Task base class)' do + should 'throws exception when try to send target_notification_message in Task base class' do task = Task.new - TaskMailer.expects(:deliver_target_notification).never - task.save! - assert_nil task.target_notification_message + assert_raise NotImplementedError do + task.target_notification_message + end end should 'send notification to target just after task creation' do @@ -191,6 +191,22 @@ class TaskTest < Test::Unit::TestCase end end + should 'not deliver notification message to target' do + task = Task.new + assert_raise NotImplementedError do + task.target_notification_message + end + end + + should 'not send message when created, finished or cancelled' do + task = Task.new + %w[ created finished cancelled ].each do |action| + assert_raise NotImplementedError do + task.send("task_#{action}_message") + end + end + end + protected def sample_user -- libgit2 0.21.2