Commit 5666676ac868e8d88501af7b0bc5a5916d19f0c4

Authored by Michel Felipe
1 parent 02837e31

Rafactor into undo_flags model and controller methods

controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb
... ... @@ -80,7 +80,10 @@ class ProposalsDiscussionPluginTasksController < TasksController
80 80  
81 81 def undo_flags
82 82 if params[:tasks].present?
83   - ProposalsDiscussionPlugin::ProposalTask.undo_flags params[:tasks], current_user
  83 + result = ProposalsDiscussionPlugin::ProposalTask.undo_flags params[:tasks], current_user
  84 + unless result
  85 + session[:notice] = _("Error to undo flags. Please, verify with the admin")
  86 + end
84 87 end
85 88 redirect_to :controller => 'tasks', :action => 'processed', :filter => {type: 'ProposalsDiscussionPlugin::ProposalTask'}
86 89 end
... ...
lib/proposals_discussion_plugin/proposal_task.rb
... ... @@ -132,11 +132,13 @@ class ProposalsDiscussionPlugin::ProposalTask < Task
132 132  
133 133 def self.undo_flags(tasks, user)
134 134 fields = "status = #{Task::Status::ACTIVE}, end_date = NULL, closed_by_id = #{user.id}"
135   - result = self.update_all(fields, ["id IN (?)",tasks])
  135 + conditions = "status = #{Status::FLAGGED_FOR_REPROVAL} OR status = #{Status::FLAGGED_FOR_APPROVAL}"
  136 +
  137 + result = self.where(conditions).update_all(fields, ["id IN (?)",tasks])
136 138 result
137 139 end
138 140  
139   - def undo_flag(user)
  141 + def undo_flags(user)
140 142 if flagged?
141 143 self.status = Task::Status::ACTIVE
142 144 self.end_date = nil
... ...
test/unit/proposal_task_test.rb
... ... @@ -77,7 +77,7 @@ class ProposalTaskTest < ActiveSupport::TestCase
77 77 assert_equal person2, task.responsible
78 78 end
79 79  
80   - should 'undo proposal task reject flag' do
  80 + should 'undo flags from one or more proposal tasks' do
81 81 role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
82 82 role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)
83 83  
... ... @@ -102,6 +102,27 @@ class ProposalTaskTest < ActiveSupport::TestCase
102 102 assert_equal [Task::Status::ACTIVE,Task::Status::ACTIVE], [task.status, task_two.status]
103 103 end
104 104  
  105 + should 'undo flags from a specific proposal task' do
  106 + role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
  107 + role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)
  108 +
  109 + person1 = fast_create(Person)
  110 + person1.define_roles([role1], profile)
  111 + person2 = fast_create(Person)
  112 + person2.define_roles([role2], profile)
  113 +
  114 + task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal', :abstract => 'proposal'})
  115 + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)]
  116 + task.flag_reject_proposal(person1)
  117 + assert task.flagged?
  118 +
  119 + task.undo_flags(person)
  120 + task.reload
  121 +
  122 + assert_equal false, task.flagged?
  123 + assert_equal Task::Status::ACTIVE, task.status
  124 + end
  125 +
105 126 should 'do not fail on task information with integer as abstract' do
106 127 task = ProposalsDiscussionPlugin::ProposalTask.new
107 128 task.expects(:abstract).returns(49)
... ...