Commit 0e54aafd8482c58802e931956e3aeec9aabf2adc

Authored by Rodrigo Souto
Committed by Daniela Feitosa
1 parent 0f3973a7

Fixing create_enterprise task crash

(ActionItem1893)
app/controllers/my_profile/tasks_controller.rb
@@ -16,16 +16,18 @@ class TasksController < MyProfileController @@ -16,16 +16,18 @@ class TasksController < MyProfileController
16 def close 16 def close
17 failed = {} 17 failed = {}
18 18
19 - params[:tasks].each do |id, value|  
20 - decision = value[:decision]  
21 - if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip'  
22 - task = profile.find_in_all_tasks(id)  
23 - task.update_attributes!(value[:task])  
24 - begin  
25 - task.send(decision)  
26 - rescue Exception => ex  
27 - message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})"  
28 - failed[ex.clean_message] ? failed[ex.clean_message] << message : failed[ex.clean_message] = [message] 19 + if params[:tasks]
  20 + params[:tasks].each do |id, value|
  21 + decision = value[:decision]
  22 + if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip'
  23 + task = profile.find_in_all_tasks(id)
  24 + begin
  25 + task.update_attributes(value[:task])
  26 + task.send(decision)
  27 + rescue Exception => ex
  28 + message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})"
  29 + failed[ex.clean_message] ? failed[ex.clean_message] << message : failed[ex.clean_message] = [message]
  30 + end
29 end 31 end
30 end 32 end
31 end 33 end
test/functional/tasks_controller_test.rb
@@ -217,16 +217,18 @@ class TasksControllerTest &lt; Test::Unit::TestCase @@ -217,16 +217,18 @@ class TasksControllerTest &lt; Test::Unit::TestCase
217 assert_includes c_blog2.children(true), p_article 217 assert_includes c_blog2.children(true), p_article
218 end 218 end
219 219
220 - should 'raise error if there is an enterprise with the same identifier and keep the task active' do 220 + should 'display error if there is an enterprise with the same identifier and keep the task active' do
221 e = Environment.default 221 e = Environment.default
222 e.add_admin(profile) 222 e.add_admin(profile)
223 task = CreateEnterprise.create!(:name => "My Enterprise", :identifier => "my-enterprise", :requestor => profile, :target => e) 223 task = CreateEnterprise.create!(:name => "My Enterprise", :identifier => "my-enterprise", :requestor => profile, :target => e)
224 enterprise = fast_create(Enterprise, :name => "My Enterprise", :identifier => "my-enterprise") 224 enterprise = fast_create(Enterprise, :name => "My Enterprise", :identifier => "my-enterprise")
225 225
226 - assert_raise ActiveRecord::RecordInvalid do  
227 - post :close, :tasks => {task.id => { :task => {:reject_explanation => "Bla bla"}, :decision => "cancel"}} 226 + assert_nothing_raised do
  227 + post :close, :tasks => {task.id => {:decision => "finish"}}
228 end 228 end
229 229
  230 + assert_match /Validation.failed/, @response.body
  231 +
230 task.reload 232 task.reload
231 assert_equal Task::Status::ACTIVE, task.status 233 assert_equal Task::Status::ACTIVE, task.status
232 end 234 end
@@ -280,4 +282,22 @@ class TasksControllerTest &lt; Test::Unit::TestCase @@ -280,4 +282,22 @@ class TasksControllerTest &lt; Test::Unit::TestCase
280 assert_equal 'new source', TinyMceArticle.find(:first).source_name 282 assert_equal 'new source', TinyMceArticle.find(:first).source_name
281 end 283 end
282 284
  285 + should "not crash if accessing close without tasks parameter" do
  286 + assert_nothing_raised do
  287 + post :close
  288 + end
  289 + end
  290 +
  291 + should 'close create enterprise if trying to cancel even if there is already an existing identifier' do
  292 + identifier = "common-identifier"
  293 + task = CreateEnterprise.create!(:identifier => identifier, :name => identifier, :requestor => profile, :target => profile)
  294 + fast_create(Profile, :identifier => identifier)
  295 +
  296 + assert_nothing_raised do
  297 + post :close, :tasks => {task.id => {:task => {:reject_explanation => "Some explanation"}, :decision => 'cancel'}}
  298 + end
  299 +
  300 + task.reload
  301 + assert_equal Task::Status::CANCELLED, task.status
  302 + end
283 end 303 end