From 5666676ac868e8d88501af7b0bc5a5916d19f0c4 Mon Sep 17 00:00:00 2001 From: Michel Felipe de Oliveira Ferreira Date: Fri, 29 Jan 2016 14:31:23 -0300 Subject: [PATCH] Rafactor into undo_flags model and controller methods --- controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb | 5 ++++- lib/proposals_discussion_plugin/proposal_task.rb | 6 ++++-- test/unit/proposal_task_test.rb | 23 ++++++++++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb b/controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb index 30ed11f..0fd7c01 100644 --- a/controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb +++ b/controllers/myprofile/proposals_discussion_plugin_tasks_controller.rb @@ -80,7 +80,10 @@ class ProposalsDiscussionPluginTasksController < TasksController def undo_flags if params[:tasks].present? - ProposalsDiscussionPlugin::ProposalTask.undo_flags params[:tasks], current_user + result = ProposalsDiscussionPlugin::ProposalTask.undo_flags params[:tasks], current_user + unless result + session[:notice] = _("Error to undo flags. Please, verify with the admin") + end end redirect_to :controller => 'tasks', :action => 'processed', :filter => {type: 'ProposalsDiscussionPlugin::ProposalTask'} end diff --git a/lib/proposals_discussion_plugin/proposal_task.rb b/lib/proposals_discussion_plugin/proposal_task.rb index 250c6da..28bb9a9 100644 --- a/lib/proposals_discussion_plugin/proposal_task.rb +++ b/lib/proposals_discussion_plugin/proposal_task.rb @@ -132,11 +132,13 @@ class ProposalsDiscussionPlugin::ProposalTask < Task def self.undo_flags(tasks, user) fields = "status = #{Task::Status::ACTIVE}, end_date = NULL, closed_by_id = #{user.id}" - result = self.update_all(fields, ["id IN (?)",tasks]) + conditions = "status = #{Status::FLAGGED_FOR_REPROVAL} OR status = #{Status::FLAGGED_FOR_APPROVAL}" + + result = self.where(conditions).update_all(fields, ["id IN (?)",tasks]) result end - def undo_flag(user) + def undo_flags(user) if flagged? self.status = Task::Status::ACTIVE self.end_date = nil diff --git a/test/unit/proposal_task_test.rb b/test/unit/proposal_task_test.rb index b9bf223..480b3d3 100644 --- a/test/unit/proposal_task_test.rb +++ b/test/unit/proposal_task_test.rb @@ -77,7 +77,7 @@ class ProposalTaskTest < ActiveSupport::TestCase assert_equal person2, task.responsible end - should 'undo proposal task reject flag' do + should 'undo flags from one or more proposal tasks' 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) @@ -102,6 +102,27 @@ class ProposalTaskTest < ActiveSupport::TestCase assert_equal [Task::Status::ACTIVE,Task::Status::ACTIVE], [task.status, task_two.status] end + should 'undo flags from a specific proposal task' 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', :abstract => 'proposal'}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + task.flag_reject_proposal(person1) + assert task.flagged? + + task.undo_flags(person) + task.reload + + assert_equal false, task.flagged? + assert_equal Task::Status::ACTIVE, task.status + end + should 'do not fail on task information with integer as abstract' do task = ProposalsDiscussionPlugin::ProposalTask.new task.expects(:abstract).returns(49) -- libgit2 0.21.2