summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2009-08-15 22:41:40 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2009-08-15 22:41:40 +0000
commitc28b044d6802559a9a2a07af1b7661a1122e5f48 (patch)
tree393dda01ed0fcd20ed98b2154f471a3a33440644 /test
parenta39bc8f1f4ec7c3b3ce2f27a02467cf497cef03a (diff)
downloadredmine-c28b044d6802559a9a2a07af1b7661a1122e5f48.tar.gz
redmine-c28b044d6802559a9a2a07af1b7661a1122e5f48.zip
Added branch and tag support to the git repository viewer. (#1406)
Many thanks to Adam Soltys and everyone else who tested this patch. * Updated git test repository so it has a branch with some differences from the master branch * Moved redmine diff class into a module so as not to clash with diff-lcs gem which is required by grit * Find changesets from all branches, not just master * Got revision browsing working * Got file actions working properly * Allow browsing by short form of commit identifier * Added a method to retrieve repository branches * Allow browsing by branch names as well as commit numbers * Handle the case where a git repository has no master branch * Expand revision box and handle finding revisions by first 8 characters * Added branches dropdown to repository show page * Combined repository browse and show into a single action. Moved branch/revision navigation into a partial. * Renamed partial navigation -> breadcrumbs * Made it so latest revisions list uses branch and path context * Preserve current path when changing branch or revision * Perform slightly more graceful error handling in the case of invalid repository URLs * Allow branch names to contain periods * Allow dashes in branch names * Sort branches by name * Adding tags dropdown * Need to disable both branches and tags dropdowns before submitting revision form * Support underscores in revision (branch/tag) names * Making file history sensitive to current branch/tag/revision, adding common navigation to changes page * Updated translation files to include labels for 'branch', 'tag', and 'view all revisions' * Reenable fields after submit so they don't look disabled and don't stay disabled on browser back button * Instead of dashes just use empty string for default dropdown value * Individual entry views now sport the upgraded revision navigation * Don't display dropdowns with no entries * Consider all revisions when doing initial load * Fixed bug grabbing changesets. Thanks to Bernhard Furtmueller for catching. * Always check the entire log to find new revisions, rather than trying to go forward from the latest known one * Added some cleverness to avoid selecting the whole changesets table any time someone views the repository root * File copies and renames being detected properly * Return gracefully if no revisions are found in the git log * Applied patch from Babar Le Lapin to improve Windows compatibility git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2840 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test')
-rw-r--r--test/fixtures/repositories/git_repository.tar.gzbin12445 -> 17716 bytes
-rw-r--r--test/functional/repositories_bazaar_controller_test.rb14
-rw-r--r--test/functional/repositories_cvs_controller_test.rb14
-rw-r--r--test/functional/repositories_darcs_controller_test.rb12
-rw-r--r--test/functional/repositories_git_controller_test.rb41
-rw-r--r--test/functional/repositories_mercurial_controller_test.rb20
-rw-r--r--test/functional/repositories_subversion_controller_test.rb14
-rw-r--r--test/unit/git_adapter_test.rb22
-rw-r--r--test/unit/repository_git_test.rb8
9 files changed, 91 insertions, 54 deletions
diff --git a/test/fixtures/repositories/git_repository.tar.gz b/test/fixtures/repositories/git_repository.tar.gz
index 84de88aa7..48966da30 100644
--- a/test/fixtures/repositories/git_repository.tar.gz
+++ b/test/fixtures/repositories/git_repository.tar.gz
Binary files differ
diff --git a/test/functional/repositories_bazaar_controller_test.rb b/test/functional/repositories_bazaar_controller_test.rb
index b1787a538..98aa2369f 100644
--- a/test/functional/repositories_bazaar_controller_test.rb
+++ b/test/functional/repositories_bazaar_controller_test.rb
@@ -45,9 +45,9 @@ class RepositoriesBazaarControllerTest < Test::Unit::TestCase
end
def test_browse_root
- get :browse, :id => 3
+ get :show, :id => 3
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal 2, assigns(:entries).size
assert assigns(:entries).detect {|e| e.name == 'directory' && e.kind == 'dir'}
@@ -55,9 +55,9 @@ class RepositoriesBazaarControllerTest < Test::Unit::TestCase
end
def test_browse_directory
- get :browse, :id => 3, :path => ['directory']
+ get :show, :id => 3, :path => ['directory']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['doc-ls.txt', 'document.txt', 'edit.png'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
@@ -67,9 +67,9 @@ class RepositoriesBazaarControllerTest < Test::Unit::TestCase
end
def test_browse_at_given_revision
- get :browse, :id => 3, :path => [], :rev => 3
+ get :show, :id => 3, :path => [], :rev => 3
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['directory', 'doc-deleted.txt', 'doc-ls.txt', 'doc-mkdir.txt'], assigns(:entries).collect(&:name)
end
@@ -102,7 +102,7 @@ class RepositoriesBazaarControllerTest < Test::Unit::TestCase
def test_directory_entry
get :entry, :id => 3, :path => ['directory']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entry)
assert_equal 'directory', assigns(:entry).name
end
diff --git a/test/functional/repositories_cvs_controller_test.rb b/test/functional/repositories_cvs_controller_test.rb
index 2207d6ab6..c728bf362 100644
--- a/test/functional/repositories_cvs_controller_test.rb
+++ b/test/functional/repositories_cvs_controller_test.rb
@@ -51,9 +51,9 @@ class RepositoriesCvsControllerTest < Test::Unit::TestCase
end
def test_browse_root
- get :browse, :id => 1
+ get :show, :id => 1
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal 3, assigns(:entries).size
@@ -65,9 +65,9 @@ class RepositoriesCvsControllerTest < Test::Unit::TestCase
end
def test_browse_directory
- get :browse, :id => 1, :path => ['images']
+ get :show, :id => 1, :path => ['images']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
@@ -78,9 +78,9 @@ class RepositoriesCvsControllerTest < Test::Unit::TestCase
def test_browse_at_given_revision
Project.find(1).repository.fetch_changesets
- get :browse, :id => 1, :path => ['images'], :rev => 1
+ get :show, :id => 1, :path => ['images'], :rev => 1
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
end
@@ -118,7 +118,7 @@ class RepositoriesCvsControllerTest < Test::Unit::TestCase
def test_directory_entry
get :entry, :id => 1, :path => ['sources']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entry)
assert_equal 'sources', assigns(:entry).name
end
diff --git a/test/functional/repositories_darcs_controller_test.rb b/test/functional/repositories_darcs_controller_test.rb
index 8f1c7df98..3f841e9a1 100644
--- a/test/functional/repositories_darcs_controller_test.rb
+++ b/test/functional/repositories_darcs_controller_test.rb
@@ -45,9 +45,9 @@ class RepositoriesDarcsControllerTest < Test::Unit::TestCase
end
def test_browse_root
- get :browse, :id => 3
+ get :show, :id => 3
assert_response :success
- assert_template 'browse'
+ 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'}
@@ -56,9 +56,9 @@ class RepositoriesDarcsControllerTest < Test::Unit::TestCase
end
def test_browse_directory
- get :browse, :id => 3, :path => ['images']
+ get :show, :id => 3, :path => ['images']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
@@ -69,9 +69,9 @@ class RepositoriesDarcsControllerTest < Test::Unit::TestCase
def test_browse_at_given_revision
Project.find(3).repository.fetch_changesets
- get :browse, :id => 3, :path => ['images'], :rev => 1
+ get :show, :id => 3, :path => ['images'], :rev => 1
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
end
diff --git a/test/functional/repositories_git_controller_test.rb b/test/functional/repositories_git_controller_test.rb
index 7f63ea3a9..6c2502f51 100644
--- a/test/functional/repositories_git_controller_test.rb
+++ b/test/functional/repositories_git_controller_test.rb
@@ -46,22 +46,37 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
end
def test_browse_root
- get :browse, :id => 3
+ get :show, :id => 3
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
- assert_equal 3, assigns(:entries).size
+ assert_equal 6, 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 == 'copied_README' && e.kind == 'file'}
+ assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
+ assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
end
-
+
+ def test_browse_branch
+ get :show, :id => 3, :rev => 'test_branch'
+ assert_response :success
+ assert_template 'show'
+ assert_not_nil assigns(:entries)
+ 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 == 'test.txt' && e.kind == 'file'}
+ end
+
def test_browse_directory
- get :browse, :id => 3, :path => ['images']
+ get :show, :id => 3, :path => ['images']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
- assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
+ assert_equal ['edit.png'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
assert_not_nil entry
assert_equal 'file', entry.kind
@@ -69,9 +84,9 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
end
def test_browse_at_given_revision
- get :browse, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
+ get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
end
@@ -89,7 +104,7 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
assert_template 'entry'
# Line 19
assert_tag :tag => 'th',
- :content => /10/,
+ :content => /11/,
:attributes => { :class => /line-num/ },
:sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
end
@@ -104,7 +119,7 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
def test_directory_entry
get :entry, :id => 3, :path => ['sources']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entry)
assert_equal 'sources', assigns(:entry).name
end
@@ -127,14 +142,14 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
assert_response :success
assert_template 'annotate'
# Line 23, changeset 2f9c0091
- assert_tag :tag => 'th', :content => /23/,
+ assert_tag :tag => 'th', :content => /24/,
:sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
:sibling => { :tag => 'td', :content => /jsmith/ },
:sibling => { :tag => 'td', :content => /watcher =/ }
end
def test_annotate_binary_file
- get :annotate, :id => 3, :path => ['images', 'delete.png']
+ get :annotate, :id => 3, :path => ['images', 'edit.png']
assert_response 500
assert_tag :tag => 'div', :attributes => { :class => /error/ },
:content => /can not be annotated/
diff --git a/test/functional/repositories_mercurial_controller_test.rb b/test/functional/repositories_mercurial_controller_test.rb
index 53cbedd00..ec2526550 100644
--- a/test/functional/repositories_mercurial_controller_test.rb
+++ b/test/functional/repositories_mercurial_controller_test.rb
@@ -44,10 +44,10 @@ class RepositoriesMercurialControllerTest < Test::Unit::TestCase
assert_not_nil assigns(:changesets)
end
- def test_browse_root
- get :browse, :id => 3
+ def test_show_root
+ get :show, :id => 3
assert_response :success
- assert_template 'browse'
+ 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'}
@@ -55,10 +55,10 @@ class RepositoriesMercurialControllerTest < Test::Unit::TestCase
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
end
- def test_browse_directory
- get :browse, :id => 3, :path => ['images']
+ def test_show_directory
+ get :show, :id => 3, :path => ['images']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
@@ -67,10 +67,10 @@ class RepositoriesMercurialControllerTest < Test::Unit::TestCase
assert_equal 'images/edit.png', entry.path
end
- def test_browse_at_given_revision
- get :browse, :id => 3, :path => ['images'], :rev => 0
+ def test_show_at_given_revision
+ get :show, :id => 3, :path => ['images'], :rev => 0
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
end
@@ -103,7 +103,7 @@ class RepositoriesMercurialControllerTest < Test::Unit::TestCase
def test_directory_entry
get :entry, :id => 3, :path => ['sources']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entry)
assert_equal 'sources', assigns(:entry).name
end
diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb
index e31094e7b..ac1438572 100644
--- a/test/functional/repositories_subversion_controller_test.rb
+++ b/test/functional/repositories_subversion_controller_test.rb
@@ -47,18 +47,18 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
end
def test_browse_root
- get :browse, :id => 1
+ get :show, :id => 1
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
assert_equal 'dir', entry.kind
end
def test_browse_directory
- get :browse, :id => 1, :path => ['subversion_test']
+ get :show, :id => 1, :path => ['subversion_test']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['folder', '.project', 'helloworld.c', 'textfile.txt'], assigns(:entries).collect(&:name)
entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
@@ -68,9 +68,9 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
end
def test_browse_at_given_revision
- get :browse, :id => 1, :path => ['subversion_test'], :rev => 4
+ get :show, :id => 1, :path => ['subversion_test'], :rev => 4
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entries)
assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'], assigns(:entries).collect(&:name)
end
@@ -131,7 +131,7 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
def test_directory_entry
get :entry, :id => 1, :path => ['subversion_test', 'folder']
assert_response :success
- assert_template 'browse'
+ assert_template 'show'
assert_not_nil assigns(:entry)
assert_equal 'folder', assigns(:entry).name
end
diff --git a/test/unit/git_adapter_test.rb b/test/unit/git_adapter_test.rb
new file mode 100644
index 000000000..50bded062
--- /dev/null
+++ b/test/unit/git_adapter_test.rb
@@ -0,0 +1,22 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class GitAdapterTest < Test::Unit::TestCase
+ REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
+
+ if File.directory?(REPOSITORY_PATH)
+ def setup
+ @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+ end
+
+ def test_branches
+ assert_equal @adapter.branches, ['master', 'test_branch']
+ end
+
+ def test_getting_all_revisions
+ assert_equal 12, @adapter.revisions('',nil,nil,:all => true).length
+ end
+ else
+ puts "Git test repository NOT FOUND. Skipping unit tests !!!"
+ def test_fake; assert true end
+ end
+end
diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb
index bc997b96c..382774305 100644
--- a/test/unit/repository_git_test.rb
+++ b/test/unit/repository_git_test.rb
@@ -34,8 +34,8 @@ class RepositoryGitTest < Test::Unit::TestCase
@repository.fetch_changesets
@repository.reload
- assert_equal 6, @repository.changesets.count
- assert_equal 11, @repository.changes.count
+ assert_equal 12, @repository.changesets.count
+ assert_equal 20, @repository.changes.count
commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
@@ -57,10 +57,10 @@ class RepositoryGitTest < Test::Unit::TestCase
# Remove the 3 latest changesets
@repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
@repository.reload
- assert_equal 3, @repository.changesets.count
+ assert_equal 9, @repository.changesets.count
@repository.fetch_changesets
- assert_equal 6, @repository.changesets.count
+ assert_equal 12, @repository.changesets.count
end
else
puts "Git test repository NOT FOUND. Skipping unit tests !!!"