Adds a simple API for listing roles (#9725).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8799 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2012-02-06 10:06:32 +00:00
parent c5665276b7
commit be246de161
4 changed files with 93 additions and 4 deletions

View File

@ -18,13 +18,21 @@
class RolesController < ApplicationController
layout 'admin'
before_filter :require_admin
before_filter :require_admin, :except => :index
before_filter :require_admin_or_api_request, :only => :index
before_filter :find_role, :only => [:edit, :update, :destroy]
accept_api_auth :index
def index
@role_pages, @roles = paginate :roles, :per_page => 25, :order => 'builtin, position'
render :action => "index", :layout => false if request.xhr?
respond_to do |format|
format.html {
@role_pages, @roles = paginate :roles, :per_page => 25, :order => 'builtin, position'
render :action => "index", :layout => false if request.xhr?
}
format.api {
@roles = Role.givable.all
}
end
end
def new

View File

@ -0,0 +1,8 @@
api.array :roles do
@roles.each do |role|
api.role do
api.id role.id
api.name role.name
end
end
end

View File

@ -0,0 +1,69 @@
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../../test_helper', __FILE__)
class ApiTest::RolesTest < ActionController::IntegrationTest
fixtures :roles
def setup
Setting.rest_api_enabled = '1'
end
context "/roles" do
context "GET" do
context "xml" do
should "return the roles" do
get '/roles.xml'
assert_response :success
assert_equal 'application/xml', @response.content_type
assert_equal 3, assigns(:roles).size
assert_tag :tag => 'roles',
:attributes => {:type => 'array'},
:child => {
:tag => 'role',
:child => {
:tag => 'id',
:content => '2',
:sibling => {
:tag => 'name',
:content => 'Developer'
}
}
}
end
end
context "json" do
should "return the roles" do
get '/roles.json'
assert_response :success
assert_equal 'application/json', @response.content_type
assert_equal 3, assigns(:roles).size
json = ActiveSupport::JSON.decode(response.body)
assert_kind_of Hash, json
assert_kind_of Array, json['roles']
assert_include({'id' => 2, 'name' => 'Developer'}, json['roles'])
end
end
end
end
end

View File

@ -23,6 +23,10 @@ class RoutingRolesTest < ActionController::IntegrationTest
{ :method => 'get', :path => "/roles" },
{ :controller => 'roles', :action => 'index' }
)
assert_routing(
{ :method => 'get', :path => "/roles.xml" },
{ :controller => 'roles', :action => 'index', :format => 'xml' }
)
assert_routing(
{ :method => 'get', :path => "/roles/new" },
{ :controller => 'roles', :action => 'new' }