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 ', 'date': datetime.datetime(2010, 1, 1, 20), 'added': [ FileNode('foobar', content='foobar'), FileNode('foobar2', content='foobar2'), ], }, { 'message': 'Changed foobar, added foobar3', 'author': 'Jane Doe ', 'date': datetime.datetime(2010, 1, 1, 21), 'added': [ FileNode('foobar3', content='foobar3'), ], 'changed': [ FileNode('foobar', 'FOOBAR'), ], }, { 'message': 'Removed foobar, changed foobar3', 'author': 'Jane Doe ', '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()