Commit 3127b5ec75a41e9991a8bc68696fb84e7fa4541d

Authored by Victor Costa
1 parent 53a2c9a9
Exists in api_roles

api: return profile roles

app/api/app.rb
... ... @@ -54,6 +54,7 @@ module Api
54 54 mount V1::Blocks
55 55 mount V1::Profiles
56 56 mount V1::Activities
  57 + mount V1::Roles
57 58  
58 59 # hook point which allow plugins to add Grape::API extensions to Api::App
59 60 #finds for plugins which has api mount points classes defined (the class should extends Grape::API)
... ...
app/api/entities.rb
... ... @@ -302,5 +302,12 @@ module Api
302 302 type_map.first.represent(activity.target) unless type_map.nil?
303 303 end
304 304 end
  305 +
  306 + class Role < Entity
  307 + root 'roles', 'role'
  308 + expose :id
  309 + expose :name
  310 + expose :key
  311 + end
305 312 end
306 313 end
... ...
app/api/v1/roles.rb 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +module Api
  2 + module V1
  3 + class Roles < Grape::API
  4 + before { authenticate! }
  5 +
  6 + MAX_PER_PAGE = 50
  7 +
  8 + resource :profiles do
  9 + segment "/:profile_id" do
  10 + resource :roles do
  11 +
  12 + paginate max_per_page: MAX_PER_PAGE
  13 + get do
  14 + profile = environment.profiles.find(params[:profile_id])
  15 + return forbidden! unless profile.kind_of?(Organization)
  16 + roles = Profile::Roles.organization_roles(profile.environment.id, profile.id)
  17 + present_partial paginate(roles), with: Entities::Role
  18 + end
  19 +
  20 + end
  21 + end
  22 + end
  23 + end
  24 + end
  25 +end
... ...
app/models/profile.rb
... ... @@ -52,6 +52,9 @@ class Profile &lt; ApplicationRecord
52 52 def self.organization_custom_roles(env_id, profile_id)
53 53 all_roles(env_id).where('profile_id = ?', profile_id)
54 54 end
  55 + def self.organization_roles(env_id, profile_id)
  56 + all_roles(env_id).where("profile_id = ? or key like 'profile_%'", profile_id)
  57 + end
55 58 def self.all_roles(env_id)
56 59 Role.where(environment_id: env_id)
57 60 end
... ...
app/views/tasks/_add_member_accept_details.html.erb
1 1 <%= content = _("Roles:")+"<br />"
2   -roles = Profile::Roles.organization_member_roles(task.target.environment.id) + profile.custom_roles
  2 +roles = Profile::Roles.organization_roles(task.target.environment.id, profile.id)
3 3 roles.each do |role|
4 4 content += labelled_check_box(role.name, "tasks[#{task.id}][task][roles][]", role.id, false) + "<br />".html_safe
5 5 end
... ...
test/api/roles_test.rb 0 → 100644
... ... @@ -0,0 +1,28 @@
  1 +require_relative 'test_helper'
  2 +
  3 +class TolesTest < ActiveSupport::TestCase
  4 +
  5 + def setup
  6 + create_and_activate_user
  7 + login_api
  8 + @environment = Environment.default
  9 + @profile = fast_create(Organization)
  10 + end
  11 +
  12 + attr_accessor :profile, :environment
  13 +
  14 + should 'list organization roles' do
  15 + environment.roles.delete_all
  16 + role1 = Role.create!(key: 'profile_administrator', name: 'admin', environment: environment)
  17 + role2 = Role.new(key: 'profile_moderator', name: 'moderator', environment: environment)
  18 + profile.custom_roles << role2
  19 + get "/api/v1/profiles/#{profile.id}/roles?#{params.to_query}"
  20 + json = JSON.parse(last_response.body)
  21 + assert_equivalent [role1.id, role2.id], json['roles'].map {|r| r['id']}
  22 + end
  23 +
  24 + should 'return forbidden status when profile is not an organization' do
  25 + get "/api/v1/profiles/#{person.id}/roles?#{params.to_query}"
  26 + assert_equal 403, last_response.status
  27 + end
  28 +end
... ...
test/unit/profile_test.rb
... ... @@ -1892,7 +1892,7 @@ class ProfileTest &lt; ActiveSupport::TestCase
1892 1892 assert_includes Profile.communities, child
1893 1893 end
1894 1894  
1895   - should 'get organization roles' do
  1895 + should 'get organization member roles' do
1896 1896 env = fast_create(Environment)
1897 1897 roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :key => r, :environment_id => env.id, :permissions => ["some"]) }
1898 1898 create Role, :name => 'test', :key => 'profile_test', :environment_id => env.id + 1
... ... @@ -1900,6 +1900,15 @@ class ProfileTest &lt; ActiveSupport::TestCase
1900 1900 assert_equal roles[2..3], Profile::Roles.organization_member_roles(env.id)
1901 1901 end
1902 1902  
  1903 + should 'get organization roles' do
  1904 + env = fast_create(Environment)
  1905 + env.roles.delete_all
  1906 + profile = fast_create(Organization)
  1907 + roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :key => r, :environment_id => env.id, :permissions => ["some"]) }
  1908 + roles << create(Role, name: 'test', key: 'something_else', environment_id: env.id, profile_id: profile.id)
  1909 + assert_equal roles[2..4], Profile::Roles.organization_roles(env.id, profile.id)
  1910 + end
  1911 +
1903 1912 should 'get all roles' do
1904 1913 env = fast_create(Environment)
1905 1914 roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :environment_id => env.id, :permissions => ["some"]) }
... ...