from __future__ import with_statement from base import BackendTestMixin from conf import SCM_TESTS from rhodecode.lib.vcs.exceptions import TagAlreadyExistError from rhodecode.lib.vcs.exceptions import TagDoesNotExistError from rhodecode.lib.vcs.utils.compat import unittest class TagsTestCaseMixin(BackendTestMixin): def test_new_tag(self): tip = self.repo.get_changeset() tagsize = len(self.repo.tags) tag = self.repo.tag('last-commit', 'joe', tip.raw_id) self.assertEqual(len(self.repo.tags), tagsize + 1) for top, dirs, files in tip.walk(): self.assertEqual(top, tag.get_node(top.path)) def test_tag_already_exist(self): tip = self.repo.get_changeset() self.repo.tag('last-commit', 'joe', tip.raw_id) self.assertRaises(TagAlreadyExistError, self.repo.tag, 'last-commit', 'joe', tip.raw_id) chset = self.repo.get_changeset(0) self.assertRaises(TagAlreadyExistError, self.repo.tag, 'last-commit', 'jane', chset.raw_id) def test_remove_tag(self): tip = self.repo.get_changeset() self.repo.tag('last-commit', 'joe', tip.raw_id) tagsize = len(self.repo.tags) self.repo.remove_tag('last-commit', user='evil joe') self.assertEqual(len(self.repo.tags), tagsize - 1) def test_remove_tag_which_does_not_exist(self): self.assertRaises(TagDoesNotExistError, self.repo.remove_tag, 'last-commit', user='evil joe') def test_name_with_slash(self): self.repo.tag('19/10/11', 'joe') self.assertTrue('19/10/11' in self.repo.tags) self.repo.tag('11', 'joe') self.assertTrue('11' in self.repo.tags) # For each backend create test case class for alias in SCM_TESTS: attrs = { 'backend_alias': alias, } cls_name = ''.join(('%s tags test' % alias).title().split()) bases = (TagsTestCaseMixin, unittest.TestCase) globals()[cls_name] = type(cls_name, bases, attrs) if __name__ == '__main__': unittest.main()