Mercurial > hg > soundsoftware-site
diff test/functional/repositories_subversion_controller_test.rb @ 1115:433d4f72a19b redmine-2.2
Update to Redmine SVN revision 11137 on 2.2-stable branch
author | Chris Cannam |
---|---|
date | Mon, 07 Jan 2013 12:01:42 +0000 |
parents | cbb26bc654de |
children | 622f24f53b42 261b3d9a4903 |
line wrap: on
line diff
--- a/test/functional/repositories_subversion_controller_test.rb Wed Jun 27 14:54:18 2012 +0100 +++ b/test/functional/repositories_subversion_controller_test.rb Mon Jan 07 12:01:42 2013 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2011 Jean-Philippe Lang +# Copyright (C) 2006-2012 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -16,12 +16,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require File.expand_path('../../test_helper', __FILE__) -require 'repositories_controller' - -# Re-raise errors caught by the controller. -class RepositoriesController; def rescue_action(e) raise e end; end class RepositoriesSubversionControllerTest < ActionController::TestCase + tests RepositoriesController + fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers @@ -30,9 +28,6 @@ NUM_REV = 11 def setup - @controller = RepositoriesController.new - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new Setting.default_language = 'en' User.current = nil @@ -43,6 +38,16 @@ end if repository_configured?('subversion') + def test_new + @request.session[:user_id] = 1 + @project.repository.destroy + get :new, :project_id => 'subproject1', :repository_scm => 'Subversion' + assert_response :success + assert_template 'new' + assert_kind_of Repository::Subversion, assigns(:repository) + assert assigns(:repository).new_record? + end + def test_show assert_equal 0, @repository.changesets.count @repository.fetch_changesets @@ -53,19 +58,31 @@ assert_template 'show' assert_not_nil assigns(:entries) assert_not_nil assigns(:changesets) + + entry = assigns(:entries).detect {|e| e.name == 'subversion_test'} + assert_not_nil entry + assert_equal 'dir', entry.kind + assert_select 'tr.dir a[href=/projects/subproject1/repository/show/subversion_test]' + + assert_tag 'input', :attributes => {:name => 'rev'} + assert_tag 'a', :content => 'Statistics' + assert_tag 'a', :content => 'Atom' + assert_tag :tag => 'a', + :attributes => {:href => '/projects/subproject1/repository'}, + :content => 'root' end - def test_browse_root - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - get :show, :id => PRJ_ID + def test_show_non_default + Repository::Subversion.create(:project => @project, + :url => self.class.subversion_repository_url, + :is_default => false, :identifier => 'svn') + + get :show, :id => PRJ_ID, :repository_id => 'svn' assert_response :success assert_template 'show' - assert_not_nil assigns(:entries) - entry = assigns(:entries).detect {|e| e.name == 'subversion_test'} - assert_equal 'dir', entry.kind + assert_select 'tr.dir a[href=/projects/subproject1/repository/svn/show/subversion_test]' + # Repository menu should link to the main repo + assert_select '#main-menu a[href=/projects/subproject1/repository]' end def test_browse_directory @@ -73,7 +90,7 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, :id => PRJ_ID, :path => ['subversion_test'] + get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param] assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -93,7 +110,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4 + get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param], + :rev => 4 assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -106,7 +124,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ] + get :changes, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'folder', 'helloworld.rb'])[:param] assert_response :success assert_template 'changes' @@ -130,7 +149,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ] + get :changes, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'folder'])[:param] assert_response :success assert_template 'changes' @@ -144,7 +164,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success assert_template 'entry' end @@ -156,20 +177,29 @@ assert_equal NUM_REV, @repository.changesets.count # no files in the test repo is larger than 1KB... with_settings :file_max_size_displayed => 0 do - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success - assert_template '' assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition'] end end + def test_entry_should_send_images_inline + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'folder', 'subfolder', 'rubylogo.gif'])[:param] + assert_response :success + assert_equal 'inline; filename="rubylogo.gif"', response.headers['Content-Disposition'] + end + def test_entry_at_given_revision assert_equal 0, @repository.changesets.count @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2 + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'helloworld.rb'])[:param], + :rev => 2 assert_response :success assert_template 'entry' # this line was removed in r3 and file was moved in r6 @@ -182,9 +212,10 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c'] + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'zzz.c'])[:param] assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, - :content => /The entry or revision was not found in the repository/ + :content => /The entry or revision was not found in the repository/ end def test_entry_download @@ -192,9 +223,9 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw' + get :raw, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success - assert_template '' assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition'] end @@ -203,7 +234,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder'] + get :entry, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'folder'])[:param] assert_response :success assert_template 'show' assert_not_nil assigns(:entry) @@ -215,18 +247,15 @@ get :revision, :id => 1, :rev => 2 assert_response :success assert_template 'revision' - assert_tag :tag => 'ul', - :child => { :tag => 'li', - # link to the entry at rev 2 - :child => { :tag => 'a', - :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo'}, - :content => 'repo', - # link to partial diff - :sibling => { :tag => 'a', - :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' } - } - } - } + + assert_select 'ul' do + assert_select 'li' do + # link to the entry at rev 2 + assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo', :text => 'repo' + # link to partial diff + assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' + end + end end def test_invalid_revision @@ -266,18 +295,15 @@ get :revision, :id => 1, :rev => 2 assert_response :success assert_template 'revision' - assert_tag :tag => 'ul', - :child => { :tag => 'li', - # link to the entry at rev 2 - :child => { :tag => 'a', - :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo'}, - :content => 'repo', - # link to partial diff - :sibling => { :tag => 'a', - :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' } - } - } - } + + assert_select 'ul' do + assert_select 'li' do + # link to the entry at rev 2 + assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo', :text => 'repo' + # link to partial diff + assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' + end + end end def test_revision_diff @@ -289,11 +315,23 @@ get :diff, :id => PRJ_ID, :rev => 3, :type => dt assert_response :success assert_template 'diff' - assert_tag :tag => 'h2', - :content => / 3/ + assert_select 'h2', :text => /Revision 3/ + assert_select 'th.filename', :text => 'subversion_test/textfile.txt' end end + def test_revision_diff_raw_format + assert_equal 0, @repository.changesets.count + @repository.fetch_changesets + @project.reload + assert_equal NUM_REV, @repository.changesets.count + + get :diff, :id => PRJ_ID, :rev => 3, :format => 'diff' + assert_response :success + assert_equal 'text/x-patch', @response.content_type + assert_equal 'Index: subversion_test/textfile.txt', @response.body.split(/\r?\n/).first + end + def test_directory_diff assert_equal 0, @repository.changesets.count @repository.fetch_changesets @@ -301,7 +339,8 @@ assert_equal NUM_REV, @repository.changesets.count ['inline', 'sbs'].each do |dt| get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, - :path => ['subversion_test', 'folder'], :type => dt + :path => repository_path_hash(['subversion_test', 'folder'])[:param], + :type => dt assert_response :success assert_template 'diff' @@ -318,9 +357,23 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] + get :annotate, :id => PRJ_ID, + :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success assert_template 'annotate' + + assert_select 'tr' do + assert_select 'th.line-num', :text => '1' + assert_select 'td.revision', :text => '4' + assert_select 'td.author', :text => 'jp' + assert_select 'td', :text => /stdio.h/ + end + # Same revision + assert_select 'tr' do + assert_select 'th.line-num', :text => '2' + assert_select 'td.revision', :text => '' + assert_select 'td.author', :text => '' + end end def test_annotate_at_given_revision @@ -328,7 +381,8 @@ @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c'] + get :annotate, :id => PRJ_ID, :rev => 8, + :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success assert_template 'annotate' assert_tag :tag => 'h2', :content => /@ 8/ @@ -338,10 +392,11 @@ @request.session[:user_id] = 1 # admin assert_equal 0, @repository.changesets.count @repository.fetch_changesets - @project.reload assert_equal NUM_REV, @repository.changesets.count - get :destroy, :id => PRJ_ID + assert_difference 'Repository.count', -1 do + delete :destroy, :id => @repository.id + end assert_response 302 @project.reload assert_nil @project.repository @@ -349,25 +404,16 @@ def test_destroy_invalid_repository @request.session[:user_id] = 1 # admin - assert_equal 0, @repository.changesets.count - @repository.fetch_changesets - @project.reload - assert_equal NUM_REV, @repository.changesets.count - - get :destroy, :id => PRJ_ID - assert_response 302 - @project.reload - assert_nil @project.repository - - @repository = Repository::Subversion.create( + @project.repository.destroy + @repository = Repository::Subversion.create!( :project => @project, :url => "file:///invalid") - assert @repository @repository.fetch_changesets - @project.reload assert_equal 0, @repository.changesets.count - get :destroy, :id => PRJ_ID + assert_difference 'Repository.count', -1 do + delete :destroy, :id => @repository.id + end assert_response 302 @project.reload assert_nil @project.repository