commit 97c0fa58e9e0881a87421005ddef29cdd9692fe5 Author: Jan Schulz-Hofen Date: Sun Aug 3 18:12:23 2014 +0200 Include issue categories, trackers, enabled modules in projects API diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 8337d43..8e23ccd 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -91,4 +91,25 @@ module ProjectsHelper sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing) l("label_version_sharing_#{sharing}") end + + def render_api_includes(project, api) + api.array :trackers do + project.trackers.each do |tracker| + api.tracker(:id => tracker.id, :name => tracker.name) + end + end if include_in_api_response?('trackers') + + api.array :issue_categories do + project.issue_categories.each do |category| + api.issue_category(:id => category.id, :name => category.name) + end + end if include_in_api_response?('issue_categories') + + api.array :enabled_modules do + project.enabled_modules.each do |enabled_module| + api.enabled_module(:id => enabled_module.id, :name => enabled_module.name) + end + end if include_in_api_response?('enabled_modules') + + end end diff --git a/app/views/projects/index.api.rsb b/app/views/projects/index.api.rsb index 1aa5fe7..6397bd5 100644 --- a/app/views/projects/index.api.rsb +++ b/app/views/projects/index.api.rsb @@ -9,6 +9,7 @@ api.array :projects, api_meta(:total_count => @project_count, :offset => @offset api.status project.status render_api_custom_values project.visible_custom_field_values, api + render_api_includes(project, api) api.created_on project.created_on api.updated_on project.updated_on diff --git a/app/views/projects/show.api.rsb b/app/views/projects/show.api.rsb index e84ebb0..e268a78 100644 --- a/app/views/projects/show.api.rsb +++ b/app/views/projects/show.api.rsb @@ -8,19 +8,8 @@ api.project do api.status @project.status render_api_custom_values @project.visible_custom_field_values, api + render_api_includes(@project, api) api.created_on @project.created_on api.updated_on @project.updated_on - - api.array :trackers do - @project.trackers.each do |tracker| - api.tracker(:id => tracker.id, :name => tracker.name) - end - end if include_in_api_response?('trackers') - - api.array :issue_categories do - @project.issue_categories.each do |category| - api.issue_category(:id => category.id, :name => category.name) - end - end if include_in_api_response?('issue_categories') end diff --git a/test/integration/api_test/projects_test.rb b/test/integration/api_test/projects_test.rb index 9f63e33..07f5583 100644 --- a/test/integration/api_test/projects_test.rb +++ b/test/integration/api_test/projects_test.rb @@ -65,6 +65,53 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base assert json['projects'].first.has_key?('id') end + test "GET /projects.xml with include=issue_categories should return categories" do + get '/projects.xml?include=issue_categories' + assert_response :success + assert_equal 'application/xml', @response.content_type + + assert_tag 'issue_categories', + :attributes => {:type => 'array'}, + :child => { + :tag => 'issue_category', + :attributes => { + :id => '2', + :name => 'Recipes' + } + } + end + + test "GET /projects.xml with include=trackers should return trackers" do + get '/projects.xml?include=trackers' + assert_response :success + assert_equal 'application/xml', @response.content_type + + assert_tag 'trackers', + :attributes => {:type => 'array'}, + :child => { + :tag => 'tracker', + :attributes => { + :id => '2', + :name => 'Feature request' + } + } + end + + test "GET /projects.xml with include=enabled_modules should return enabled modules" do + get '/projects.xml?include=enabled_modules' + assert_response :success + assert_equal 'application/xml', @response.content_type + + assert_tag 'enabled_modules', + :attributes => {:type => 'array'}, + :child => { + :tag => 'enabled_module', + :attributes => { + :name => 'issue_tracking' + } + } + end + test "GET /projects/:id.xml should return the project" do get '/projects/1.xml' assert_response :success @@ -130,6 +177,21 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base } end + test "GET /projects/:id.xml with include=enabled_modules should return enabled modules" do + get '/projects/1.xml?include=enabled_modules' + assert_response :success + assert_equal 'application/xml', @response.content_type + + assert_tag 'enabled_modules', + :attributes => {:type => 'array'}, + :child => { + :tag => 'enabled_module', + :attributes => { + :name => 'issue_tracking' + } + } + end + test "POST /projects.xml with valid parameters should create the project" do Setting.default_projects_modules = ['issue_tracking', 'repository']