[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