Commit da591cc04203ce0011b83f38d469709c6039245f
Committed by
Leandro Santos
1 parent
b047dfa3
Exists in
fix_sign_up_form
api: list all pending tasks for the current person
Showing
5 changed files
with
52 additions
and
1 deletions
Show diff stats
app/api/entities.rb
@@ -263,6 +263,13 @@ module Api | @@ -263,6 +263,13 @@ module Api | ||
263 | root 'tasks', 'task' | 263 | root 'tasks', 'task' |
264 | expose :id | 264 | expose :id |
265 | expose :type | 265 | expose :type |
266 | + expose :requestor, using: Profile | ||
267 | + expose :status | ||
268 | + expose :created_at | ||
269 | + expose :target do |task, options| | ||
270 | + type_map = {Profile => ::Profile, Environment => ::Environment}.find {|h| task.target.kind_of?(h.last)} | ||
271 | + type_map.first.represent(task.target) unless type_map.nil? | ||
272 | + end | ||
266 | end | 273 | end |
267 | 274 | ||
268 | class Environment < Entity | 275 | class Environment < Entity |
app/api/v1/tasks.rb
@@ -3,8 +3,11 @@ module Api | @@ -3,8 +3,11 @@ module Api | ||
3 | class Tasks < Grape::API | 3 | class Tasks < Grape::API |
4 | before { authenticate! } | 4 | before { authenticate! } |
5 | 5 | ||
6 | + MAX_PER_PAGE = 50 | ||
7 | + | ||
6 | resource :tasks do | 8 | resource :tasks do |
7 | 9 | ||
10 | + paginate max_per_page: MAX_PER_PAGE | ||
8 | # Collect tasks | 11 | # Collect tasks |
9 | # | 12 | # |
10 | # Parameters: | 13 | # Parameters: |
@@ -15,7 +18,13 @@ module Api | @@ -15,7 +18,13 @@ module Api | ||
15 | # Example Request: | 18 | # Example Request: |
16 | # GET host/api/v1/tasks?from=2013-04-04-14:41:43&until=2015-04-04-14:41:43&limit=10&private_token=e96fff37c2238fdab074d1dcea8e6317 | 19 | # GET host/api/v1/tasks?from=2013-04-04-14:41:43&until=2015-04-04-14:41:43&limit=10&private_token=e96fff37c2238fdab074d1dcea8e6317 |
17 | get do | 20 | get do |
18 | - present_tasks(environment) | 21 | + if params[:all_pending].present? |
22 | + tasks = current_person.all_pending_tasks | ||
23 | + else | ||
24 | + tasks = select_filtered_collection_of(environment, 'tasks', params) | ||
25 | + tasks = tasks.select {|t| current_person.has_permission?(t.permission, environment)} | ||
26 | + end | ||
27 | + present_partial paginate(tasks), :with => Entities::Task | ||
19 | end | 28 | end |
20 | 29 | ||
21 | desc "Return the task id" | 30 | desc "Return the task id" |
app/models/person.rb
@@ -440,6 +440,12 @@ class Person < Profile | @@ -440,6 +440,12 @@ class Person < Profile | ||
440 | organization.tasks.pending.select{|task| self.has_permission?(task.permission, organization)} | 440 | organization.tasks.pending.select{|task| self.has_permission?(task.permission, organization)} |
441 | end | 441 | end |
442 | 442 | ||
443 | + def all_pending_tasks | ||
444 | + [self.memberships, environment].flatten.map do |target| | ||
445 | + target.tasks.pending.select{|task| self.has_permission?(task.permission, target)} | ||
446 | + end.flatten + tasks.pending | ||
447 | + end | ||
448 | + | ||
443 | def build_contact(profile, params = {}) | 449 | def build_contact(profile, params = {}) |
444 | Contact.new(params.merge(:name => name, :email => email, :sender => self, :dest => profile)) | 450 | Contact.new(params.merge(:name => name, :email => email, :sender => self, :dest => profile)) |
445 | end | 451 | end |
test/api/task_test.rb
@@ -271,4 +271,15 @@ class TasksTest < ActiveSupport::TestCase | @@ -271,4 +271,15 @@ class TasksTest < ActiveSupport::TestCase | ||
271 | assert_equal enterprise, Task.last.target | 271 | assert_equal enterprise, Task.last.target |
272 | end | 272 | end |
273 | 273 | ||
274 | + should 'list all pending tasks for the current person' do | ||
275 | + task1 = create(Task, :requestor => person, :target => person) | ||
276 | + task2 = create(Task, :requestor => person, :target => person) | ||
277 | + task3 = create(Task, :requestor => person, :target => person) | ||
278 | + params[:per_page] = 2 | ||
279 | + params[:all_pending] = true | ||
280 | + get "/api/v1/tasks?#{params.to_query}" | ||
281 | + json = JSON.parse(last_response.body) | ||
282 | + assert_equal [task3.id, task2.id], json["tasks"].map {|t| t["id"]} | ||
283 | + end | ||
284 | + | ||
274 | end | 285 | end |
test/unit/person_test.rb
@@ -1958,6 +1958,7 @@ class PersonTest < ActiveSupport::TestCase | @@ -1958,6 +1958,7 @@ class PersonTest < ActiveSupport::TestCase | ||
1958 | person.save! | 1958 | person.save! |
1959 | end | 1959 | end |
1960 | 1960 | ||
1961 | +<<<<<<< HEAD | ||
1961 | should 'update profile circles for a person' do | 1962 | should 'update profile circles for a person' do |
1962 | person = create_user('testuser').person | 1963 | person = create_user('testuser').person |
1963 | community = fast_create(Community) | 1964 | community = fast_create(Community) |
@@ -2005,4 +2006,21 @@ class PersonTest < ActiveSupport::TestCase | @@ -2005,4 +2006,21 @@ class PersonTest < ActiveSupport::TestCase | ||
2005 | person.remove_profile_from_circle(community, circle) | 2006 | person.remove_profile_from_circle(community, circle) |
2006 | assert_equivalent [circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle) | 2007 | assert_equivalent [circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle) |
2007 | end | 2008 | end |
2009 | + | ||
2010 | + should 'return all pending task for a person' do | ||
2011 | + person = create_user('testuser').person | ||
2012 | + community1 = fast_create(Community) | ||
2013 | + community1.add_admin(person) | ||
2014 | + community2 = fast_create(Community) | ||
2015 | + task1 = Task.new | ||
2016 | + task2 = Task.new | ||
2017 | + task3 = Task.new | ||
2018 | + task4 = Task.new | ||
2019 | + person.tasks << task1 | ||
2020 | + community1.tasks << task2 | ||
2021 | + community2.tasks << task3 | ||
2022 | + person.environment.tasks << task4 | ||
2023 | + person.environment.add_admin(person) | ||
2024 | + assert_equivalent [task4, task2, task1], person.all_pending_tasks | ||
2025 | + end | ||
2008 | end | 2026 | end |