diff options
Diffstat (limited to 'rhodecode/tests')
-rw-r--r-- | rhodecode/tests/api/api_base.py | 292 | ||||
-rw-r--r-- | rhodecode/tests/functional/test_admin_notifications.py | 1 | ||||
-rw-r--r-- | rhodecode/tests/functional/test_compare.py | 12 | ||||
-rw-r--r-- | rhodecode/tests/functional/test_compare_local.py | 12 | ||||
-rw-r--r-- | rhodecode/tests/functional/test_home.py | 46 | ||||
-rw-r--r-- | rhodecode/tests/functional/test_journal.py | 5 | ||||
-rw-r--r-- | rhodecode/tests/models/test_user_permissions_on_repos.py | 2 | ||||
-rwxr-xr-x | rhodecode/tests/scripts/test_vcs_operations.py | 50 | ||||
-rw-r--r-- | rhodecode/tests/test_libs.py | 5 |
9 files changed, 391 insertions, 34 deletions
diff --git a/rhodecode/tests/api/api_base.py b/rhodecode/tests/api/api_base.py index 7ada1a9b..5e290582 100644 --- a/rhodecode/tests/api/api_base.py +++ b/rhodecode/tests/api/api_base.py @@ -59,13 +59,13 @@ def destroy_users_group(name=TEST_USERS_GROUP): Session().commit() -def create_repo(repo_name, repo_type): +def create_repo(repo_name, repo_type, owner=None): # create new repo form_data = _get_repo_create_params( repo_name_full=repo_name, repo_description='description %s' % repo_name, ) - cur_user = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) + cur_user = UserModel().get_by_username(owner or TEST_USER_ADMIN_LOGIN) r = RepoModel().create(form_data, cur_user) Session().commit() return r @@ -93,7 +93,7 @@ class BaseTestApi(object): def setUpClass(self): self.usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) self.apikey = self.usr.api_key - self.TEST_USER = UserModel().create_or_update( + self.test_user = UserModel().create_or_update( username='test-api', password='test', email='test@api.rhodecode.org', @@ -101,7 +101,8 @@ class BaseTestApi(object): lastname='last' ) Session().commit() - self.TEST_USER_LOGIN = self.TEST_USER.username + self.TEST_USER_LOGIN = self.test_user.username + self.apikey_regular = self.test_user.api_key @classmethod def teardownClass(self): @@ -148,12 +149,40 @@ class BaseTestApi(object): self._compare_error(id_, expected, given=response.body) def test_api_missing_non_optional_param(self): - id_, params = _build_data(self.apikey, 'get_user') + id_, params = _build_data(self.apikey, 'get_repo') response = api_call(self, params) - expected = 'Missing non optional `userid` arg in JSON DATA' + expected = 'Missing non optional `repoid` arg in JSON DATA' self._compare_error(id_, expected, given=response.body) + def test_api_missing_non_optional_param_args_null(self): + id_, params = _build_data(self.apikey, 'get_repo') + params = params.replace('"args": {}', '"args": null') + response = api_call(self, params) + + expected = 'Missing non optional `repoid` arg in JSON DATA' + self._compare_error(id_, expected, given=response.body) + + def test_api_missing_non_optional_param_args_bad(self): + id_, params = _build_data(self.apikey, 'get_repo') + params = params.replace('"args": {}', '"args": 1') + response = api_call(self, params) + + expected = 'Missing non optional `repoid` arg in JSON DATA' + self._compare_error(id_, expected, given=response.body) + + def test_api_args_is_null(self): + id_, params = _build_data(self.apikey, 'get_users',) + params = params.replace('"args": {}', '"args": null') + response = api_call(self, params) + self.assertEqual(response.status, '200 OK') + + def test_api_args_is_bad(self): + id_, params = _build_data(self.apikey, 'get_users',) + params = params.replace('"args": {}', '"args": 1') + response = api_call(self, params) + self.assertEqual(response.status, '200 OK') + def test_api_get_users(self): id_, params = _build_data(self.apikey, 'get_users',) response = api_call(self, params) @@ -184,6 +213,36 @@ class BaseTestApi(object): expected = "user `%s` does not exist" % 'trololo' self._compare_error(id_, expected, given=response.body) + def test_api_get_user_without_giving_userid(self): + id_, params = _build_data(self.apikey, 'get_user') + response = api_call(self, params) + + usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) + ret = usr.get_api_data() + ret['permissions'] = AuthUser(usr.user_id).permissions + + expected = ret + self._compare_ok(id_, expected, given=response.body) + + def test_api_get_user_without_giving_userid_non_admin(self): + id_, params = _build_data(self.apikey_regular, 'get_user') + response = api_call(self, params) + + usr = UserModel().get_by_username(self.TEST_USER_LOGIN) + ret = usr.get_api_data() + ret['permissions'] = AuthUser(usr.user_id).permissions + + expected = ret + self._compare_ok(id_, expected, given=response.body) + + def test_api_get_user_with_giving_userid_non_admin(self): + id_, params = _build_data(self.apikey_regular, 'get_user', + userid=self.TEST_USER_LOGIN) + response = api_call(self, params) + + expected = 'userid is not the same as your user' + self._compare_error(id_, expected, given=response.body) + def test_api_pull(self): #TODO: issues with rhodecode_extras here.. not sure why ! pass @@ -237,6 +296,42 @@ class BaseTestApi(object): % (TEST_USER_ADMIN_LOGIN, self.REPO, True)) self._compare_ok(id_, expected, given=response.body) + def test_api_lock_repo_lock_aquire_by_non_admin(self): + repo_name = 'api_delete_me' + create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) + try: + id_, params = _build_data(self.apikey_regular, 'lock', + repoid=repo_name, + locked=True) + response = api_call(self, params) + expected = ('User `%s` set lock state for repo `%s` to `%s`' + % (self.TEST_USER_LOGIN, repo_name, True)) + self._compare_ok(id_, expected, given=response.body) + finally: + destroy_repo(repo_name) + + def test_api_lock_repo_lock_aquire_non_admin_with_userid(self): + repo_name = 'api_delete_me' + create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) + try: + id_, params = _build_data(self.apikey_regular, 'lock', + userid=TEST_USER_ADMIN_LOGIN, + repoid=repo_name, + locked=True) + response = api_call(self, params) + expected = 'userid is not the same as your user' + self._compare_error(id_, expected, given=response.body) + finally: + destroy_repo(repo_name) + + def test_api_lock_repo_lock_aquire_non_admin_not_his_repo(self): + id_, params = _build_data(self.apikey_regular, 'lock', + repoid=self.REPO, + locked=True) + response = api_call(self, params) + expected = 'repository `%s` does not exist' % (self.REPO) + self._compare_error(id_, expected, given=response.body) + def test_api_lock_repo_lock_release(self): id_, params = _build_data(self.apikey, 'lock', userid=TEST_USER_ADMIN_LOGIN, @@ -247,6 +342,15 @@ class BaseTestApi(object): % (TEST_USER_ADMIN_LOGIN, self.REPO, False)) self._compare_ok(id_, expected, given=response.body) + def test_api_lock_repo_lock_aquire_optional_userid(self): + id_, params = _build_data(self.apikey, 'lock', + repoid=self.REPO, + locked=True) + response = api_call(self, params) + expected = ('User `%s` set lock state for repo `%s` to `%s`' + % (TEST_USER_ADMIN_LOGIN, self.REPO, True)) + self._compare_ok(id_, expected, given=response.body) + @mock.patch.object(Repository, 'lock', crash) def test_api_lock_error(self): id_, params = _build_data(self.apikey, 'lock', @@ -457,6 +561,48 @@ class BaseTestApi(object): self._compare_ok(id_, expected, given=response.body) destroy_users_group(new_group) + def test_api_get_repo_by_non_admin(self): + id_, params = _build_data(self.apikey, 'get_repo', + repoid=self.REPO) + response = api_call(self, params) + + repo = RepoModel().get_by_repo_name(self.REPO) + ret = repo.get_api_data() + + members = [] + for user in repo.repo_to_perm: + perm = user.permission.permission_name + user = user.user + user_data = user.get_api_data() + user_data['type'] = "user" + user_data['permission'] = perm + members.append(user_data) + + for users_group in repo.users_group_to_perm: + perm = users_group.permission.permission_name + users_group = users_group.users_group + users_group_data = users_group.get_api_data() + users_group_data['type'] = "users_group" + users_group_data['permission'] = perm + members.append(users_group_data) + + ret['members'] = members + + expected = ret + self._compare_ok(id_, expected, given=response.body) + + def test_api_get_repo_by_non_admin_no_permission_to_repo(self): + RepoModel().grant_user_permission(repo=self.REPO, + user=self.TEST_USER_LOGIN, + perm='repository.none') + + id_, params = _build_data(self.apikey_regular, 'get_repo', + repoid=self.REPO) + response = api_call(self, params) + + expected = 'repository `%s` does not exist' % (self.REPO) + self._compare_error(id_, expected, given=response.body) + def test_api_get_repo_that_doesn_not_exist(self): id_, params = _build_data(self.apikey, 'get_repo', repoid='no-such-repo') @@ -478,6 +624,18 @@ class BaseTestApi(object): expected = ret self._compare_ok(id_, expected, given=response.body) + def test_api_get_repos_non_admin(self): + id_, params = _build_data(self.apikey_regular, 'get_repos') + response = api_call(self, params) + + result = [] + for repo in RepoModel().get_all_user_repos(self.TEST_USER_LOGIN): + result.append(repo.get_api_data()) + ret = jsonify(result) + + expected = ret + self._compare_ok(id_, expected, given=response.body) + @parameterized.expand([('all', 'all'), ('dirs', 'dirs'), ('files', 'files'), ]) @@ -560,6 +718,56 @@ class BaseTestApi(object): expected = 'user `%s` does not exist' % owner self._compare_error(id_, expected, given=response.body) + def test_api_create_repo_dont_specify_owner(self): + repo_name = 'api-repo' + owner = 'i-dont-exist' + id_, params = _build_data(self.apikey, 'create_repo', + repo_name=repo_name, + repo_type='hg', + ) + response = api_call(self, params) + + repo = RepoModel().get_by_repo_name(repo_name) + ret = { + 'msg': 'Created new repository `%s`' % repo_name, + 'repo': jsonify(repo.get_api_data()) + } + expected = ret + self._compare_ok(id_, expected, given=response.body) + destroy_repo(repo_name) + + def test_api_create_repo_by_non_admin(self): + repo_name = 'api-repo' + owner = 'i-dont-exist' + id_, params = _build_data(self.apikey_regular, 'create_repo', + repo_name=repo_name, + repo_type='hg', + ) + response = api_call(self, params) + + repo = RepoModel().get_by_repo_name(repo_name) + ret = { + 'msg': 'Created new repository `%s`' % repo_name, + 'repo': jsonify(repo.get_api_data()) + } + expected = ret + self._compare_ok(id_, expected, given=response.body) + destroy_repo(repo_name) + + def test_api_create_repo_by_non_admin_specify_owner(self): + repo_name = 'api-repo' + owner = 'i-dont-exist' + id_, params = _build_data(self.apikey_regular, 'create_repo', + repo_name=repo_name, + repo_type='hg', + owner=owner + ) + response = api_call(self, params) + + expected = 'Only RhodeCode admin can specify `owner` param' + self._compare_error(id_, expected, given=response.body) + destroy_repo(repo_name) + def test_api_create_repo_exists(self): repo_name = self.REPO id_, params = _build_data(self.apikey, 'create_repo', @@ -598,6 +806,35 @@ class BaseTestApi(object): expected = ret self._compare_ok(id_, expected, given=response.body) + def test_api_delete_repo_by_non_admin(self): + repo_name = 'api_delete_me' + create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) + try: + id_, params = _build_data(self.apikey_regular, 'delete_repo', + repoid=repo_name,) + response = api_call(self, params) + + ret = { + 'msg': 'Deleted repository `%s`' % repo_name, + 'success': True + } + expected = ret + self._compare_ok(id_, expected, given=response.body) + finally: + destroy_repo(repo_name) + + def test_api_delete_repo_by_non_admin_no_permission(self): + repo_name = 'api_delete_me' + create_repo(repo_name, self.REPO_TYPE) + try: + id_, params = _build_data(self.apikey_regular, 'delete_repo', + repoid=repo_name,) + response = api_call(self, params) + expected = 'repository `%s` does not exist' % (repo_name) + self._compare_error(id_, expected, given=response.body) + finally: + destroy_repo(repo_name) + def test_api_delete_repo_exception_occurred(self): repo_name = 'api_delete_me' create_repo(repo_name, self.REPO_TYPE) @@ -630,6 +867,49 @@ class BaseTestApi(object): self._compare_ok(id_, expected, given=response.body) destroy_repo(fork_name) + def test_api_fork_repo_non_admin(self): + fork_name = 'api-repo-fork' + id_, params = _build_data(self.apikey_regular, 'fork_repo', + repoid=self.REPO, + fork_name=fork_name, + ) + response = api_call(self, params) + + ret = { + 'msg': 'Created fork of `%s` as `%s`' % (self.REPO, + fork_name), + 'success': True + } + expected = ret + self._compare_ok(id_, expected, given=response.body) + destroy_repo(fork_name) + + def test_api_fork_repo_non_admin_specify_owner(self): + fork_name = 'api-repo-fork' + id_, params = _build_data(self.apikey_regular, 'fork_repo', + repoid=self.REPO, + fork_name=fork_name, + owner=TEST_USER_ADMIN_LOGIN, + ) + response = api_call(self, params) + expected = 'Only RhodeCode admin can specify `owner` param' + self._compare_error(id_, expected, given=response.body) + destroy_repo(fork_name) + + def test_api_fork_repo_non_admin_no_permission_to_fork(self): + RepoModel().grant_user_permission(repo=self.REPO, + user=self.TEST_USER_LOGIN, + perm='repository.none') + fork_name = 'api-repo-fork' + id_, params = _build_data(self.apikey_regular, 'fork_repo', + repoid=self.REPO, + fork_name=fork_name, + ) + response = api_call(self, params) + expected = 'repository `%s` does not exist' % (self.REPO) + self._compare_error(id_, expected, given=response.body) + destroy_repo(fork_name) + def test_api_fork_repo_unknown_owner(self): fork_name = 'api-repo-fork' owner = 'i-dont-exist' diff --git a/rhodecode/tests/functional/test_admin_notifications.py b/rhodecode/tests/functional/test_admin_notifications.py index 66431a68..05ead3b2 100644 --- a/rhodecode/tests/functional/test_admin_notifications.py +++ b/rhodecode/tests/functional/test_admin_notifications.py @@ -82,6 +82,7 @@ class TestNotificationsController(TestController): response = self.app.delete(url('notification', notification_id= notification.notification_id)) + self.assertEqual(response.body, 'ok') cur_user = User.get(cur_usr_id) self.assertEqual(cur_user.notifications, []) diff --git a/rhodecode/tests/functional/test_compare.py b/rhodecode/tests/functional/test_compare.py index 20861594..09ba4762 100644 --- a/rhodecode/tests/functional/test_compare.py +++ b/rhodecode/tests/functional/test_compare.py @@ -98,7 +98,7 @@ class TestCompareController(TestController): )) try: - response.mustcontain('%s@%s -> %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2)) + response.mustcontain('%s@%s -> %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2)) response.mustcontain("""Showing 2 commits""") response.mustcontain("""1 file changed with 2 insertions and 0 deletions""") @@ -156,7 +156,7 @@ class TestCompareController(TestController): )) try: - response.mustcontain('%s@%s -> %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2)) + response.mustcontain('%s@%s -> %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2)) response.mustcontain("""Showing 2 commits""") response.mustcontain("""1 file changed with 2 insertions and 0 deletions""") @@ -191,7 +191,7 @@ class TestCompareController(TestController): # )) # # try: -# response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) +# response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) # ## outgoing changesets between those revisions # # response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) @@ -226,7 +226,7 @@ class TestCompareController(TestController): # )) # # try: -# response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) +# response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) # ## outgoing changesets between those revisions # # response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) @@ -312,7 +312,7 @@ class TestCompareController(TestController): # )) # # try: -# #response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) +# #response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) # # #add new commit into parent ! # cs0 = ScmModel().create_node( @@ -336,7 +336,7 @@ class TestCompareController(TestController): # bundle=False # )) # -# response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) +# response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) # response.mustcontain("""file1-line1-from-fork""") # response.mustcontain("""file2-line1-from-fork""") # response.mustcontain("""file3-line1-from-fork""") diff --git a/rhodecode/tests/functional/test_compare_local.py b/rhodecode/tests/functional/test_compare_local.py index 0ff8d284..349b3dfe 100644 --- a/rhodecode/tests/functional/test_compare_local.py +++ b/rhodecode/tests/functional/test_compare_local.py @@ -19,7 +19,7 @@ class TestCompareController(TestController): other_ref_type="tag", other_ref=tag2, )) - response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, tag1, HG_REPO, tag2)) + response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, tag1, HG_REPO, tag2)) ## outgoing changesets between tags response.mustcontain('''<a href="/%s/changeset/c5ddebc06eaaba3010c2d66ea6ec9d074eb0f678">r112:c5ddebc06eaa</a>''' % HG_REPO) response.mustcontain('''<a href="/%s/changeset/70d4cef8a37657ee4cf5aabb3bd9f68879769816">r115:70d4cef8a376</a>''' % HG_REPO) @@ -56,7 +56,7 @@ class TestCompareController(TestController): other_ref=tag2, bundle=False )) - response.mustcontain('%s@%s -> %s@%s' % (GIT_REPO, tag1, GIT_REPO, tag2)) + response.mustcontain('%s@%s -> %s@%s' % (GIT_REPO, tag1, GIT_REPO, tag2)) ## outgoing changesets between tags response.mustcontain('''<a href="/%s/changeset/794bbdd31545c199f74912709ea350dedcd189a2">r113:794bbdd31545</a>''' % GIT_REPO) @@ -92,7 +92,7 @@ class TestCompareController(TestController): other_ref='default', )) - response.mustcontain('%s@default -> %s@default' % (HG_REPO, HG_REPO)) + response.mustcontain('%s@default -> %s@default' % (HG_REPO, HG_REPO)) # branch are equal response.mustcontain('<span class="empty_data">No files</span>') response.mustcontain('<span class="empty_data">No changesets</span>') @@ -107,7 +107,7 @@ class TestCompareController(TestController): other_ref='master', )) - response.mustcontain('%s@master -> %s@master' % (GIT_REPO, GIT_REPO)) + response.mustcontain('%s@master -> %s@master' % (GIT_REPO, GIT_REPO)) # branch are equal response.mustcontain('<span class="empty_data">No files</span>') response.mustcontain('<span class="empty_data">No changesets</span>') @@ -124,7 +124,7 @@ class TestCompareController(TestController): other_ref_type="rev", other_ref=rev2, )) - response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_REPO, rev2)) + response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_REPO, rev2)) ## outgoing changesets between those revisions response.mustcontain("""<a href="/%s/changeset/3d8f361e72ab303da48d799ff1ac40d5ac37c67e">r1:%s</a>""" % (HG_REPO, rev2)) @@ -144,7 +144,7 @@ class TestCompareController(TestController): other_ref_type="rev", other_ref=rev2, )) - response.mustcontain('%s@%s -> %s@%s' % (GIT_REPO, rev1, GIT_REPO, rev2)) + response.mustcontain('%s@%s -> %s@%s' % (GIT_REPO, rev1, GIT_REPO, rev2)) ## outgoing changesets between those revisions response.mustcontain("""<a href="/%s/changeset/38b5fe81f109cb111f549bfe9bb6b267e10bc557">r1:%s</a>""" % (GIT_REPO, rev2[:12])) response.mustcontain('1 file changed with 7 insertions and 0 deletions') diff --git a/rhodecode/tests/functional/test_home.py b/rhodecode/tests/functional/test_home.py index a916d560..b23df06c 100644 --- a/rhodecode/tests/functional/test_home.py +++ b/rhodecode/tests/functional/test_home.py @@ -3,6 +3,9 @@ from rhodecode.tests import * from rhodecode.model.meta import Session from rhodecode.model.db import User, RhodeCodeSetting, Repository from rhodecode.lib.utils import set_rhodecode_config +from rhodecode.tests.models.common import _make_repo, _make_group +from rhodecode.model.repo import RepoModel +from rhodecode.model.repos_group import ReposGroupModel class TestHomeController(TestController): @@ -61,18 +64,45 @@ merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232""" Session().add(anon) Session().commit() + def _set_l_dash(self, set_to): + self.app.post(url('admin_setting', setting_id='visual'), + params=dict(_method='put', + rhodecode_lightweight_dashboard=set_to,)) + def test_index_with_lightweight_dashboard(self): self.log_user() - - def set_l_dash(set_to): - self.app.post(url('admin_setting', setting_id='visual'), - params=dict(_method='put', - rhodecode_lightweight_dashboard=set_to,)) - - set_l_dash(True) + self._set_l_dash(True) try: response = self.app.get(url(controller='home', action='index')) response.mustcontain("""var data = {"totalRecords": %s""" % len(Repository.getAll())) finally: - set_l_dash(False) + self._set_l_dash(False) + + def test_index_page_on_groups(self): + self.log_user() + _make_repo(name='gr1/repo_in_group', repos_group=_make_group('gr1')) + Session().commit() + response = self.app.get(url('repos_group_home', group_name='gr1')) + + try: + response.mustcontain("""gr1/repo_in_group""") + finally: + RepoModel().delete('gr1/repo_in_group') + ReposGroupModel().delete(repos_group='gr1', force_delete=True) + Session().commit() + + def test_index_page_on_groups_with_lightweight_dashboard(self): + self.log_user() + self._set_l_dash(True) + _make_repo(name='gr1/repo_in_group', repos_group=_make_group('gr1')) + Session().commit() + response = self.app.get(url('repos_group_home', group_name='gr1')) + + try: + response.mustcontain("""gr1/repo_in_group""") + finally: + self._set_l_dash(False) + RepoModel().delete('gr1/repo_in_group') + ReposGroupModel().delete(repos_group='gr1', force_delete=True) + Session().commit() diff --git a/rhodecode/tests/functional/test_journal.py b/rhodecode/tests/functional/test_journal.py index eb24dc29..e22d3a2f 100644 --- a/rhodecode/tests/functional/test_journal.py +++ b/rhodecode/tests/functional/test_journal.py @@ -10,10 +10,7 @@ class TestJournalController(TestController): self.log_user() response = self.app.get(url(controller='journal', action='index')) - # Test response... - assert """ <span id="follow_toggle_1" class="following" title="Stop following this repository""" in response.body, 'no info about stop follwoing repo id 1' - - assert """<div class="journal_day">%s</div>""" % datetime.date.today() in response.body, 'no info about action journal day' + response.mustcontain("""<div class="journal_day">%s</div>""" % datetime.date.today()) def test_stop_following_repository(self): session = self.log_user() diff --git a/rhodecode/tests/models/test_user_permissions_on_repos.py b/rhodecode/tests/models/test_user_permissions_on_repos.py index bd8841cc..da810542 100644 --- a/rhodecode/tests/models/test_user_permissions_on_repos.py +++ b/rhodecode/tests/models/test_user_permissions_on_repos.py @@ -1 +1 @@ -#TODO; write tests when we activate algo for permissions.
\ No newline at end of file +#TODO; write tests when we activate algo for permissions. diff --git a/rhodecode/tests/scripts/test_vcs_operations.py b/rhodecode/tests/scripts/test_vcs_operations.py index 2e9ca726..1ff86130 100755 --- a/rhodecode/tests/scripts/test_vcs_operations.py +++ b/rhodecode/tests/scripts/test_vcs_operations.py @@ -29,6 +29,7 @@ import os import tempfile import unittest +import time from os.path import join as jn from os.path import dirname as dn @@ -36,9 +37,10 @@ from tempfile import _RandomNameSequence from subprocess import Popen, PIPE from rhodecode.tests import * -from rhodecode.model.db import User, Repository, UserLog +from rhodecode.model.db import User, Repository, UserLog, UserIpMap from rhodecode.model.meta import Session from rhodecode.model.repo import RepoModel +from rhodecode.model.user import UserModel DEBUG = True HOST = '127.0.0.1:5000' # test host @@ -420,3 +422,49 @@ class TestVCSOperations(unittest.TestCase): # Session.remove() # r = Repository.get_by_repo_name(GIT_REPO) # assert r.locked == [None, None] + + def test_ip_restriction_hg(self): + user_model = UserModel() + try: + user_model.add_extra_ip(TEST_USER_ADMIN_LOGIN, '10.10.10.10/32') + Session().commit() + clone_url = _construct_url(HG_REPO) + stdout, stderr = Command('/tmp').execute('hg clone', clone_url) + assert 'abort: HTTP Error 403: Forbidden' in stderr + finally: + #release IP restrictions + for ip in UserIpMap.getAll(): + UserIpMap.delete(ip.ip_id) + Session().commit() + + time.sleep(2) + clone_url = _construct_url(HG_REPO) + stdout, stderr = Command('/tmp').execute('hg clone', clone_url) + + assert 'requesting all changes' in stdout + assert 'adding changesets' in stdout + assert 'adding manifests' in stdout + assert 'adding file changes' in stdout + + assert stderr == '' + + def test_ip_restriction_git(self): + user_model = UserModel() + try: + user_model.add_extra_ip(TEST_USER_ADMIN_LOGIN, '10.10.10.10/32') + Session().commit() + clone_url = _construct_url(GIT_REPO) + stdout, stderr = Command('/tmp').execute('git clone', clone_url) + assert 'error: The requested URL returned error: 403 Forbidden' in stderr + finally: + #release IP restrictions + for ip in UserIpMap.getAll(): + UserIpMap.delete(ip.ip_id) + Session().commit() + + time.sleep(2) + clone_url = _construct_url(GIT_REPO) + stdout, stderr = Command('/tmp').execute('git clone', clone_url) + + assert 'Cloning into' in stdout + assert stderr == '' diff --git a/rhodecode/tests/test_libs.py b/rhodecode/tests/test_libs.py index b0482aef..fe541081 100644 --- a/rhodecode/tests/test_libs.py +++ b/rhodecode/tests/test_libs.py @@ -123,15 +123,16 @@ class TestLibs(unittest.TestCase): from rhodecode.lib.utils2 import age n = datetime.datetime.now() delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs) + prev_month = n.month - 1 if n.month != 1 else n.month - 2 self.assertEqual(age(n), u'just now') self.assertEqual(age(n - delt(seconds=1)), u'1 second ago') self.assertEqual(age(n - delt(seconds=60 * 2)), u'2 minutes ago') self.assertEqual(age(n - delt(hours=1)), u'1 hour ago') self.assertEqual(age(n - delt(hours=24)), u'1 day ago') self.assertEqual(age(n - delt(hours=24 * 5)), u'5 days ago') - self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month - 1]))), + self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[prev_month]))), u'1 month ago') - self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month - 1] + 2))), + self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[prev_month] + 2))), u'1 month and 2 days ago') self.assertEqual(age(n - delt(hours=24 * 400)), u'1 year and 1 month ago') |