From dee85e78a5d87f7db0db9c3038982f213432ddf7 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 21 Jul 2016 17:27:12 -0300 Subject: [PATCH] api: return organization roles --- app/api/app.rb | 1 + app/api/entities.rb | 7 +++++++ app/api/v1/roles.rb | 24 ++++++++++++++++++++++++ app/models/profile.rb | 3 +++ app/views/tasks/_add_member_accept_details.html.erb | 2 +- test/api/roles_test.rb | 23 +++++++++++++++++++++++ test/unit/profile_test.rb | 11 ++++++++++- 7 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 app/api/v1/roles.rb create mode 100644 test/api/roles_test.rb diff --git a/app/api/app.rb b/app/api/app.rb index a78124a..8fbbcac 100644 --- a/app/api/app.rb +++ b/app/api/app.rb @@ -54,6 +54,7 @@ module Api mount V1::Blocks mount V1::Profiles mount V1::Activities + mount V1::Roles # hook point which allow plugins to add Grape::API extensions to Api::App #finds for plugins which has api mount points classes defined (the class should extends Grape::API) diff --git a/app/api/entities.rb b/app/api/entities.rb index 50e9b1a..6148dfb 100644 --- a/app/api/entities.rb +++ b/app/api/entities.rb @@ -298,5 +298,12 @@ module Api type_map.first.represent(activity.target) unless type_map.nil? end end + + class Role < Entity + root 'roles', 'role' + expose :id + expose :name + expose :key + end end end diff --git a/app/api/v1/roles.rb b/app/api/v1/roles.rb new file mode 100644 index 0000000..a8a3d42 --- /dev/null +++ b/app/api/v1/roles.rb @@ -0,0 +1,24 @@ +module Api + module V1 + class Roles < Grape::API + before { authenticate! } + + MAX_PER_PAGE = 50 + + resource :organizations do + segment "/:organization_id" do + resource :roles do + + paginate max_per_page: MAX_PER_PAGE + get do + organization = environment.profiles.find(params[:organization_id]) + roles = Profile::Roles.organization_roles(organization.environment.id, organization.id) + present_partial paginate(roles), with: Entities::Role + end + + end + end + end + end + end +end diff --git a/app/models/profile.rb b/app/models/profile.rb index ada6a69..9ce3e8b 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -52,6 +52,9 @@ class Profile < ApplicationRecord def self.organization_custom_roles(env_id, profile_id) all_roles(env_id).where('profile_id = ?', profile_id) end + def self.organization_roles(env_id, profile_id) + all_roles(env_id).where("profile_id = ? or key like 'profile_%'", profile_id) + end def self.all_roles(env_id) Role.where(environment_id: env_id) end diff --git a/app/views/tasks/_add_member_accept_details.html.erb b/app/views/tasks/_add_member_accept_details.html.erb index 51a4641..31a3599 100644 --- a/app/views/tasks/_add_member_accept_details.html.erb +++ b/app/views/tasks/_add_member_accept_details.html.erb @@ -1,5 +1,5 @@ <%= content = _("Roles:")+"
" -roles = Profile::Roles.organization_member_roles(task.target.environment.id) + profile.custom_roles +roles = Profile::Roles.organization_roles(task.target.environment.id, profile.id) roles.each do |role| content += labelled_check_box(role.name, "tasks[#{task.id}][task][roles][]", role.id, false) + "
".html_safe end diff --git a/test/api/roles_test.rb b/test/api/roles_test.rb new file mode 100644 index 0000000..d26d3dc --- /dev/null +++ b/test/api/roles_test.rb @@ -0,0 +1,23 @@ +require_relative 'test_helper' + +class TolesTest < ActiveSupport::TestCase + + def setup + create_and_activate_user + login_api + @environment = Environment.default + @profile = fast_create(Organization) + end + + attr_accessor :profile, :environment + + should 'list organization roles' 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 + get "/api/v1/organizations/#{profile.id}/roles?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equivalent [role1.id, role2.id], json['roles'].map {|r| r['id']} + end +end diff --git a/test/unit/profile_test.rb b/test/unit/profile_test.rb index 9c998ba..559bb0c 100644 --- a/test/unit/profile_test.rb +++ b/test/unit/profile_test.rb @@ -1892,7 +1892,7 @@ class ProfileTest < ActiveSupport::TestCase assert_includes Profile.communities, child end - should 'get organization roles' do + should 'get organization member roles' do env = fast_create(Environment) roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :key => r, :environment_id => env.id, :permissions => ["some"]) } create Role, :name => 'test', :key => 'profile_test', :environment_id => env.id + 1 @@ -1900,6 +1900,15 @@ class ProfileTest < ActiveSupport::TestCase assert_equal roles[2..3], Profile::Roles.organization_member_roles(env.id) end + should 'get organization roles' do + env = fast_create(Environment) + env.roles.delete_all + profile = fast_create(Organization) + roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :key => r, :environment_id => env.id, :permissions => ["some"]) } + roles << create(Role, name: 'test', key: 'something_else', environment_id: env.id, profile_id: profile.id) + assert_equal roles[2..4], Profile::Roles.organization_roles(env.id, profile.id) + end + should 'get all roles' do env = fast_create(Environment) roles = %w(foo bar profile_foo profile_bar).map{ |r| create(Role, :name => r, :environment_id => env.id, :permissions => ["some"]) } -- libgit2 0.21.2