From 2664a61ab86b2dbfbee5ea87e1f11647c277c9ed Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 30 Jul 2015 15:17:45 -0300 Subject: [PATCH] Change responsible to a person with perform_task permission when flagged --- lib/proposals_discussion_plugin/proposal_task.rb | 8 ++++++++ test/unit/proposal_task_test.rb | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 0 deletions(-) diff --git a/lib/proposals_discussion_plugin/proposal_task.rb b/lib/proposals_discussion_plugin/proposal_task.rb index bec5af4..32d6c27 100644 --- a/lib/proposals_discussion_plugin/proposal_task.rb +++ b/lib/proposals_discussion_plugin/proposal_task.rb @@ -47,6 +47,14 @@ class ProposalsDiscussionPlugin::ProposalTask < Task end end + before_update do |task| + if task.target.present? && flagged? && task.changes[:status].present? + organization = task.target + responsible_candidates = organization.members.by_role(organization.roles.reject {|r| !r.has_permission?('perform_task')}) + task.responsible = responsible_candidates.sample + end + end + def unflagged? ! flagged? end diff --git a/test/unit/proposal_task_test.rb b/test/unit/proposal_task_test.rb index 96f2ee3..7872407 100644 --- a/test/unit/proposal_task_test.rb +++ b/test/unit/proposal_task_test.rb @@ -29,4 +29,52 @@ class ProposalTaskTest < ActiveSupport::TestCase assert_equal person2, task.responsible end + should 'assign proposal task to member with perform_task permission after flag as accepted' do + role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default) + role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default) + + person1 = fast_create(Person) + person1.define_roles([role1], profile) + person2 = fast_create(Person) + person2.define_roles([role2], profile) + + task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + task.flag_accept_proposal(person2) + assert_equal person1, task.responsible + end + + should 'assign proposal task to member with perform_task permission after flag as rejected' do + role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default) + role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default) + + person1 = fast_create(Person) + person1.define_roles([role1], profile) + person2 = fast_create(Person) + person2.define_roles([role2], profile) + + task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + task.flag_reject_proposal(person2) + assert_equal person1, task.responsible + end + + should 'not change assignment when update the task responsible' do + role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default) + role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default) + + person1 = fast_create(Person) + person1.define_roles([role1], profile) + person2 = fast_create(Person) + person2.define_roles([role2], profile) + + task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + task.flag_accept_proposal(person2) + assert_equal person1, task.responsible + task.responsible = person2 + task.save! + assert_equal person2, task.responsible + end + end -- libgit2 0.21.2