]> source.dussan.org Git - redmine.git/commitdiff
Issues autocomplete should response with content type json and not html (#30818).
authorGo MAEDA <maeda@farend.jp>
Mon, 18 Feb 2019 14:56:19 +0000 (14:56 +0000)
committerGo MAEDA <maeda@farend.jp>
Mon, 18 Feb 2019 14:56:19 +0000 (14:56 +0000)
Patch by Marius BALTEANU.

git-svn-id: http://svn.redmine.org/redmine/trunk@17881 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/auto_completes_controller.rb
test/functional/auto_completes_controller_test.rb

index 293ac201ed6cc1e5ffa1d27c6fd0eb551d5483b0..2d707f9298bf1585b0cf32cad65538426be993f7 100644 (file)
@@ -19,7 +19,7 @@ class AutoCompletesController < ApplicationController
   before_action :find_project
 
   def issues
-    @issues = []
+    issues = []
     q = (params[:q] || params[:term]).to_s.strip
     status = params[:status].to_s
     issue_id = params[:issue_id].to_s
@@ -32,13 +32,14 @@ class AutoCompletesController < ApplicationController
         scope = scope.where.not(:id => issue_id.to_i)
       end
       if q.match(/\A#?(\d+)\z/)
-        @issues << scope.find_by_id($1.to_i)
+        issues << scope.find_by_id($1.to_i)
       end
 
-      @issues += scope.like(q).order(:id => :desc).limit(10).to_a
-      @issues.compact!
+      issues += scope.like(q).order(:id => :desc).limit(10).to_a
+      issues.compact!
     end
-    render :layout => false
+
+    render :json => format_issues_json(issues)
   end
 
   private
@@ -50,4 +51,13 @@ class AutoCompletesController < ApplicationController
   rescue ActiveRecord::RecordNotFound
     render_404
   end
+
+  def format_issues_json(issues)
+    issues.map {|issue| {
+      'id' => issue.id,
+      'label' => "#{issue.tracker} ##{issue.id}: #{issue.subject.to_s.truncate(60)}",
+      'value' => issue.id
+      }
+    }
+  end
 end
index f4f8b4fbf245222012f801e16c0716cead4b82e5..4be18814029cc00064d9684eece418382a297670 100644 (file)
@@ -138,4 +138,14 @@ class AutoCompletesControllerTest < Redmine::ControllerTest
     assert_include "issue", response.body
     assert_not_include "Bug #12: Closed issue on a locked version", response.body
   end
+
+  def test_auto_complete_should_return_json_content_type_response
+    get :issues, :params => {
+        :project_id => 'subproject1',
+        :q => '#13'
+      }
+
+    assert_response :success
+    assert_include 'application/json', response.headers['Content-Type']
+  end
 end