changeset 2471:60bda63b64f0 beta

Initial version of landing revisions ref #483 - fixed relevant tests for creation of repo - added some tests for git
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 14 Jun 2012 23:19:26 +0200
parents ed71ce61ef58
children e70ebd6db3fa
files rhodecode/controllers/admin/repos.py rhodecode/controllers/admin/settings.py rhodecode/lib/utils.py rhodecode/model/db.py rhodecode/model/forms.py rhodecode/model/scm.py rhodecode/templates/admin/repos/repo_add_base.html rhodecode/templates/admin/repos/repo_edit.html rhodecode/tests/__init__.py rhodecode/tests/functional/test_admin_repos.py rhodecode/tests/functional/test_forks.py rhodecode/tests/functional/test_search.py rhodecode/tests/functional/test_summary.py rhodecode/tests/test_models.py rhodecode/tests/vcs/__init__.py rhodecode/tests/vcs/conf.py rhodecode/tests/vcs/test_hg.py rhodecode/tests/vcs_test_git.tar.gz rhodecode/tests/vcs_test_hg.tar.gz
diffstat 19 files changed, 348 insertions(+), 179 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/controllers/admin/repos.py	Thu Jun 14 23:19:26 2012 +0200
@@ -70,6 +70,7 @@
         repo_model = RepoModel()
         c.users_array = repo_model.get_users_js()
         c.users_groups_array = repo_model.get_users_groups_js()
+        c.landing_revs = ScmModel().get_repo_landing_revs()
 
     def __load_data(self, repo_name=None):
         """
@@ -91,6 +92,7 @@
 
             return redirect(url('repos'))
 
+        c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
         c.default_user_id = User.get_by_username('default').user_id
         c.in_public_journal = UserFollowing.query()\
             .filter(UserFollowing.user_id == c.default_user_id)\
@@ -116,6 +118,7 @@
         c.repos_list = [('', _('--REMOVE FORK--'))]
         c.repos_list += [(x.repo_id, x.repo_name) for x in
                    Repository.query().order_by(Repository.repo_name).all()]
+
         return defaults
 
     @HasPermissionAllDecorator('hg.admin')
--- a/rhodecode/controllers/admin/settings.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/controllers/admin/settings.py	Thu Jun 14 23:19:26 2012 +0200
@@ -397,6 +397,7 @@
 
         c.repo_groups = RepoGroup.groups_choices()
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
+        c.landing_revs = ScmModel().get_repo_landing_revs()
 
         new_repo = request.GET.get('repo', '')
         c.new_repo = repo_name_slug(new_repo)
--- a/rhodecode/lib/utils.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/lib/utils.py	Thu Jun 14 23:19:26 2012 +0200
@@ -448,7 +448,8 @@
              'description': repo.description \
                 if repo.description != 'unknown' else '%s repository' % name,
              'private': False,
-             'group_id': getattr(group, 'group_id', None)
+             'group_id': getattr(group, 'group_id', None),
+             'landing_rev': repo.DEFAULT_BRANCH_NAME
             }
             rm.create(form_data, user, just_db=True)
     sa.commit()
@@ -558,7 +559,7 @@
     install test repository into tmp dir
     """
     from rhodecode.lib.db_manage import DbManage
-    from rhodecode.tests import HG_REPO, TESTS_TMP_PATH
+    from rhodecode.tests import HG_REPO, GIT_REPO, TESTS_TMP_PATH
 
     # PART ONE create db
     dbconf = config['sqlalchemy.db1.url']
@@ -593,12 +594,17 @@
         log.debug('remove %s' % data_path)
         shutil.rmtree(data_path)
 
-    #CREATE DEFAULT HG REPOSITORY
+    #CREATE DEFAULT TEST REPOS
     cur_dir = dn(dn(abspath(__file__)))
     tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test_hg.tar.gz"))
     tar.extractall(jn(TESTS_TMP_PATH, HG_REPO))
     tar.close()
 
+    cur_dir = dn(dn(abspath(__file__)))
+    tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test_git.tar.gz"))
+    tar.extractall(jn(TESTS_TMP_PATH, GIT_REPO))
+    tar.close()
+
     #LOAD VCS test stuff
     from rhodecode.tests.vcs import setup_package
     setup_package()
--- a/rhodecode/model/db.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/model/db.py	Thu Jun 14 23:19:26 2012 +0200
@@ -295,7 +295,7 @@
     password = Column("password", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     active = Column("active", Boolean(), nullable=True, unique=None, default=None)
     admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
-    name = Column("name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    name = Column("firstname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     lastname = Column("lastname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     _email = Column("email", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
@@ -500,13 +500,14 @@
     repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
     repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
     clone_uri = Column("clone_uri", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
-    repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
+    repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
     private = Column("private", Boolean(), nullable=True, unique=None, default=None)
     enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
     enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
     description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
+    landing_rev = Column("landing_revision", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
 
     fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
     group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
@@ -523,7 +524,7 @@
     logs = relationship('UserLog')
 
     def __unicode__(self):
-        return u"<%s('%s:%s')>" % (self.__class__.__name__,self.repo_id,
+        return u"<%s('%s:%s')>" % (self.__class__.__name__, self.repo_id,
                                    self.repo_name)
 
     @classmethod
--- a/rhodecode/model/forms.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/model/forms.py	Thu Jun 14 23:19:26 2012 +0200
@@ -662,10 +662,11 @@
         clone_uri = All(UnicodeString(strip=True, min=1, not_empty=False))
         repo_group = OneOf(repo_groups, hideList=True)
         repo_type = OneOf(supported_backends)
-        description = UnicodeString(strip=True, min=1, not_empty=True)
+        description = UnicodeString(strip=True, min=1, not_empty=False)
         private = StringBoolean(if_missing=False)
         enable_statistics = StringBoolean(if_missing=False)
         enable_downloads = StringBoolean(if_missing=False)
+        landing_rev = UnicodeString(strip=True, min=1, not_empty=True)
 
         if edit:
             #this is repo owner
@@ -677,8 +678,8 @@
     return _RepoForm
 
 
-def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
-                 repo_groups=[]):
+def RepoForkForm(edit=False, old_data={},
+                 supported_backends=BACKENDS.keys(), repo_groups=[]):
     class _RepoForkForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
@@ -696,8 +697,8 @@
     return _RepoForkForm
 
 
-def RepoSettingsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
-                     repo_groups=[]):
+def RepoSettingsForm(edit=False, old_data={},
+                     supported_backends=BACKENDS.keys(), repo_groups=[]):
     class _RepoForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
@@ -706,7 +707,7 @@
         description = UnicodeString(strip=True, min=1, not_empty=True)
         repo_group = OneOf(repo_groups, hideList=True)
         private = StringBoolean(if_missing=False)
-
+        landing_rev = UnicodeString(strip=True, min=1, not_empty=True)
         chained_validators = [ValidRepoName(edit, old_data), ValidPerms(),
                               ValidSettings]
     return _RepoForm
--- a/rhodecode/model/scm.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/model/scm.py	Thu Jun 14 23:19:26 2012 +0200
@@ -29,6 +29,7 @@
 import cStringIO
 
 from sqlalchemy import func
+from pylons.i18n.translation import _
 
 from rhodecode.lib.vcs import get_backend
 from rhodecode.lib.vcs.exceptions import RepositoryError
@@ -472,3 +473,33 @@
 
     def get_unread_journal(self):
         return self.sa.query(UserLog).count()
+
+    def get_repo_landing_revs(self, repo=None):
+        """
+        Generates select option with tags branches and bookmarks (for hg only)
+        grouped by type
+
+        :param repo:
+        :type repo:
+        """
+        hist_l = []
+        repo = self.__get_repo(repo)
+        hist_l.append(['tip', _('latest tip')])
+        if not repo:
+            return hist_l
+
+        repo = repo.scm_instance
+        branches_group = ([(k, k) for k, v in
+                           repo.branches.iteritems()], _("Branches"))
+        hist_l.append(branches_group)
+
+        if repo.alias == 'hg':
+            bookmarks_group = ([(k, k) for k, v in
+                                repo.bookmarks.iteritems()], _("Bookmarks"))
+            hist_l.append(bookmarks_group)
+
+        tags_group = ([(k, k) for k, v in
+                       repo.tags.iteritems()], _("Tags"))
+        hist_l.append(tags_group)
+
+        return hist_l
--- a/rhodecode/templates/admin/repos/repo_add_base.html	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/templates/admin/repos/repo_add_base.html	Thu Jun 14 23:19:26 2012 +0200
@@ -42,6 +42,15 @@
                 <span class="help-block">${_('Type of repository to create.')}</span>
             </div>
          </div>
+         <div class="field">
+            <div class="label">
+                <label for="landing_rev">${_('Landing revision')}:</label>
+            </div>
+            <div class="input">
+                ${h.select('landing_rev','',c.landing_revs,class_="medium")}
+                <span class="help-block">${_('Default revision for files page, downloads, whoosh and readme')}</span>
+            </div>
+        </div>           
         <div class="field">
             <div class="label label-textarea">
                 <label for="description">${_('Description')}:</label>
--- a/rhodecode/templates/admin/repos/repo_edit.html	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/templates/admin/repos/repo_edit.html	Thu Jun 14 23:19:26 2012 +0200
@@ -62,6 +62,15 @@
                 </div>
             </div>
             <div class="field">
+                <div class="label">
+                    <label for="landing_rev">${_('Landing revision')}:</label>
+                </div>
+                <div class="input">
+                    ${h.select('landing_rev','',c.landing_revs,class_="medium")}
+                    <span class="help-block">${_('Default revision for files page, downloads, whoosh and readme')}</span>
+                </div>
+            </div>            
+            <div class="field">
                 <div class="label label-textarea">
                     <label for="description">${_('Description')}:</label>
                 </div>
@@ -210,7 +219,7 @@
         </div>
         ${h.end_form()}
 
-        <h3>${_('Set as fork')}</h3>
+        <h3>${_('Set as fork of')}</h3>
         ${h.form(url('repo_as_fork', repo_name=c.repo_info.repo_name),method='put')}
         <div class="form">
            <div class="fields">
@@ -219,7 +228,7 @@
            </div>
                <div class="field" style="border:none;color:#888">
                <ul>
-                    <li>${_('''Manually set this repository as a fork of another''')}</li>
+                    <li>${_('''Manually set this repository as a fork of another from the list''')}</li>
                </ul>
                </div>
         </div>
--- a/rhodecode/tests/__init__.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/__init__.py	Thu Jun 14 23:19:26 2012 +0200
@@ -38,13 +38,14 @@
 log = logging.getLogger(__name__)
 
 __all__ = [
-    'environ', 'url', 'TestController', 'TESTS_TMP_PATH', 'HG_REPO',
-    'GIT_REPO', 'NEW_HG_REPO', 'NEW_GIT_REPO', 'HG_FORK', 'GIT_FORK',
-    'TEST_USER_ADMIN_LOGIN', 'TEST_USER_REGULAR_LOGIN',
+    'environ', 'url', 'get_new_dir', 'TestController', 'TESTS_TMP_PATH',
+    'HG_REPO', 'GIT_REPO', 'NEW_HG_REPO', 'NEW_GIT_REPO', 'HG_FORK',
+    'GIT_FORK', 'TEST_USER_ADMIN_LOGIN', 'TEST_USER_REGULAR_LOGIN',
     'TEST_USER_REGULAR_PASS', 'TEST_USER_REGULAR_EMAIL',
     'TEST_USER_REGULAR2_LOGIN', 'TEST_USER_REGULAR2_PASS',
-    'TEST_USER_REGULAR2_EMAIL', 'TEST_HG_REPO', 'TEST_GIT_REPO',
-    'HG_REMOTE_REPO', 'GIT_REMOTE_REPO', 'SCM_TESTS',
+    'TEST_USER_REGULAR2_EMAIL', 'TEST_HG_REPO', 'TEST_HG_REPO_CLONE',
+    'TEST_HG_REPO_PULL', 'TEST_GIT_REPO', 'TEST_GIT_REPO_CLONE',
+    'TEST_GIT_REPO_PULL', 'HG_REMOTE_REPO', 'GIT_REMOTE_REPO', 'SCM_TESTS',
 ]
 
 # Invoke websetup with the current config file
@@ -83,22 +84,27 @@
 SCM_TESTS = ['hg', 'git']
 uniq_suffix = str(int(time.mktime(datetime.datetime.now().timetuple())))
 
-THIS = os.path.abspath(os.path.dirname(__file__))
+GIT_REMOTE_REPO = 'git://github.com/codeinn/vcs.git'
 
-GIT_REMOTE_REPO = 'git://github.com/codeinn/vcs.git'
 TEST_GIT_REPO = jn(TESTS_TMP_PATH, GIT_REPO)
 TEST_GIT_REPO_CLONE = jn(TESTS_TMP_PATH, 'vcsgitclone%s' % uniq_suffix)
 TEST_GIT_REPO_PULL = jn(TESTS_TMP_PATH, 'vcsgitpull%s' % uniq_suffix)
 
 
 HG_REMOTE_REPO = 'http://bitbucket.org/marcinkuzminski/vcs'
-TEST_HG_REPO = jn(TESTS_TMP_PATH, 'vcs-hg')
+
+TEST_HG_REPO = jn(TESTS_TMP_PATH, HG_REPO)
 TEST_HG_REPO_CLONE = jn(TESTS_TMP_PATH, 'vcshgclone%s' % uniq_suffix)
 TEST_HG_REPO_PULL = jn(TESTS_TMP_PATH, 'vcshgpull%s' % uniq_suffix)
 
 TEST_DIR = tempfile.gettempdir()
 TEST_REPO_PREFIX = 'vcs-test'
 
+# cached repos if any !
+# comment out to get some other repos from bb or github
+GIT_REMOTE_REPO = jn(TESTS_TMP_PATH, GIT_REPO)
+HG_REMOTE_REPO = jn(TESTS_TMP_PATH, HG_REPO)
+
 
 def get_new_dir(title):
     """
@@ -114,12 +120,6 @@
     return get_normalized_path(path)
 
 
-PACKAGE_DIR = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..'))
-
-TEST_USER_CONFIG_FILE = jn(THIS, 'aconfig')
-
-
 class TestController(TestCase):
 
     def __init__(self, *args, **kwargs):
--- a/rhodecode/tests/functional/test_admin_repos.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/functional/test_admin_repos.py	Thu Jun 14 23:19:26 2012 +0200
@@ -6,6 +6,7 @@
 from rhodecode.model.db import Repository
 from rhodecode.tests import *
 
+
 class TestAdminReposController(TestController):
 
     def __make_repo(self):
@@ -24,17 +25,19 @@
         repo_name = NEW_HG_REPO
         description = 'description for newly created repo'
         private = False
-        response = self.app.post(url('repos'), {'repo_name':repo_name,
-                                                'repo_type':'hg',
-                                                'clone_uri':'',
-                                                'repo_group':'',
-                                                'description':description,
-                                                'private':private})
-        self.checkSessionFlash(response, 'created repository %s' % (repo_name))
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'hg',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
+        self.checkSessionFlash(response,
+                               'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository).filter(Repository.repo_name ==
-                                                    repo_name).one()
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
         self.assertEqual(new_repo.description, description)
@@ -42,15 +45,13 @@
         #test if repository is visible in the list ?
         response = response.follow()
 
-        self.assertTrue(repo_name in response.body)
-
+        response.mustcontain(repo_name)
 
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
         except:
-            self.fail('no repo in filesystem')
-
+            self.fail('no repo %s in filesystem' % repo_name)
 
     def test_create_hg_non_ascii(self):
         self.log_user()
@@ -60,18 +61,19 @@
         description = 'description for newly created repo' + non_ascii
         description_unicode = description.decode('utf8')
         private = False
-        response = self.app.post(url('repos'), {'repo_name':repo_name,
-                                                'repo_type':'hg',
-                                                'clone_uri':'',
-                                                'repo_group':'',
-                                                'description':description,
-                                                'private':private})
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'hg',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
         self.checkSessionFlash(response,
                                'created repository %s' % (repo_name_unicode))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository).filter(Repository.repo_name ==
-                                                repo_name_unicode).one()
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name_unicode).one()
 
         self.assertEqual(new_repo.repo_name, repo_name_unicode)
         self.assertEqual(new_repo.description, description_unicode)
@@ -79,52 +81,86 @@
         #test if repository is visible in the list ?
         response = response.follow()
 
-        self.assertTrue(repo_name in response.body)
+        response.mustcontain(repo_name)
 
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
         except:
-            self.fail('no repo in filesystem')
-
+            self.fail('no repo %s in filesystem' % repo_name)
 
     def test_create_hg_in_group(self):
         #TODO: write test !
         pass
 
     def test_create_git(self):
-        return
         self.log_user()
         repo_name = NEW_GIT_REPO
         description = 'description for newly created repo'
         private = False
-        response = self.app.post(url('repos'), {'repo_name':repo_name,
-                                                'repo_type':'git',
-                                                'clone_uri':'',
-                                                'repo_group':'',
-                                                'description':description,
-                                                'private':private})
-
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'git',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
+        self.checkSessionFlash(response,
+                               'created repository %s' % (repo_name))
 
-        #test if we have a message for that repository
-        assert '''created repository %s''' % (repo_name) in response.session['flash'][0], 'No flash message about new repo'
+        #test if the repo was created in the database
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).one()
 
-        #test if the fork was created in the database
-        new_repo = self.Session.query(Repository).filter(Repository.repo_name == repo_name).one()
-
-        assert new_repo.repo_name == repo_name, 'wrong name of repo name in db'
-        assert new_repo.description == description, 'wrong description'
+        self.assertEqual(new_repo.repo_name, repo_name)
+        self.assertEqual(new_repo.description, description)
 
         #test if repository is visible in the list ?
         response = response.follow()
 
-        assert repo_name in response.body, 'missing new repo from the main repos list'
+        response.mustcontain(repo_name)
 
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
         except:
-            assert False , 'no repo in filesystem'
+            self.fail('no repo %s in filesystem' % repo_name)
+
+    def test_create_git_non_ascii(self):
+        self.log_user()
+        non_ascii = "ąęł"
+        repo_name = "%s%s" % (NEW_GIT_REPO, non_ascii)
+        repo_name_unicode = repo_name.decode('utf8')
+        description = 'description for newly created repo' + non_ascii
+        description_unicode = description.decode('utf8')
+        private = False
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'git',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
+        self.checkSessionFlash(response,
+                               'created repository %s' % (repo_name_unicode))
+
+        #test if the repo was created in the database
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name_unicode).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name_unicode)
+        self.assertEqual(new_repo.description, description_unicode)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
+        except:
+            self.fail('no repo %s in filesystem' % repo_name)
 
     def test_new(self):
         self.log_user()
@@ -140,27 +176,24 @@
         response = self.app.post(url('repo', repo_name=HG_REPO),
                                  params=dict(_method='put'))
 
-    def test_delete(self):
+    def test_delete_hg(self):
         self.log_user()
         repo_name = 'vcs_test_new_to_delete'
         description = 'description for newly created repo'
         private = False
-
-        response = self.app.post(url('repos'), {'repo_name':repo_name,
-                                                'repo_type':'hg',
-                                                'clone_uri':'',
-                                                'repo_group':'',
-                                                'description':description,
-                                                'private':private})
-        self.assertTrue('flash' in response.session)
-
-        #test if we have a message for that repository
-        self.assertTrue('''created repository %s''' % (repo_name) in
-                        response.session['flash'][0])
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'hg',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
+        self.checkSessionFlash(response,
+                               'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository).filter(Repository.repo_name ==
-                                                    repo_name).one()
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
         self.assertEqual(new_repo.description, description)
@@ -168,8 +201,13 @@
         #test if repository is visible in the list ?
         response = response.follow()
 
-        self.assertTrue(repo_name in response.body)
+        response.mustcontain(repo_name)
 
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
+        except:
+            self.fail('no repo %s in filesystem' % repo_name)
 
         response = self.app.delete(url('repo', repo_name=repo_name))
 
@@ -179,32 +217,79 @@
         response.follow()
 
         #check if repo was deleted from db
-        deleted_repo = self.Session.query(Repository).filter(Repository.repo_name
-                                                        == repo_name).scalar()
+        deleted_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).scalar()
 
         self.assertEqual(deleted_repo, None)
 
+        self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
+                                  False)
+
+    def test_delete_git(self):
+        self.log_user()
+        repo_name = 'vcs_test_new_to_delete'
+        description = 'description for newly created repo'
+        private = False
+        response = self.app.post(url('repos'), {'repo_name': repo_name,
+                                                'repo_type': 'git',
+                                                'clone_uri': '',
+                                                'repo_group': '',
+                                                'description': description,
+                                                'private': private,
+                                                'landing_rev': 'tip'})
+        self.checkSessionFlash(response,
+                               'created repository %s' % (repo_name))
+
+        #test if the repo was created in the database
+        new_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name)
+        self.assertEqual(new_repo.description, description)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
+        except:
+            self.fail('no repo %s in filesystem' % repo_name)
+
+        response = self.app.delete(url('repo', repo_name=repo_name))
+
+        self.assertTrue('''deleted repository %s''' % (repo_name) in
+                        response.session['flash'][0])
+
+        response.follow()
+
+        #check if repo was deleted from db
+        deleted_repo = self.Session.query(Repository)\
+            .filter(Repository.repo_name == repo_name).scalar()
+
+        self.assertEqual(deleted_repo, None)
+
+        self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
+                                  False)
 
     def test_delete_repo_with_group(self):
         #TODO:
         pass
 
-
     def test_delete_browser_fakeout(self):
         response = self.app.post(url('repo', repo_name=HG_REPO),
                                  params=dict(_method='delete'))
 
-    def test_show(self):
+    def test_show_hg(self):
         self.log_user()
         response = self.app.get(url('repo', repo_name=HG_REPO))
 
-    def test_show_as_xml(self):
-        response = self.app.get(url('formatted_repo', repo_name=HG_REPO,
-                                    format='xml'))
+    def test_show_git(self):
+        self.log_user()
+        response = self.app.get(url('repo', repo_name=GIT_REPO))
+
 
     def test_edit(self):
         response = self.app.get(url('edit_repo', repo_name=HG_REPO))
-
-    def test_edit_as_xml(self):
-        response = self.app.get(url('formatted_edit_repo', repo_name=HG_REPO,
-                                    format='xml'))
--- a/rhodecode/tests/functional/test_forks.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/functional/test_forks.py	Thu Jun 14 23:19:26 2012 +0200
@@ -28,7 +28,7 @@
 
         self.assertTrue("""There are no forks yet""" in response.body)
 
-    def test_index_with_fork(self):
+    def test_index_with_fork_hg(self):
         self.log_user()
 
         # create a fork
@@ -39,19 +39,49 @@
         response = self.app.post(url(controller='forks',
                                      action='fork_create',
                                     repo_name=repo_name),
-                                    {'repo_name':fork_name,
-                                     'repo_group':'',
-                                     'fork_parent_id':org_repo.repo_id,
-                                     'repo_type':'hg',
-                                     'description':description,
-                                     'private':'False'})
+                                    {'repo_name': fork_name,
+                                     'repo_group': '',
+                                     'fork_parent_id': org_repo.repo_id,
+                                     'repo_type': 'hg',
+                                     'description': description,
+                                     'private': 'False',
+                                     'landing_rev': 'tip'})
 
         response = self.app.get(url(controller='forks', action='forks',
                                     repo_name=repo_name))
 
-        self.assertTrue("""<a href="/%s/summary">"""
-                         """vcs_test_hg_fork</a>""" % fork_name
-                         in response.body)
+        response.mustcontain(
+            """<a href="/%s/summary">%s</a>""" % (fork_name, fork_name)
+        )
+
+        #remove this fork
+        response = self.app.delete(url('repo', repo_name=fork_name))
+
+    def test_index_with_fork_git(self):
+        self.log_user()
+
+        # create a fork
+        fork_name = GIT_FORK
+        description = 'fork of vcs test'
+        repo_name = GIT_REPO
+        org_repo = Repository.get_by_repo_name(repo_name)
+        response = self.app.post(url(controller='forks',
+                                     action='fork_create',
+                                    repo_name=repo_name),
+                                    {'repo_name': fork_name,
+                                     'repo_group': '',
+                                     'fork_parent_id': org_repo.repo_id,
+                                     'repo_type': 'git',
+                                     'description': description,
+                                     'private': 'False',
+                                     'landing_rev': 'tip'})
+
+        response = self.app.get(url(controller='forks', action='forks',
+                                    repo_name=repo_name))
+
+        response.mustcontain(
+            """<a href="/%s/summary">%s</a>""" % (fork_name, fork_name)
+        )
 
         #remove this fork
         response = self.app.delete(url('repo', repo_name=fork_name))
@@ -69,11 +99,12 @@
                                      'fork_parent_id':org_repo.repo_id,
                                      'repo_type':'hg',
                                      'description':description,
-                                     'private':'False'})
+                                     'private':'False',
+                                     'landing_rev': 'tip'})
 
         #test if we have a message that fork is ok
-        self.assertTrue('forked %s repository as %s' \
-                      % (repo_name, fork_name) in response.session['flash'][0])
+        self.checkSessionFlash(response,
+                'forked %s repository as %s' % (repo_name, fork_name))
 
         #test if the fork was created in the database
         fork_repo = self.Session.query(Repository)\
@@ -85,10 +116,6 @@
         #test if fork is visible in the list ?
         response = response.follow()
 
-        # check if fork is marked as fork
-        # wait for cache to expire
-        import time
-        time.sleep(10)
         response = self.app.get(url(controller='summary', action='index',
                                     repo_name=fork_name))
 
--- a/rhodecode/tests/functional/test_search.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/functional/test_search.py	Thu Jun 14 23:19:26 2012 +0200
@@ -1,5 +1,5 @@
+import os
 from rhodecode.tests import *
-import os
 from nose.plugins.skip import SkipTest
 
 
@@ -27,8 +27,7 @@
         self.log_user()
         response = self.app.get(url(controller='search', action='index'),
                                 {'q': 'def repo'})
-        response.mustcontain('10 results')
-        response.mustcontain('Permission denied')
+        response.mustcontain('39 results')
 
     def test_repo_search(self):
         self.log_user()
@@ -36,4 +35,3 @@
                                 {'q': 'repository:%s def test' % HG_REPO})
 
         response.mustcontain('4 results')
-        response.mustcontain('Permission denied')
--- a/rhodecode/tests/functional/test_summary.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/functional/test_summary.py	Thu Jun 14 23:19:26 2012 +0200
@@ -92,7 +92,7 @@
         #repo type
         response.mustcontain("""<img style="margin-bottom:2px" class="icon" """
                         """title="Git repository" alt="Git """
-                        """repository" src="/images/icons/hgicon.png"/>""")
+                        """repository" src="/images/icons/giticon.png"/>""")
         response.mustcontain("""<img style="margin-bottom:2px" class="icon" """
                         """title="public repository" alt="public """
                         """repository" src="/images/icons/lock_open.png"/>""")
--- a/rhodecode/tests/test_models.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/test_models.py	Thu Jun 14 23:19:26 2012 +0200
@@ -136,7 +136,8 @@
                          repo_group=None,
                          private=False,
                          repo_type='hg',
-                         clone_uri=None)
+                         clone_uri=None,
+                         landing_rev='tip')
         cur_user = User.get_by_username(TEST_USER_ADMIN_LOGIN)
         r = RepoModel().create(form_data, cur_user)
 
@@ -608,7 +609,6 @@
                                                 user=self.anon,
                                                 perm='group.none')
 
-
         u1_auth = AuthUser(user_id=self.u1.user_id)
         self.assertEqual(u1_auth.permissions['repositories_groups'],
                  {u'group1': u'group.none', u'group2': u'group.none'})
@@ -619,13 +619,14 @@
 
         # add repo to group
         form_data = {
-            'repo_name':HG_REPO,
-            'repo_name_full':RepoGroup.url_sep().join([self.g1.group_name,HG_REPO]),
-            'repo_type':'hg',
-            'clone_uri':'',
-            'repo_group':self.g1.group_id,
-            'description':'desc',
-            'private':False
+            'repo_name': HG_REPO,
+            'repo_name_full': RepoGroup.url_sep().join([self.g1.group_name,HG_REPO]),
+            'repo_type': 'hg',
+            'clone_uri': '',
+            'repo_group': self.g1.group_id,
+            'description': 'desc',
+            'private': False,
+            'landing_rev': 'tip'
         }
         self.test_repo = RepoModel().create(form_data, cur_user=self.u1)
         Session.commit()
--- a/rhodecode/tests/vcs/__init__.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/vcs/__init__.py	Thu Jun 14 23:19:26 2012 +0200
@@ -52,5 +52,5 @@
     except VCSTestError, err:
         raise RuntimeError(str(err))
 
-start_dir = os.path.abspath(os.path.dirname(__file__))
-unittest.defaultTestLoader.discover(start_dir)
+#start_dir = os.path.abspath(os.path.dirname(__file__))
+#unittest.defaultTestLoader.discover(start_dir)
--- a/rhodecode/tests/vcs/conf.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/vcs/conf.py	Thu Jun 14 23:19:26 2012 +0200
@@ -1,59 +1,60 @@
 """
 Unit tests configuration module for vcs.
 """
+
 import os
 import time
 import hashlib
 import tempfile
 import datetime
-
+from rhodecode.tests import *
 from utils import get_normalized_path
 from os.path import join as jn
 
-__all__ = (
-    'TEST_HG_REPO', 'TEST_GIT_REPO', 'HG_REMOTE_REPO', 'GIT_REMOTE_REPO',
-    'SCM_TESTS',
-)
-
-SCM_TESTS = ['hg', 'git']
-uniq_suffix = str(int(time.mktime(datetime.datetime.now().timetuple())))
-
+TEST_TMP_PATH = TESTS_TMP_PATH
+#__all__ = (
+#    'TEST_HG_REPO', 'TEST_GIT_REPO', 'HG_REMOTE_REPO', 'GIT_REMOTE_REPO',
+#    'SCM_TESTS',
+#)
+#
+#SCM_TESTS = ['hg', 'git']
+#uniq_suffix = str(int(time.mktime(datetime.datetime.now().timetuple())))
+#
 THIS = os.path.abspath(os.path.dirname(__file__))
-
-GIT_REMOTE_REPO = 'git://github.com/codeinn/vcs.git'
-
-TEST_TMP_PATH = os.environ.get('VCS_TEST_ROOT', '/tmp')
-TEST_GIT_REPO = os.environ.get('VCS_TEST_GIT_REPO',
-                              jn(TEST_TMP_PATH, 'vcs-git'))
-TEST_GIT_REPO_CLONE = os.environ.get('VCS_TEST_GIT_REPO_CLONE',
-                            jn(TEST_TMP_PATH, 'vcsgitclone%s' % uniq_suffix))
-TEST_GIT_REPO_PULL = os.environ.get('VCS_TEST_GIT_REPO_PULL',
-                            jn(TEST_TMP_PATH, 'vcsgitpull%s' % uniq_suffix))
-
-HG_REMOTE_REPO = 'http://bitbucket.org/marcinkuzminski/vcs'
-TEST_HG_REPO = os.environ.get('VCS_TEST_HG_REPO',
-                              jn(TEST_TMP_PATH, 'vcs-hg'))
-TEST_HG_REPO_CLONE = os.environ.get('VCS_TEST_HG_REPO_CLONE',
-                              jn(TEST_TMP_PATH, 'vcshgclone%s' % uniq_suffix))
-TEST_HG_REPO_PULL = os.environ.get('VCS_TEST_HG_REPO_PULL',
-                              jn(TEST_TMP_PATH, 'vcshgpull%s' % uniq_suffix))
-
-TEST_DIR = os.environ.get('VCS_TEST_ROOT', tempfile.gettempdir())
-TEST_REPO_PREFIX = 'vcs-test'
-
-
-def get_new_dir(title):
-    """
-    Returns always new directory path.
-    """
-    name = TEST_REPO_PREFIX
-    if title:
-        name = '-'.join((name, title))
-    hex = hashlib.sha1(str(time.time())).hexdigest()
-    name = '-'.join((name, hex))
-    path = os.path.join(TEST_DIR, name)
-    return get_normalized_path(path)
-
+#
+#GIT_REMOTE_REPO = 'git://github.com/codeinn/vcs.git'
+#
+#TEST_TMP_PATH = os.environ.get('VCS_TEST_ROOT', '/tmp')
+#TEST_GIT_REPO = os.environ.get('VCS_TEST_GIT_REPO',
+#                              jn(TEST_TMP_PATH, 'vcs-git'))
+#TEST_GIT_REPO_CLONE = os.environ.get('VCS_TEST_GIT_REPO_CLONE',
+#                            jn(TEST_TMP_PATH, 'vcsgitclone%s' % uniq_suffix))
+#TEST_GIT_REPO_PULL = os.environ.get('VCS_TEST_GIT_REPO_PULL',
+#                            jn(TEST_TMP_PATH, 'vcsgitpull%s' % uniq_suffix))
+#
+#HG_REMOTE_REPO = 'http://bitbucket.org/marcinkuzminski/vcs'
+#TEST_HG_REPO = os.environ.get('VCS_TEST_HG_REPO',
+#                              jn(TEST_TMP_PATH, 'vcs-hg'))
+#TEST_HG_REPO_CLONE = os.environ.get('VCS_TEST_HG_REPO_CLONE',
+#                              jn(TEST_TMP_PATH, 'vcshgclone%s' % uniq_suffix))
+#TEST_HG_REPO_PULL = os.environ.get('VCS_TEST_HG_REPO_PULL',
+#                              jn(TEST_TMP_PATH, 'vcshgpull%s' % uniq_suffix))
+#
+#TEST_DIR = os.environ.get('VCS_TEST_ROOT', tempfile.gettempdir())
+#TEST_REPO_PREFIX = 'vcs-test'
+#
+#
+#def get_new_dir(title):
+#    """
+#    Returns always new directory path.
+#    """
+#    name = TEST_REPO_PREFIX
+#    if title:
+#        name = '-'.join((name, title))
+#    hex = hashlib.sha1(str(time.time())).hexdigest()
+#    name = '-'.join((name, hex))
+#    path = os.path.join(TEST_DIR, name)
+#    return get_normalized_path(path)
 
 PACKAGE_DIR = os.path.abspath(os.path.join(
     os.path.dirname(__file__), '..'))
--- a/rhodecode/tests/vcs/test_hg.py	Thu Jun 14 13:32:58 2012 +0200
+++ b/rhodecode/tests/vcs/test_hg.py	Thu Jun 14 23:19:26 2012 +0200
@@ -156,14 +156,10 @@
 
         #active branches
         self.assertTrue('default' in self.repo.branches)
-
-        #closed branches
-        self.assertFalse('web' in self.repo.branches)
-        self.assertFalse('git' in self.repo.branches)
+        self.assertTrue('git' in self.repo.branches)
 
         # closed
-        self.assertTrue('workdir' in self.repo._get_branches(closed=True))
-        self.assertTrue('webvcs' in self.repo._get_branches(closed=True))
+        self.assertTrue('web' in self.repo._get_branches(closed=True))
 
         for name, id in self.repo.branches.items():
             self.assertTrue(isinstance(
Binary file rhodecode/tests/vcs_test_git.tar.gz has changed
Binary file rhodecode/tests/vcs_test_hg.tar.gz has changed