]> source.dussan.org Git - redmine.git/commitdiff
Adds support for GET on /issues/:issue_id/relations (#7366).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 4 Jul 2011 17:44:41 +0000 (17:44 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 4 Jul 2011 17:44:41 +0000 (17:44 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6179 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/issue_relations_controller.rb
app/views/issue_relations/index.api.rsb [new file with mode: 0644]
app/views/issues/show.api.rsb
config/routes.rb
lib/redmine.rb
test/integration/api_test/issue_relations_test.rb
test/integration/routing_test.rb

index 094036768e15a61795fd9058ec2044b57b0de911..36ee8d6d7c89b6fc60175d0dcc2028eb9a46893b 100644 (file)
 
 class IssueRelationsController < ApplicationController
   before_filter :find_issue, :find_project_from_association, :authorize
-  accept_key_auth :show, :create, :destroy
+  accept_key_auth :index, :show, :create, :destroy
+  
+  def index
+    @relations = @issue.relations
+    
+    respond_to do |format|
+      format.html { render :nothing => true }
+      format.api
+    end
+  end
   
   def show
     @relation = @issue.find_relation(params[:id])
diff --git a/app/views/issue_relations/index.api.rsb b/app/views/issue_relations/index.api.rsb
new file mode 100644 (file)
index 0000000..379481d
--- /dev/null
@@ -0,0 +1,11 @@
+api.array :relations do
+  @relations.each do |relation|
+    api.relation do 
+      api.id relation.id
+      api.issue_id relation.issue_from_id
+      api.issue_to_id relation.issue_to_id
+      api.relation_type relation.relation_type
+      api.delay relation.delay
+    end
+  end
+end
index 3493a29cd2725ef73c0163b39128b611d095b067..9d98959a93343bc17714103cd3153a50331b2584 100644 (file)
@@ -27,7 +27,7 @@ api.issue do
   
   api.array :relations do
     @relations.each do |relation|
-      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)
+      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)
     end
   end if include_in_api_response?('relations') && @relations.present?
   
index 7bb6b0b53512008277437bab281b0beb9cce2307..059ba19256042b572450bb066d0cdb7b34ec9871 100644 (file)
@@ -110,7 +110,7 @@ ActionController::Routing::Routes.draw do |map|
   
   map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues|
     issues.resources :time_entries, :controller => 'timelog'
-    issues.resources :relations, :controller => 'issue_relations', :only => [:show, :create, :destroy]
+    issues.resources :relations, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy]
   end
   
   map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues|
index e08a5eb01cf4b1aeacd00f969605385b5147ac91..21d672492c15dfcb589d299a8607414e456aa46b 100644 (file)
@@ -69,7 +69,7 @@ Redmine::AccessControl.map do |map|
                                   :reports => [:issue_report, :issue_report_details]}
     map.permission :add_issues, {:issues => [:new, :create, :update_form]}
     map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
-    map.permission :manage_issue_relations, {:issue_relations => [:show, :create, :destroy]}
+    map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]}
     map.permission :manage_subtasks, {}
     map.permission :set_issues_private, {}
     map.permission :set_own_issues_private, {}, :require => :loggedin
index 13ac7d5c81c5a04433525746c26145ebcd7cc897..d02f63506020c6e325c05879fb160e7548e6423f 100644 (file)
@@ -25,6 +25,25 @@ class ApiTest::IssueRelationsTest < ActionController::IntegrationTest
   end
 
   context "/issues/:issue_id/relations" do
+    context "GET" do
+      should "return issue relations" do
+        get '/issues/9/relations.xml', {}, :authorization => credentials('jsmith')
+        
+        assert_response :success
+        assert_equal 'application/xml', @response.content_type
+        
+        assert_tag :tag => 'relations',
+          :attributes => { :type => 'array' },
+          :child => {
+            :tag => 'relation',
+            :child => {
+              :tag => 'id',
+              :content => '1'
+            }
+          }
+      end
+    end
+    
     context "POST" do
       should "create a relation" do
         assert_difference('IssueRelation.count') do
index c12900aef0aac0b6c10738d087086831accb8e27..1b1b36ea542171d87d783f38cdfb9ecb4ccd10d1 100644 (file)
@@ -118,6 +118,10 @@ class RoutingTest < ActionController::IntegrationTest
   end
 
   context "issue relations" do
+    should_route :get, "/issues/1/relations", :controller => 'issue_relations', :action => 'index', :issue_id => '1'
+    should_route :get, "/issues/1/relations.xml", :controller => 'issue_relations', :action => 'index', :issue_id => '1', :format => 'xml'
+    should_route :get, "/issues/1/relations.json", :controller => 'issue_relations', :action => 'index', :issue_id => '1', :format => 'json'
+    
     should_route :post, "/issues/1/relations", :controller => 'issue_relations', :action => 'create', :issue_id => '1'
     should_route :post, "/issues/1/relations.xml", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'xml'
     should_route :post, "/issues/1/relations.json", :controller => 'issue_relations', :action => 'create', :issue_id => '1', :format => 'json'