Mercurial > kallithea
diff rhodecode/tests/vcs/test_repository.py @ 2451:402a96fcfa22 beta
Added vcs testsuite for better integration tests + added fetching
of two new repos into test env for rhodecode
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 13 Jun 2012 23:27:33 +0200 |
parents | |
children | 32471bd1f4ee |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/tests/vcs/test_repository.py Wed Jun 13 23:27:33 2012 +0200 @@ -0,0 +1,215 @@ +from __future__ import with_statement +import datetime +from base import BackendTestMixin +from conf import SCM_TESTS +from conf import TEST_USER_CONFIG_FILE +from rhodecode.lib.vcs.nodes import FileNode +from rhodecode.lib.vcs.utils.compat import unittest +from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError + + +class RepositoryBaseTest(BackendTestMixin): + recreate_repo_per_test = False + + @classmethod + def _get_commits(cls): + return super(RepositoryBaseTest, cls)._get_commits()[:1] + + def test_get_config_value(self): + self.assertEqual(self.repo.get_config_value('universal', 'foo', + TEST_USER_CONFIG_FILE), 'bar') + + def test_get_config_value_defaults_to_None(self): + self.assertEqual(self.repo.get_config_value('universal', 'nonexist', + TEST_USER_CONFIG_FILE), None) + + def test_get_user_name(self): + self.assertEqual(self.repo.get_user_name(TEST_USER_CONFIG_FILE), + 'Foo Bar') + + def test_get_user_email(self): + self.assertEqual(self.repo.get_user_email(TEST_USER_CONFIG_FILE), + 'foo.bar@example.com') + + + +class RepositoryGetDiffTest(BackendTestMixin): + + @classmethod + def _get_commits(cls): + commits = [ + { + 'message': 'Initial commit', + 'author': 'Joe Doe <joe.doe@example.com>', + 'date': datetime.datetime(2010, 1, 1, 20), + 'added': [ + FileNode('foobar', content='foobar'), + FileNode('foobar2', content='foobar2'), + ], + }, + { + 'message': 'Changed foobar, added foobar3', + 'author': 'Jane Doe <jane.doe@example.com>', + 'date': datetime.datetime(2010, 1, 1, 21), + 'added': [ + FileNode('foobar3', content='foobar3'), + ], + 'changed': [ + FileNode('foobar', 'FOOBAR'), + ], + }, + { + 'message': 'Removed foobar, changed foobar3', + 'author': 'Jane Doe <jane.doe@example.com>', + 'date': datetime.datetime(2010, 1, 1, 22), + 'changed': [ + FileNode('foobar3', content='FOOBAR\nFOOBAR\nFOOBAR\n'), + ], + 'removed': [FileNode('foobar')], + }, + ] + return commits + + def test_raise_for_wrong(self): + with self.assertRaises(ChangesetDoesNotExistError): + self.repo.get_diff('a' * 40, 'b' * 40) + +class GitRepositoryGetDiffTest(RepositoryGetDiffTest, unittest.TestCase): + backend_alias = 'git' + + def test_initial_commit_diff(self): + initial_rev = self.repo.revisions[0] + self.assertEqual(self.repo.get_diff(self.repo.EMPTY_CHANGESET, initial_rev), '''diff --git a/foobar b/foobar +new file mode 100644 +index 0000000..f6ea049 +--- /dev/null ++++ b/foobar +@@ -0,0 +1 @@ ++foobar +\ No newline at end of file +diff --git a/foobar2 b/foobar2 +new file mode 100644 +index 0000000..e8c9d6b +--- /dev/null ++++ b/foobar2 +@@ -0,0 +1 @@ ++foobar2 +\ No newline at end of file +''') + + def test_second_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[0], revs[1]), '''diff --git a/foobar b/foobar +index f6ea049..389865b 100644 +--- a/foobar ++++ b/foobar +@@ -1 +1 @@ +-foobar +\ No newline at end of file ++FOOBAR +\ No newline at end of file +diff --git a/foobar3 b/foobar3 +new file mode 100644 +index 0000000..c11c37d +--- /dev/null ++++ b/foobar3 +@@ -0,0 +1 @@ ++foobar3 +\ No newline at end of file +''') + + def test_third_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[1], revs[2]), '''diff --git a/foobar b/foobar +deleted file mode 100644 +index 389865b..0000000 +--- a/foobar ++++ /dev/null +@@ -1 +0,0 @@ +-FOOBAR +\ No newline at end of file +diff --git a/foobar3 b/foobar3 +index c11c37d..f932447 100644 +--- a/foobar3 ++++ b/foobar3 +@@ -1 +1,3 @@ +-foobar3 +\ No newline at end of file ++FOOBAR ++FOOBAR ++FOOBAR +''') + + +class HgRepositoryGetDiffTest(RepositoryGetDiffTest, unittest.TestCase): + backend_alias = 'hg' + + def test_initial_commit_diff(self): + initial_rev = self.repo.revisions[0] + self.assertEqual(self.repo.get_diff(self.repo.EMPTY_CHANGESET, initial_rev), '''diff --git a/foobar b/foobar +new file mode 100755 +--- /dev/null ++++ b/foobar +@@ -0,0 +1,1 @@ ++foobar +\ No newline at end of file +diff --git a/foobar2 b/foobar2 +new file mode 100755 +--- /dev/null ++++ b/foobar2 +@@ -0,0 +1,1 @@ ++foobar2 +\ No newline at end of file +''') + + def test_second_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[0], revs[1]), '''diff --git a/foobar b/foobar +--- a/foobar ++++ b/foobar +@@ -1,1 +1,1 @@ +-foobar +\ No newline at end of file ++FOOBAR +\ No newline at end of file +diff --git a/foobar3 b/foobar3 +new file mode 100755 +--- /dev/null ++++ b/foobar3 +@@ -0,0 +1,1 @@ ++foobar3 +\ No newline at end of file +''') + + def test_third_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[1], revs[2]), '''diff --git a/foobar b/foobar +deleted file mode 100755 +--- a/foobar ++++ /dev/null +@@ -1,1 +0,0 @@ +-FOOBAR +\ No newline at end of file +diff --git a/foobar3 b/foobar3 +--- a/foobar3 ++++ b/foobar3 +@@ -1,1 +1,3 @@ +-foobar3 +\ No newline at end of file ++FOOBAR ++FOOBAR ++FOOBAR +''') + + +# For each backend create test case class +for alias in SCM_TESTS: + attrs = { + 'backend_alias': alias, + } + cls_name = alias.capitalize() + RepositoryBaseTest.__name__ + bases = (RepositoryBaseTest, unittest.TestCase) + globals()[cls_name] = type(cls_name, bases, attrs) + +if __name__ == '__main__': + unittest.main()