diff test/functional/repositories_mercurial_controller_test.rb @ 119:8661b858af72

* Update to Redmine trunk rev 4705
author Chris Cannam
date Thu, 13 Jan 2011 14:12:06 +0000
parents 513646585e45
children cd2282d2aa55 07fa8a8b56a8
line wrap: on
line diff
--- a/test/functional/repositories_mercurial_controller_test.rb	Fri Nov 19 14:05:24 2010 +0000
+++ b/test/functional/repositories_mercurial_controller_test.rb	Thu Jan 13 14:12:06 2011 +0000
@@ -15,7 +15,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
-require File.dirname(__FILE__) + '/../test_helper'
+require File.expand_path('../../test_helper', __FILE__)
 require 'repositories_controller'
 
 # Re-raise errors caught by the controller.
@@ -32,9 +32,10 @@
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
     def test_show
       get :show, :id => 3
@@ -49,10 +50,10 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal 3, assigns(:entries).size
-      assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
+      assert_equal 4, assigns(:entries).size
+      assert assigns(:entries).detect {|e| e.name == 'images'  && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
-      assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
+      assert assigns(:entries).detect {|e| e.name == 'README'  && e.kind == 'file'}
     end
     
     def test_show_directory
@@ -66,15 +67,33 @@
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
     end
-    
+
     def test_show_at_given_revision
-      get :show, :id => 3, :path => ['images'], :rev => 0
-      assert_response :success
-      assert_template 'show'
-      assert_not_nil assigns(:entries)
-      assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+      [0, '0', '0885933ad4f6'].each do |r1|
+        get :show, :id => 3, :path => ['images'], :rev => r1
+        assert_response :success
+        assert_template 'show'
+        assert_not_nil assigns(:entries)
+        assert_equal ['delete.png'], assigns(:entries).collect(&:name)
+      end
     end
-    
+
+    def test_show_directory_sql_escape_percent
+      [13, '13', '3a330eb32958'].each do |r1|
+        get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => r1
+        assert_response :success
+        assert_template 'show'
+
+        assert_not_nil assigns(:entries)
+        assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
+        changesets = assigns(:changesets)
+
+        ## This is not yet implemented.
+        # assert_not_nil changesets
+        # assert_equal %w(13 11 10 9), changesets.collect(&:revision)
+      end
+    end
+
     def test_changes
       get :changes, :id => 3, :path => ['images', 'edit.png']
       assert_response :success
@@ -86,10 +105,10 @@
       get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
-      # Line 19
+      # Line 10
       assert_tag :tag => 'th',
-                 :content => /10/,
-                 :attributes => { :class => /line-num/ },
+                 :content => '10',
+                 :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
     end
     
@@ -109,28 +128,83 @@
     end
     
     def test_diff
-      # Full diff of changeset 4
-      get :diff, :id => 3, :rev => 4
-      assert_response :success
-      assert_template 'diff'
-      # Line 22 removed
-      assert_tag :tag => 'th',
-                 :content => /22/,
-                 :sibling => { :tag => 'td', 
-                               :attributes => { :class => /diff_out/ },
-                               :content => /def remove/ }
+      @repository.fetch_changesets
+      @repository.reload
+
+      [4, '4', 'def6d2f1254a'].each do |r1|
+        # Full diff of changeset 4
+        get :diff, :id => 3, :rev => 4
+        assert_response :success
+        assert_template 'diff'
+
+        if @repository.scm.class.client_version_above?([1, 2])
+          # Line 22 removed
+          assert_tag :tag => 'th',
+                     :content => '22',
+                     :sibling => { :tag => 'td', 
+                                   :attributes => { :class => /diff_out/ },
+                                   :content => /def remove/ }
+          assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
+        end
+      end
     end
-    
+
+    def test_diff_two_revs
+      @repository.fetch_changesets
+      @repository.reload
+
+      [2, '400bb8672109', '400', 400].each do |r1|
+        [4, 'def6d2f1254a'].each do |r2|
+          get :diff, :id => 3, :rev    => r1,
+                               :rev_to => r2
+          assert_response :success
+          assert_template 'diff'
+
+          diff = assigns(:diff)
+          assert_not_nil diff
+          assert_tag :tag => 'h2', :content => /4:def6d2f1254a 2:400bb8672109/
+        end
+      end
+    end
+
     def test_annotate
       get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
-      # Line 23, revision 4
-      assert_tag :tag => 'th', :content => /23/,
-                 :sibling => { :tag => 'td', :child => { :tag => 'a', :content => /4/ } },
-                 :sibling => { :tag => 'td', :content => /jsmith/ },
+      # Line 23, revision 4:def6d2f1254a
+      assert_tag :tag => 'th',
+                 :content => '23',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                         :tag => 'td',
+                         :attributes => { :class => 'revision' },
+                         :child => { :tag => 'a', :content => '4:def6d2f1254a' }
+                       }
+      assert_tag :tag => 'th',
+                 :content => '23',
+                 :attributes => { :class => 'line-num' },
+                 :sibling =>
+                       {
+                          :tag     => 'td'    ,
+                          :content => 'jsmith' ,
+                          :attributes => { :class   => 'author' },
+                        }
+      assert_tag :tag => 'th',
+                 :content => '23',
+                 :attributes => { :class => 'line-num' },
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
+
+    def test_empty_revision
+      @repository.fetch_changesets
+      @repository.reload
+      ['', ' ', nil].each do |r|
+        get :revision, :id => 1, :rev => r
+        assert_response 500
+        assert_error_tag :content => /was not found/
+      end
+    end
   else
     puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
     def test_fake; assert true end