changeset 2529:40b3a54391f9 beta

Added functional test create repo with a group - unified calling Session in tests
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 01 Jul 2012 18:06:34 +0200
parents 5c8b1eaafe77
children f17e001cc6cc
files rhodecode/lib/utils.py rhodecode/model/repo.py rhodecode/model/repos_group.py rhodecode/tests/api/api_base.py rhodecode/tests/functional/test_admin_notifications.py rhodecode/tests/functional/test_admin_repos.py rhodecode/tests/functional/test_login.py rhodecode/tests/models/test_permissions.py
diffstat 8 files changed, 111 insertions(+), 71 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/utils.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/lib/utils.py	Sun Jul 01 18:06:34 2012 +0200
@@ -51,8 +51,7 @@
 
 from rhodecode.model import meta
 from rhodecode.model.db import Repository, User, RhodeCodeUi, \
-    UserLog, RepoGroup, RhodeCodeSetting, UserRepoGroupToPerm,\
-    CacheInvalidation
+    UserLog, RepoGroup, RhodeCodeSetting, CacheInvalidation
 from rhodecode.model.meta import Session
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.lib.utils2 import safe_str, safe_unicode
@@ -129,7 +128,7 @@
     """
 
     if not sa:
-        sa = meta.Session
+        sa = meta.Session()
 
     try:
         if hasattr(user, 'user_id'):
@@ -306,7 +305,7 @@
                 baseui.setconfig(section, k, v)
 
     elif read_from == 'db':
-        sa = meta.Session
+        sa = meta.Session()
         ret = sa.query(RhodeCodeUi)\
             .options(FromCache("sql_cache_short", "get_hg_ui_settings"))\
             .all()
@@ -399,7 +398,7 @@
 
     :param paths: full path to repository
     """
-    sa = meta.Session
+    sa = meta.Session()
     groups = path.split(Repository.url_sep())
     parent = None
     group = None
@@ -438,7 +437,7 @@
     :param remove_obsolete: check for obsolete entries in database
     """
     from rhodecode.model.repo import RepoModel
-    sa = meta.Session
+    sa = meta.Session()
     rm = RepoModel()
     user = sa.query(User).filter(User.admin == True).first()
     if user is None:
@@ -447,22 +446,20 @@
 
     for name, repo in initial_repo_list.items():
         group = map_groups(name)
-        if not rm.get_by_repo_name(name, cache=False):
-            log.info('repository %s not found creating default' % name)
+        if not rm.get_by_repo_name(name):
+            log.info('repository %s not found creating now' % name)
             added.append(name)
-            form_data = {
-             'repo_name': name,
-             'repo_name_full': name,
-             'repo_type': repo.alias,
-             'description': repo.description \
-                if repo.description != 'unknown' else '%s repository' % name,
-             'private': False,
-             'group_id': getattr(group, 'group_id', None),
-             'landing_rev': 'tip',
-             'clone_uri': None,
-             'repo_group': None,
-            }
-            rm.create(form_data, user, just_db=True)
+            desc = (repo.description
+                    if repo.description != 'unknown'
+                    else '%s repository' % name)
+            rm.create_repo(
+                repo_name=name,
+                repo_type=repo.alias,
+                description=desc,
+                repos_group=getattr(group, 'group_id', None),
+                owner=user,
+                just_db=True
+            )
     sa.commit()
     removed = []
     if remove_obsolete:
@@ -589,7 +586,7 @@
     dbmanage.admin_prompt()
     dbmanage.create_permissions()
     dbmanage.populate_default_permissions()
-    Session.commit()
+    Session().commit()
     # PART TWO make test repo
     log.debug('making test vcs repositories')
 
--- a/rhodecode/model/repo.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/model/repo.py	Sun Jul 01 18:06:34 2012 +0200
@@ -212,21 +212,21 @@
 
         owner = self._get_user(owner)
         fork_of = self._get_repo(fork_of)
-        repo_group = self.__get_repos_group(repos_group)
+        repos_group = self.__get_repos_group(repos_group)
         try:
 
             # repo name is just a name of repository
             # while repo_name_full is a full qualified name that is combined
             # with name and path of group
+            repo_name_full = repo_name
             repo_name = repo_name.split(self.URL_SEPARATOR)[-1]
-            repo_name_full = repo_name
 
             new_repo = Repository()
             new_repo.enable_statistics = False
             new_repo.repo_name = repo_name_full
             new_repo.repo_type = repo_type
             new_repo.user = owner
-            new_repo.group = repo_group
+            new_repo.group = repos_group
             new_repo.description = description or repo_name
             new_repo.private = private
             new_repo.clone_uri = clone_uri
@@ -280,7 +280,7 @@
 
             if not just_db:
                 self.__create_repo(repo_name, repo_type,
-                                   repo_group,
+                                   repos_group,
                                    clone_uri)
                 log_create_repository(new_repo.get_dict(),
                                       created_by=owner.username)
@@ -290,6 +290,7 @@
                                                     owner.user_id)
             return new_repo
         except:
+            print traceback.format_exc()
             log.error(traceback.format_exc())
             raise
 
@@ -435,7 +436,7 @@
             log.error(traceback.format_exc())
             raise
 
-    def __create_repo(self, repo_name, alias, new_parent_id, clone_uri=False):
+    def __create_repo(self, repo_name, alias, parent, clone_uri=False):
         """
         makes repository on filesystem. It's group aware means it'll create
         a repository within a group, and alter the paths accordingly of
@@ -448,10 +449,8 @@
         """
         from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group
 
-        if new_parent_id:
-            paths = RepoGroup.get(new_parent_id)\
-                .full_path.split(RepoGroup.url_sep())
-            new_parent_path = os.sep.join(paths)
+        if parent:
+            new_parent_path = os.sep.join(parent.full_path_splitted)
         else:
             new_parent_path = ''
 
--- a/rhodecode/model/repos_group.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/model/repos_group.py	Sun Jul 01 18:06:34 2012 +0200
@@ -129,7 +129,7 @@
             # delete only if that path really exists
             os.rmdir(rm_path)
 
-    def create(self, group_name, group_description, parent, just_db=False):
+    def create(self, group_name, group_description, parent=None, just_db=False):
         try:
             new_repos_group = RepoGroup()
             new_repos_group.group_description = group_description
--- a/rhodecode/tests/api/api_base.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/tests/api/api_base.py	Sun Jul 01 18:06:34 2012 +0200
@@ -1,14 +1,14 @@
+from __future__ import with_statement
 import random
 import mock
 
 from rhodecode.tests import *
-from rhodecode.model.meta import Session
 from rhodecode.lib.compat import json
 from rhodecode.lib.auth import AuthUser
 from rhodecode.model.user import UserModel
 from rhodecode.model.users_group import UsersGroupModel
 from rhodecode.model.repo import RepoModel
-from nose.tools import with_setup
+from rhodecode.model.meta import Session
 
 API_URL = '/_admin/api'
 
@@ -249,7 +249,7 @@
         self._compare_ok(id_, expected, given=response.body)
 
         UserModel().delete(usr.user_id)
-        Session().commit()
+        self.Session().commit()
 
     @mock.patch.object(UserModel, 'create_or_update', crash)
     def test_api_create_user_when_exception_happened(self):
@@ -271,7 +271,7 @@
                                            password=u'qweqwe',
                                            email=u'u232@rhodecode.org',
                                            firstname=u'u1', lastname=u'u1')
-        Session().commit()
+        self.Session().commit()
         username = usr.username
         email = usr.email
         usr_id = usr.user_id
@@ -293,7 +293,7 @@
                                            password=u'qweqwe',
                                            email=u'u232@rhodecode.org',
                                            firstname=u'u1', lastname=u'u1')
-        Session().commit()
+        self.Session().commit()
         username = usr.username
 
         id_, params = _build_data(self.apikey, 'delete_user',
@@ -384,7 +384,7 @@
         RepoModel().grant_users_group_permission(repo=self.REPO,
                                                  group_name=new_group,
                                                  perm='repository.read')
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'get_repo',
                                   repoid=self.REPO)
         response = self.app.post(API_URL, content_type='application/json',
@@ -617,7 +617,7 @@
         self._compare_ok(id_, expected, given=response.body)
 
         UsersGroupModel().delete(users_group='test_users_group2')
-        Session().commit()
+        self.Session().commit()
 
     def test_api_create_users_group(self):
         group_name = 'some_new_group'
@@ -660,7 +660,7 @@
     def test_api_add_user_to_users_group(self):
         gr_name = 'test_group'
         UsersGroupModel().create(gr_name)
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'add_user_to_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
@@ -675,7 +675,7 @@
         self._compare_ok(id_, expected, given=response.body)
 
         UsersGroupModel().delete(users_group=gr_name)
-        Session().commit()
+        self.Session().commit()
 
     def test_api_add_user_to_users_group_that_doesnt_exist(self):
         id_, params = _build_data(self.apikey, 'add_user_to_users_group',
@@ -691,7 +691,7 @@
     def test_api_add_user_to_users_group_exception_occurred(self):
         gr_name = 'test_group'
         UsersGroupModel().create(gr_name)
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'add_user_to_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
@@ -702,13 +702,13 @@
         self._compare_error(id_, expected, given=response.body)
 
         UsersGroupModel().delete(users_group=gr_name)
-        Session().commit()
+        self.Session().commit()
 
     def test_api_remove_user_from_users_group(self):
         gr_name = 'test_group_3'
         gr = UsersGroupModel().create(gr_name)
         UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'remove_user_from_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
@@ -723,14 +723,14 @@
         self._compare_ok(id_, expected, given=response.body)
 
         UsersGroupModel().delete(users_group=gr_name)
-        Session().commit()
+        self.Session().commit()
 
     @mock.patch.object(UsersGroupModel, 'remove_user_from_group', crash)
     def test_api_remove_user_from_users_group_exception_occurred(self):
         gr_name = 'test_group_3'
         gr = UsersGroupModel().create(gr_name)
         UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'remove_user_from_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
@@ -741,7 +741,7 @@
         self._compare_error(id_, expected, given=response.body)
 
         UsersGroupModel().delete(users_group=gr_name)
-        Session().commit()
+        self.Session().commit()
 
     @parameterized.expand([('none', 'repository.none'),
                            ('read', 'repository.read'),
@@ -871,7 +871,7 @@
         RepoModel().grant_users_group_permission(repo=self.REPO,
                                                  group_name=TEST_USERS_GROUP,
                                                  perm='repository.read')
-        Session().commit()
+        self.Session().commit()
         id_, params = _build_data(self.apikey, 'revoke_users_group_permission',
                                   repoid=self.REPO,
                                   usersgroupid=TEST_USERS_GROUP,)
--- a/rhodecode/tests/functional/test_admin_notifications.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/tests/functional/test_admin_notifications.py	Sun Jul 01 18:06:34 2012 +0200
@@ -1,9 +1,8 @@
 from rhodecode.tests import *
-from rhodecode.model.db import Notification, User, UserNotification
+from rhodecode.model.db import Notification, User
 
 from rhodecode.model.user import UserModel
 from rhodecode.model.notification import NotificationModel
-from rhodecode.model.meta import Session
 
 
 class TestNotificationsController(TestController):
@@ -11,8 +10,8 @@
     def tearDown(self):
         for n in Notification.query().all():
             inst = Notification.get(n.notification_id)
-            Session.delete(inst)
-        Session.commit()
+            self.Session().delete(inst)
+        self.Session().commit()
 
     def test_index(self):
         self.log_user()
@@ -31,7 +30,7 @@
         NotificationModel().create(created_by=u1, subject=u'test_notification_1',
                                    body=u'notification_1',
                                    recipients=[cur_user])
-        Session.commit()
+        self.Session().commit()
         response = self.app.get(url('notifications'))
         self.assertTrue(u'test_notification_1' in response.body)
 
@@ -69,7 +68,7 @@
                                                   subject=u'test',
                                                   body=u'hi there',
                                                   recipients=[cur_user, u1, u2])
-        Session.commit()
+        self.Session().commit()
         u1 = User.get(u1.user_id)
         u2 = User.get(u2.user_id)
 
--- a/rhodecode/tests/functional/test_admin_repos.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/tests/functional/test_admin_repos.py	Sun Jul 01 18:06:34 2012 +0200
@@ -3,8 +3,10 @@
 import os
 from rhodecode.lib import vcs
 
-from rhodecode.model.db import Repository
+from rhodecode.model.db import Repository, RepoGroup
 from rhodecode.tests import *
+from rhodecode.model.repos_group import ReposGroupModel
+from rhodecode.model.repo import RepoModel
 
 
 class TestAdminReposController(TestController):
@@ -36,7 +38,7 @@
                                'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
@@ -72,7 +74,7 @@
                                'created repository %s' % (repo_name_unicode))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name_unicode).one()
 
         self.assertEqual(new_repo.repo_name, repo_name_unicode)
@@ -90,8 +92,51 @@
             self.fail('no repo %s in filesystem' % repo_name)
 
     def test_create_hg_in_group(self):
-        #TODO: write test !
-        pass
+        self.log_user()
+
+        ## create GROUP
+        group_name = 'sometest'
+        gr = ReposGroupModel().create(group_name=group_name,
+                                      group_description='test',)
+        self.Session().commit()
+
+        repo_name = 'ingroup'
+        repo_name_full = RepoGroup.url_sep().join([group_name, repo_name])
+        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': gr.group_id,
+                                                '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_full).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name_full)
+        self.assertEqual(new_repo.description, description)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name_full)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name_full))
+        except:
+            ReposGroupModel().delete(group_name)
+            self.Session().commit()
+            self.fail('no repo %s in filesystem' % repo_name)
+
+        RepoModel().delete(repo_name_full)
+        ReposGroupModel().delete(group_name)
+        self.Session().commit()
 
     def test_create_git(self):
         self.log_user()
@@ -109,7 +154,7 @@
                                'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
@@ -145,7 +190,7 @@
                                'created repository %s' % (repo_name_unicode))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name_unicode).one()
 
         self.assertEqual(new_repo.repo_name, repo_name_unicode)
@@ -192,7 +237,7 @@
                                'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
@@ -217,7 +262,7 @@
         response.follow()
 
         #check if repo was deleted from db
-        deleted_repo = self.Session.query(Repository)\
+        deleted_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).scalar()
 
         self.assertEqual(deleted_repo, None)
@@ -241,7 +286,7 @@
                                'created repository %s' % (repo_name))
 
         #test if the repo was created in the database
-        new_repo = self.Session.query(Repository)\
+        new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
 
         self.assertEqual(new_repo.repo_name, repo_name)
@@ -266,7 +311,7 @@
         response.follow()
 
         #check if repo was deleted from db
-        deleted_repo = self.Session.query(Repository)\
+        deleted_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).scalar()
 
         self.assertEqual(deleted_repo, None)
--- a/rhodecode/tests/functional/test_login.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/tests/functional/test_login.py	Sun Jul 01 18:06:34 2012 +0200
@@ -3,7 +3,6 @@
 from rhodecode.model.db import User, Notification
 from rhodecode.lib.utils2 import generate_api_key
 from rhodecode.lib.auth import check_password
-from rhodecode.model.meta import Session
 from rhodecode.lib import helpers as h
 from rhodecode.model import validators
 
@@ -12,9 +11,9 @@
 
     def tearDown(self):
         for n in Notification.query().all():
-            Session.delete(n)
+            self.Session().delete(n)
 
-        Session.commit()
+        self.Session().commit()
         self.assertEqual(Notification.query().all(), [])
 
     def test_index(self):
@@ -199,7 +198,7 @@
         self.assertEqual(response.status, '302 Found')
         self.checkSessionFlash(response, 'You have successfully registered into rhodecode')
 
-        ret = self.Session.query(User).filter(User.username == 'test_regular4').one()
+        ret = self.Session().query(User).filter(User.username == 'test_regular4').one()
         self.assertEqual(ret.username, username)
         self.assertEqual(check_password(password, ret.password), True)
         self.assertEqual(ret.email, email)
@@ -237,8 +236,8 @@
         new.name = name
         new.lastname = lastname
         new.api_key = generate_api_key(username)
-        self.Session.add(new)
-        self.Session.commit()
+        self.Session().add(new)
+        self.Session().commit()
 
         response = self.app.post(url(controller='login',
                                      action='password_reset'),
--- a/rhodecode/tests/models/test_permissions.py	Sun Jul 01 17:49:42 2012 +0200
+++ b/rhodecode/tests/models/test_permissions.py	Sun Jul 01 18:06:34 2012 +0200
@@ -227,6 +227,7 @@
             repo_name=name,
             repo_type='hg',
             description='',
+            repos_group=self.g1,
             owner=self.u1,
         )
         Session().commit()