Commit 9f7c80a6f9833f62782aba81d3485cf4021733cc

Authored by Rodrigo Souto
Committed by Antonio Terceiro
1 parent 417935cc

CreateEnteprise task is cancelled properly

* The validation is made only after all attributes are updated and
  the identifier uniqueness validation runs only if the task is not
  being cancelled.

(ActionItem1654)
app/controllers/my_profile/tasks_controller.rb
... ... @@ -16,7 +16,7 @@ class TasksController < MyProfileController
16 16 decision = params[:decision]
17 17 if request.post? && VALID_DECISIONS.include?(decision) && params[:id]
18 18 task = profile.find_in_all_tasks(params[:id])
19   - task.update_attributes!(params[:task])
  19 + task.update_attributes(params[:task])
20 20 begin
21 21 task.send(decision)
22 22 rescue Exception => ex
... ...
app/models/create_enterprise.rb
... ... @@ -59,7 +59,7 @@ class CreateEnterprise < Task
59 59 end
60 60 end
61 61  
62   - if self.identifier && Profile.exists?(:identifier => self.identifier)
  62 + if self.status != Task::Status::CANCELLED && self.identifier && Profile.exists?(:identifier => self.identifier)
63 63 self.errors.add(:identifier, '%{fn} is already being as identifier by another enterprise, organization or person.')
64 64 end
65 65 end
... ...
test/functional/tasks_controller_test.rb
... ... @@ -223,4 +223,18 @@ class TasksControllerTest < Test::Unit::TestCase
223 223 assert_includes c_blog2.children(true), p_article
224 224 end
225 225  
  226 + should 'cancel an enterprise registration task even if there is an enterprise with the same identifier' do
  227 + e = Environment.default
  228 + e.add_admin(profile)
  229 + task = CreateEnterprise.create!(:name => "My Enterprise", :identifier => "my-enterprise", :requestor => profile, :target => e)
  230 + enterprise = fast_create(Enterprise, :name => "My Enterprise", :identifier => "my-enterprise")
  231 +
  232 + assert_nothing_raised do
  233 + post :close, {:profile => profile.identifier, :id => task.id, :task => {:reject_explanation => "Bla bla"}, :decision => "cancel"}
  234 + end
  235 +
  236 + task.reload
  237 + assert_equal Task::Status::CANCELLED, task.status
  238 + end
  239 +
226 240 end
... ...