##// END OF EJS Templates
Adds support for GET on /issues/:issue_id/relations (#7366)....
Jean-Philippe Lang -
r6059:daa426167f2c
parent child
Show More
@@ -0,0 +1,11
1 api.array :relations do
2 @relations.each do |relation|
3 api.relation do
4 api.id relation.id
5 api.issue_id relation.issue_from_id
6 api.issue_to_id relation.issue_to_id
7 api.relation_type relation.relation_type
8 api.delay relation.delay
9 end
10 end
11 end
@@ -17,7 +17,16
17
17
18 class IssueRelationsController < ApplicationController
18 class IssueRelationsController < ApplicationController
19 before_filter :find_issue, :find_project_from_association, :authorize
19 before_filter :find_issue, :find_project_from_association, :authorize
20 accept_key_auth :show, :create, :destroy
20 accept_key_auth :index, :show, :create, :destroy
21
22 def index
23 @relations = @issue.relations
24
25 respond_to do |format|
26 format.html { render :nothing => true }
27 format.api
28 end
29 end
21
30
22 def show
31 def show
23 @relation = @issue.find_relation(params[:id])
32 @relation = @issue.find_relation(params[:id])
@@ -27,7 +27,7 api.issue do
27
27
28 api.array :relations do
28 api.array :relations do
29 @relations.each do |relation|
29 @relations.each do |relation|
30 api.relation(:id => relation.id, :issue_id => relation.issue_from_id, :issue_to_id => relation.issue_to_id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
30 api.relation(:id => relation.id, :issue_id => relation.issue_from_id, :issue_to_id => relation.issue_to_id, :relation_type => relation.relation_type, :delay => relation.delay)
31 end
31 end
32 end if include_in_api_response?('relations') && @relations.present?
32 end if include_in_api_response?('relations') && @relations.present?
33
33
@@ -110,7 +110,7 ActionController::Routing::Routes.draw do |map|
110
110
111 map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues|
111 map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues|
112 issues.resources :time_entries, :controller => 'timelog'
112 issues.resources :time_entries, :controller => 'timelog'
113 issues.resources :relations, :controller => 'issue_relations', :only => [:show, :create, :destroy]
113 issues.resources :relations, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy]
114 end
114 end
115
115
116 map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues|
116 map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues|
@@ -69,7 +69,7 Redmine::AccessControl.map do |map|
69 :reports => [:issue_report, :issue_report_details]}
69 :reports => [:issue_report, :issue_report_details]}
70 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
70 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
71 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
71 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
72 map.permission :manage_issue_relations, {:issue_relations => [:show, :create, :destroy]}
72 map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]}
73 map.permission :manage_subtasks, {}
73 map.permission :manage_subtasks, {}
74 map.permission :set_issues_private, {}
74 map.permission :set_issues_private, {}
75 map.permission :set_own_issues_private, {}, :require => :loggedin
75 map.permission :set_own_issues_private, {}, :require => :loggedin
@@ -25,6 +25,25 class ApiTest::IssueRelationsTest < ActionController::IntegrationTest
25 end
25 end
26
26
27 context "/issues/:issue_id/relations" do
27 context "/issues/:issue_id/relations" do
28 context "GET" do
29 should "return issue relations" do
30 get '/issues/9/relations.xml', {}, :authorization => credentials('jsmith')
31
32 assert_response :success
33 assert_equal 'application/xml', @response.content_type
34
35 assert_tag :tag => 'relations',
36 :attributes => { :type => 'array' },
37 :child => {
38 :tag => 'relation',
39 :child => {
40 :tag => 'id',
41 :content => '1'
42 }
43 }
44 end
45 end
46
28 context "POST" do
47 context "POST" do
29 should "create a relation" do
48 should "create a relation" do
30 assert_difference('IssueRelation.count') do
49 assert_difference('IssueRelation.count') do
@@ -118,6 +118,10 class RoutingTest < ActionController::IntegrationTest
118 end
118 end
119
119
120 context "issue relations" do
120 context "issue relations" do
121 should_route :get, "/issues/1/relations", :controller => 'issue_relations', :action => 'index', :issue_id => '1'
122 should_route :get, "/issues/1/relations.xml", :controller => 'issue_relations', :action => 'index', :issue_id => '1', :format => 'xml'
123 should_route :get, "/issues/1/relations.json", :controller => 'issue_relations', :action => 'index', :issue_id => '1', :format => 'json'
124
121 should_route :post, "/issues/1/relations", :controller => 'issue_relations', :action => 'create', :issue_id => '1'
125 should_route :post, "/issues/1/relations", :controller => 'issue_relations', :action => 'create', :issue_id => '1'
122 should_route :post, "/issues/1/relations.xml", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'xml'
126 should_route :post, "/issues/1/relations.xml", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'xml'
123 should_route :post, "/issues/1/relations.json", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'json'
127 should_route :post, "/issues/1/relations.json", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'json'
General Comments 0
You need to be logged in to leave comments. Login now