Commit 247e46d392c82d48f7f6ecbbc8f092ccf3025f10

Authored by Leandro Santos
1 parent 1617e755

refactoring task actions

Showing 2 changed files with 30 additions and 5 deletions   Show diff stats
app/api/v1/tasks.rb
... ... @@ -30,8 +30,7 @@ module Api
30 30 %w[finish cancel].each do |action|
31 31 desc "#{action.capitalize} a task"
32 32 put ":id/#{action}" do
33   - authenticate!
34   - task = find_task(current_person, params[:id])
  33 + task = find_task(current_person, Task.to(current_person), params[:id])
35 34 task.send(action, current_person) if (task.status == Task::Status::ACTIVE)
36 35 present_partial task, :with => Entities::Task
37 36 end
... ...
test/api/task_test.rb
... ... @@ -50,7 +50,7 @@ class TasksTest < ActiveSupport::TestCase
50 50 task = create(Task, :requestor => person, :target => environment)
51 51  
52 52 get "/api/v1/tasks/#{task.id}?#{params.to_query}"
53   - assert_equal 403, last_response.status
  53 + assert_equal 404, last_response.status
54 54 end
55 55  
56 56 should 'find the current user task even it is finished' do
... ... @@ -161,7 +161,6 @@ class TasksTest < ActiveSupport::TestCase
161 161 task_actions_state={"finish"=>"FINISHED","cancel"=>"CANCELLED"}
162 162 task_actions.each do |action|
163 163 should "person be able to #{action} his own task" do
164   - login_api
165 164 person1 = fast_create(Person)
166 165 task = create(Task, :requestor => person1, :target => person)
167 166 put "/api/v1/tasks/#{task.id}/#{action}?#{params.to_query}"
... ... @@ -169,8 +168,35 @@ class TasksTest < ActiveSupport::TestCase
169 168 assert_equal "Task::Status::#{task_actions_state[action]}".constantize, task.reload.status
170 169 end
171 170  
  171 + should "person be able to #{action} environment task if it's admin user" do
  172 + environment = Environment.default
  173 + environment.add_admin(person)
  174 + task = create(Task, :requestor => person, :target => environment)
  175 + put "/api/v1/tasks/#{task.id}/#{action}?#{params.to_query}"
  176 + assert_equal person.reload.id, task.reload.closed_by_id
  177 + assert_equal "Task::Status::#{task_actions_state[action]}".constantize, task.reload.status
  178 + end
  179 +
  180 + should "person be able to #{action} community task if it has permission on it" do
  181 + community = fast_create(Community)
  182 + community.add_member(person)
  183 + give_permission(person, 'perform_task', community)
  184 + task = create(Task, :requestor => person, :target => community)
  185 + put "/api/v1/tasks/#{task.id}/#{action}?#{params.to_query}"
  186 + assert_equal person.reload.id, task.reload.closed_by_id
  187 + assert_equal "Task::Status::#{task_actions_state[action]}".constantize, task.reload.status
  188 + end
  189 +
  190 + should "person not be able to #{action} community task if it has no permission on it" do
  191 + community = fast_create(Community)
  192 + community.add_member(person)
  193 + task = create(Task, :requestor => person, :target => community)
  194 + put "/api/v1/tasks/#{task.id}/#{action}?#{params.to_query}"
  195 + assert_equal person.reload.id, task.reload.closed_by_id
  196 + assert_equal "Task::Status::#{task_actions_state[action]}".constantize, task.reload.status
  197 + end
  198 +
172 199 should "person not be able to #{action} other person's task" do
173   - login_api
174 200 user = fast_create(User)
175 201 person1 = fast_create(Person, :user_id => user)
176 202 task = create(Task, :requestor => person, :target => person1)
... ...