diff --git a/rhodecode/tests/vcs/test_workdirs.py b/rhodecode/tests/vcs/test_workdirs.py new file mode 100644 --- /dev/null +++ b/rhodecode/tests/vcs/test_workdirs.py @@ -0,0 +1,90 @@ +from __future__ import with_statement + +import datetime +from rhodecode.lib.vcs.nodes import FileNode +from rhodecode.lib.vcs.utils.compat import unittest +from base import BackendTestMixin +from conf import SCM_TESTS + + +class WorkdirTestCaseMixin(BackendTestMixin): + + @classmethod + def _get_commits(cls): + commits = [ + { + 'message': u'Initial commit', + 'author': u'Joe Doe ', + 'date': datetime.datetime(2010, 1, 1, 20), + 'added': [ + FileNode('foobar', content='Foobar'), + FileNode('foobar2', content='Foobar II'), + FileNode('foo/bar/baz', content='baz here!'), + ], + }, + { + 'message': u'Changes...', + 'author': u'Jane Doe ', + 'date': datetime.datetime(2010, 1, 1, 21), + 'added': [ + FileNode('some/new.txt', content='news...'), + ], + 'changed': [ + FileNode('foobar', 'Foobar I'), + ], + 'removed': [], + }, + ] + return commits + + def test_get_branch_for_default_branch(self): + self.assertEqual(self.repo.workdir.get_branch(), + self.repo.DEFAULT_BRANCH_NAME) + + def test_get_branch_after_adding_one(self): + self.imc.add(FileNode('docs/index.txt', + content='Documentation\n')) + self.imc.commit( + message=u'New branch: foobar', + author=u'joe', + branch='foobar', + ) + + def test_get_changeset(self): + self.imc.add(FileNode('docs/index.txt', + content='Documentation\n')) + head = self.imc.commit( + message=u'New branch: foobar', + author=u'joe', + branch='foobar', + ) + self.assertEqual(self.repo.workdir.get_changeset(), head) + + def test_checkout_branch(self): + from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError + # first, 'foobranch' does not exist. + self.assertRaises(BranchDoesNotExistError, self.repo.workdir.checkout_branch, + branch='foobranch') + # create new branch 'foobranch'. + self.imc.add(FileNode('file1', content='blah')) + self.imc.commit(message=u'asd', author=u'john', branch='foobranch') + # go back to the default branch + self.repo.workdir.checkout_branch() + self.assertEqual(self.repo.workdir.get_branch(), self.backend_class.DEFAULT_BRANCH_NAME) + # checkout 'foobranch' + self.repo.workdir.checkout_branch('foobranch') + self.assertEqual(self.repo.workdir.get_branch(), 'foobranch') + + +# For each backend create test case class +for alias in SCM_TESTS: + attrs = { + 'backend_alias': alias, + } + cls_name = ''.join(('%s branch test' % alias).title().split()) + bases = (WorkdirTestCaseMixin, unittest.TestCase) + globals()[cls_name] = type(cls_name, bases, attrs) + + +if __name__ == '__main__': + unittest.main()