]> source.dussan.org Git - redmine.git/commitdiff
Use JSON instead of XML for reposman.rb.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 1 Jun 2017 20:09:08 +0000 (20:09 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 1 Jun 2017 20:09:08 +0000 (20:09 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@16591 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/sys_controller.rb
extra/svn/reposman.rb
test/functional/sys_controller_test.rb

index 6ef72a15fa87b0faa926699b70d62173993f6c3c..e7f5ebe12d8fb9c3054729271d8ec0fbb8a24dd0 100644 (file)
@@ -22,7 +22,7 @@ class SysController < ActionController::Base
     p = Project.active.has_module(:repository).
           order("#{Project.table_name}.identifier").preload(:repository).to_a
     # extra_info attribute from repository breaks activeresource client
-    render :xml => p.to_xml(
+    render :json => p.to_json(
                        :only => [:id, :identifier, :name, :is_public, :status],
                        :include => {:repository => {:only => [:id, :url]}}
                      )
@@ -34,10 +34,11 @@ class SysController < ActionController::Base
       head 409
     else
       logger.info "Repository for #{project.name} was reported to be created by #{request.remote_ip}."
-      repository = Repository.factory(params[:vendor], params[:repository])
+      repository = Repository.factory(params[:vendor])
+      repository.safe_attributes = params[:repository]
       repository.project = project
       if repository.save
-        render :xml => {repository.class.name.underscore.gsub('/', '-') => {:id => repository.id, :url => repository.url}}, :status => 201
+        render :json => {repository.class.name.underscore.gsub('/', '-') => {:id => repository.id, :url => repository.url}}, :status => 201
       else
         head 422
       end
index d79ad269552c89020abf68cf33f9142ea00f72bd..4e2f53a28e7ce23612f8121605226a4d64f54fe1 100755 (executable)
@@ -5,7 +5,7 @@ require 'find'
 require 'etc'
 require 'rubygems'
 
-Version = "1.4"
+Version = "1.5"
 SUPPORTED_SCM = %w( Subversion Darcs Mercurial Bazaar Git Filesystem )
 
 $verbose      = 0
@@ -160,7 +160,7 @@ end
 
 class Project < ActiveResource::Base
   self.headers["User-agent"] = "Redmine repository manager/#{Version}"
-  self.format = :xml
+  self.format = :json
 end
 
 log("querying Redmine for projects...", :level => 1);
index becd4ec42b371981d22fd04e5708d26b43ab1457..8bd1aedf9e8970a53f3c60df5bade04f3a7f3462 100644 (file)
@@ -32,17 +32,17 @@ class SysControllerTest < Redmine::ControllerTest
   def test_projects_with_repository_enabled
     get :projects
     assert_response :success
-    assert_equal 'application/xml', @response.content_type
-
-    assert_select 'projects' do
-      assert_select 'project', Project.active.has_module(:repository).count
-      assert_select 'project' do
-        assert_select 'identifier'
-        assert_select 'is-public'
-      end
-    end
-    assert_select 'extra-info', 0
-    assert_select 'extra_info', 0
+    assert_equal 'application/json', @response.content_type
+
+    data = ActiveSupport::JSON.decode(response.body)
+
+    assert_equal Project.active.has_module(:repository).count, data.size
+    project = data.first
+    assert project['identifier']
+    assert project['is_public']
+
+    assert_not_include 'extra-info', response.body
+    assert_not_include 'extra_info', response.body
   end
 
   def test_create_project_repository
@@ -54,18 +54,19 @@ class SysControllerTest < Redmine::ControllerTest
       :repository => { :url => 'file:///create/project/repository/subproject2'}
     }
     assert_response :created
-    assert_equal 'application/xml', @response.content_type
+    assert_equal 'application/json', @response.content_type
 
     r = Project.find(4).repository
     assert r.is_a?(Repository::Subversion)
     assert_equal 'file:///create/project/repository/subproject2', r.url
-    
-    assert_select 'repository-subversion' do
-      assert_select 'id', :text => r.id.to_s
-      assert_select 'url', :text => r.url
-    end
-    assert_select 'extra-info', 0
-    assert_select 'extra_info', 0
+
+    data = ActiveSupport::JSON.decode(response.body)
+    assert data['repository-subversion']
+    assert_equal r.id, data['repository-subversion']['id']
+    assert_equal r.url, data['repository-subversion']['url']
+
+    assert_not_include 'extra-info', response.body
+    assert_not_include 'extra_info', response.body
   end
 
   def test_create_already_existing