[Git][noosfero/noosfero][master] 3 commits: api: expose assigned roles of a person in a profile

Leandro Nunes gitlab at mg.gitlab.com
Mon Mar 27 14:14:51 BRT 2017


Leandro Nunes pushed to branch master at Noosfero / noosfero


Commits:
a74e1976 by Victor Costa at 2017-03-27T08:27:00-03:00
api: expose assigned roles of a person in a profile

- - - - -
78e9e679 by Victor Costa at 2017-03-27T08:27:00-03:00
api: assign profile roles to person

- - - - -
ebdcd0b2 by Leandro Nunes at 2017-03-27T17:14:17+00:00
Merge branch 'api-person-roles' into 'master'

api: expose assigned roles of a person in a profile

See merge request !1152
- - - - -


3 changed files:

- app/api/entities.rb
- app/api/v1/roles.rb
- test/api/roles_test.rb


Changes:

=====================================
app/api/entities.rb
=====================================
--- a/app/api/entities.rb
+++ b/app/api/entities.rb
@@ -334,6 +334,9 @@ module Api
       expose :id
       expose :name
       expose :key
+      expose :assigned do |role, options|
+        (options[:person_roles] || []).include?(role)
+      end
     end
 
     class AbuseReport < Entity


=====================================
app/api/v1/roles.rb
=====================================
--- a/app/api/v1/roles.rb
+++ b/app/api/v1/roles.rb
@@ -14,9 +14,27 @@ module Api
               profile = environment.profiles.find(params[:profile_id])
               return forbidden! unless profile.kind_of?(Organization)
               roles = Profile::Roles.organization_roles(profile.environment.id, profile.id)
-              present_partial paginate(roles), with: Entities::Role
+              person_roles = []
+              if params[:person_id].present?
+                person = environment.people.find(params[:person_id])
+                person_roles = person.role_assignments.where(resource: profile).joins(:role).map(&:role)
+              end
+              present_partial paginate(roles), with: Entities::Role, person_roles: person_roles
             end
-            
+
+            resource :assign do
+              post do
+                profile = environment.profiles.find(params[:profile_id])
+                return forbidden! unless profile.kind_of?(Organization)
+
+                person = environment.people.find(params[:person_id])
+                profile.affiliate(person, Role.find(params[:role_ids])) if params[:role_ids].present?
+                profile.disaffiliate(person, Role.find(params[:remove_role_ids])) if params[:remove_role_ids].present?
+                person_roles = person.role_assignments.where(resource: profile).joins(:role).map(&:role)
+                present_partial paginate(person_roles), with: Entities::Role
+              end
+            end
+
           end
         end
       end


=====================================
test/api/roles_test.rb
=====================================
--- a/test/api/roles_test.rb
+++ b/test/api/roles_test.rb
@@ -25,4 +25,31 @@ class TolesTest < ActiveSupport::TestCase
     get "/api/v1/profiles/#{person.id}/roles?#{params.to_query}"
     assert_equal 403, last_response.status
   end
+
+  should 'list organization roles with assignments when pass person_id' do
+    environment.roles.delete_all
+    role1 = Role.create!(key: 'profile_administrator', name: 'admin', environment: environment)
+    role2 = Role.new(key: 'profile_moderator', name: 'moderator', environment: environment)
+    profile.custom_roles << role2
+    profile.affiliate(person, [role2])
+    params[:person_id] = person.id
+    get "/api/v1/profiles/#{profile.id}/roles?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert !json.find { |r|  r['key'] == 'profile_administrator' }['assigned']
+    assert json.find { |r| r['key'] == 'profile_moderator' }['assigned']
+  end
+
+  should 'assign roles to a person into an organization' do
+    environment.roles.delete_all
+    role1 = Role.create!(key: 'profile_administrator', name: 'admin', environment: environment)
+    role2 = Role.create!(key: 'profile_moderator', name: 'moderator', environment: environment)
+    role3 = Role.create!(key: 'member', name: 'member', environment: environment)
+    profile.affiliate(person, [role3])
+    params[:person_id] = person.id
+    params[:role_ids] = [role2.id]
+    params[:remove_role_ids] = [role3.id]
+    post "/api/v1/profiles/#{profile.id}/roles/assign?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal ['profile_moderator'], json.map { |r| r['key'] }
+  end
 end



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/17b4341ea57011b6fcc9b0d561a375f0d359c645...ebdcd0b234e2ddd6896ac1140ec61ebcc88149ff
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20170327/91380fd5/attachment-0001.html>


More information about the Noosfero-dev mailing list