mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-17 07:41:26 +00:00
Merge branch '6.0'
Conflicts: media/js/base.js seahub/api2/views.py seahub/views/ajax.py tests/api/test_repo_user_folder_perm.py
This commit is contained in:
64
tests/api/endpoints/admin/test_group_libraries.py
Normal file
64
tests/api/endpoints/admin/test_group_libraries.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import json
|
||||
|
||||
from seaserv import seafile_api
|
||||
from django.core.urlresolvers import reverse
|
||||
from seahub.test_utils import BaseTestCase
|
||||
|
||||
class GroupLibrariesTest(BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.user_name = self.user.username
|
||||
self.admin_name = self.admin.username
|
||||
self.group_id = self.group.id
|
||||
self.repo_id = self.repo.id
|
||||
|
||||
seafile_api.set_group_repo(self.repo_id, self.group_id,
|
||||
self.admin.username, 'r')
|
||||
|
||||
def tearDown(self):
|
||||
self.remove_group()
|
||||
|
||||
def test_can_get(self):
|
||||
self.login_as(self.admin)
|
||||
url = reverse('api-v2.1-admin-group-libraries', args=[self.group_id])
|
||||
resp = self.client.get(url)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['libraries'][0]['repo_id'] == self.repo_id
|
||||
assert json_resp['group_id'] == self.group_id
|
||||
|
||||
def test_can_not_get_if_not_admin(self):
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-libraries', args=[self.group_id])
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
def test_can_unshare(self):
|
||||
|
||||
# make sure repo is shared to group
|
||||
repos = seafile_api.get_repos_by_group(self.group_id)
|
||||
assert len(repos) == 1
|
||||
|
||||
self.login_as(self.admin)
|
||||
url = reverse('api-v2.1-admin-group-library', args=[self.group_id, self.repo_id])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
# make sure repo is unshared
|
||||
repos = seafile_api.get_repos_by_group(self.group_id)
|
||||
assert len(repos) == 0
|
||||
|
||||
def test_can_not_unshare_if_not_admin(self):
|
||||
|
||||
# make sure repo is shared to group
|
||||
repos = seafile_api.get_repos_by_group(self.group_id)
|
||||
assert len(repos) == 1
|
||||
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-library', args=[self.group_id, self.repo_id])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
# make sure repo is unshared
|
||||
repos = seafile_api.get_repos_by_group(self.group_id)
|
||||
assert len(repos) == 1
|
104
tests/api/endpoints/admin/test_group_members.py
Normal file
104
tests/api/endpoints/admin/test_group_members.py
Normal file
@@ -0,0 +1,104 @@
|
||||
import json
|
||||
|
||||
from seaserv import ccnet_api
|
||||
from django.core.urlresolvers import reverse
|
||||
from seahub.test_utils import BaseTestCase
|
||||
|
||||
class GroupMembersTest(BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.user_name = self.user.username
|
||||
self.admin_name = self.admin.username
|
||||
self.group_id = self.group.id
|
||||
self.repo_id = self.repo.id
|
||||
|
||||
def tearDown(self):
|
||||
self.remove_group()
|
||||
|
||||
def test_can_get(self):
|
||||
self.login_as(self.admin)
|
||||
url = reverse('api-v2.1-admin-group-members',
|
||||
args=[self.group_id])
|
||||
resp = self.client.get(url)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['members'][0]['email'] == self.user_name
|
||||
assert json_resp['group_id'] == self.group_id
|
||||
|
||||
def test_can_not_get_if_not_admin(self):
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-members',
|
||||
args=[self.group_id])
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
def test_can_add(self):
|
||||
self.login_as(self.admin)
|
||||
url = reverse('api-v2.1-admin-group-members',
|
||||
args=[self.group_id])
|
||||
|
||||
data = {'email': self.admin_name}
|
||||
resp = self.client.post(url, data)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['success'][0]['group_id'] == self.group_id
|
||||
assert json_resp['success'][0]['email'] == self.admin_name
|
||||
|
||||
def test_can_not_add_if_not_admin(self):
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-members',
|
||||
args=[self.group_id])
|
||||
|
||||
data = {'email': self.admin_name}
|
||||
resp = self.client.post(url, data)
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
def test_can_delete_group_member(self):
|
||||
|
||||
ccnet_api.group_add_member(self.group_id, self.user_name,
|
||||
self.admin_name)
|
||||
|
||||
# make sure member in group
|
||||
members = ccnet_api.get_group_members(self.group_id)
|
||||
assert len(members) == 2
|
||||
|
||||
self.login_as(self.admin)
|
||||
url = reverse('api-v2.1-admin-group-member',
|
||||
args=[self.group_id, self.admin_name])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
# make sure member is deleted
|
||||
members = ccnet_api.get_group_members(self.group_id)
|
||||
assert len(members) == 1
|
||||
|
||||
def test_can_not_delete_if_not_admin(self):
|
||||
|
||||
ccnet_api.group_add_member(self.group_id, self.user_name,
|
||||
self.admin_name)
|
||||
|
||||
# make sure member in group
|
||||
members = ccnet_api.get_group_members(self.group_id)
|
||||
assert len(members) == 2
|
||||
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-member',
|
||||
args=[self.group_id, self.admin_name])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
# make sure member is not deleted
|
||||
members = ccnet_api.get_group_members(self.group_id)
|
||||
assert len(members) == 2
|
||||
|
||||
def test_can_not_delete_group_owner(self):
|
||||
|
||||
# make sure member in group
|
||||
members = ccnet_api.get_group_members(self.group_id)
|
||||
assert len(members) == 1
|
||||
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-group-member',
|
||||
args=[self.group_id, self.user_name])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(403, resp.status_code)
|
@@ -20,6 +20,17 @@ class GroupsTest(BaseTestCase):
|
||||
json_resp = json.loads(resp.content)
|
||||
assert len(json_resp['groups']) > 0
|
||||
|
||||
def test_can_search_by_name(self):
|
||||
self.login_as(self.admin)
|
||||
group_name = self.group.group_name
|
||||
searched_args = group_name[0:1]
|
||||
url = reverse('api-v2.1-admin-groups') + '?name=%s' % searched_args
|
||||
resp = self.client.get(url)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['name'] == searched_args
|
||||
assert searched_args in json_resp['groups'][0]['name']
|
||||
|
||||
def test_get_with_invalid_user_permission(self):
|
||||
self.login_as(self.user)
|
||||
url = reverse('api-v2.1-admin-groups')
|
||||
|
@@ -22,7 +22,7 @@ class SysinfoTest(BaseTestCase):
|
||||
resp = self.client.get(url)
|
||||
json_resp = json.loads(resp.content)
|
||||
|
||||
assert len(json_resp) == 11
|
||||
assert len(json_resp) == 15
|
||||
assert json_resp['is_pro'] is False
|
||||
assert json_resp['multi_tenancy_enabled'] is False
|
||||
assert json_resp['license_maxusers'] == 0
|
||||
@@ -49,6 +49,6 @@ class SysinfoTest(BaseTestCase):
|
||||
resp = self.client.get(url)
|
||||
json_resp = json.loads(resp.content)
|
||||
|
||||
assert len(json_resp) == 11
|
||||
assert len(json_resp) == 15
|
||||
assert json_resp['license_maxusers'] == 500
|
||||
assert json_resp['license_to'] == test_user
|
||||
|
@@ -45,7 +45,7 @@ class AccountTest(BaseTestCase):
|
||||
def _do_update(self):
|
||||
return self.client.put(
|
||||
reverse('api2-account', args=[self.user1.username]),
|
||||
'password=654321&is_staff=1&is_active=0&name=user1¬e=this_is_user1&storage=102400',
|
||||
'password=654321&is_staff=1&is_active=0&name=user1&storage=102400',
|
||||
'application/x-www-form-urlencoded',
|
||||
)
|
||||
|
||||
@@ -77,7 +77,7 @@ class AccountTest(BaseTestCase):
|
||||
|
||||
resp = self._do_get_info()
|
||||
json_resp = json.loads(resp.content)
|
||||
assert len(json_resp) == 7
|
||||
assert len(json_resp) == 9
|
||||
assert json_resp['email'] == self.user1.username
|
||||
assert json_resp['is_staff'] is False
|
||||
assert json_resp['is_active'] is True
|
||||
@@ -101,10 +101,8 @@ class AccountTest(BaseTestCase):
|
||||
self.assertFalse(User.objects.get(self.user1.username).is_active)
|
||||
self.assertEqual(Profile.objects.get_profile_by_user(
|
||||
self.user1.username).nickname, 'user1')
|
||||
self.assertEqual(Profile.objects.get_profile_by_user(
|
||||
self.user1.username).intro, 'this_is_user1')
|
||||
self.assertEqual(seafile_api.get_user_quota(
|
||||
self.user1.username), 102400)
|
||||
self.user1.username), 102400000000)
|
||||
|
||||
def test_refresh_profile_cache_after_update(self):
|
||||
self.login_as(self.admin)
|
||||
|
@@ -1,61 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import json
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from seahub.test_utils import BaseTestCase
|
||||
|
||||
|
||||
class DirentsDownloadLinkViewTest(BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.repo_id = self.repo.id
|
||||
|
||||
self.file_path = self.file
|
||||
self.file_name = os.path.basename(self.file_path)
|
||||
|
||||
self.folder_path = self.folder
|
||||
self.folder_name = os.path.basename(self.folder_path)
|
||||
|
||||
self.url = reverse('api-v2.1-dirents-download-link-view', args=[self.repo_id])
|
||||
|
||||
def tearDown(self):
|
||||
self.remove_repo()
|
||||
|
||||
def test_can_get_download_url(self):
|
||||
self.login_as(self.user)
|
||||
parent_dir = '/'
|
||||
dirents = self.file_name + ',' + self.folder_name
|
||||
url = self.url + '?parent_dir=%s&dirents=%s' % (parent_dir, dirents)
|
||||
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
assert '8082' in json_resp['url']
|
||||
|
||||
def test_args_invalid(self):
|
||||
self.login_as(self.user)
|
||||
parent_dir = '/'
|
||||
dirents = self.file_name + ',' + self.folder_name
|
||||
|
||||
url = self.url + '?prent_dir=%s&dirents=%s' % (parent_dir, dirents)
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(400, resp.status_code)
|
||||
|
||||
url = self.url + '?parent_dir=%s&dirent=%s' % (parent_dir, dirents)
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(400, resp.status_code)
|
||||
|
||||
url = self.url + '?parent_dir=%s&dirents=%s' % (parent_dir+'invalid', dirents)
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(404, resp.status_code)
|
||||
|
||||
def test_permission_invalid(self):
|
||||
self.login_as(self.admin)
|
||||
parent_dir = '/'
|
||||
dirents = self.file_name + ',' + self.folder_name
|
||||
|
||||
url = self.url + '?parent_dir=%s&dirents=%s' % (parent_dir, dirents)
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(403, resp.status_code)
|
@@ -4,9 +4,12 @@ from mock import patch
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test import override_settings
|
||||
|
||||
from seahub.contacts.models import Contact
|
||||
from seahub.profile.models import Profile
|
||||
from seahub.profile.utils import refresh_cache
|
||||
from seahub.api2.endpoints.search_user import SearchUser
|
||||
from seahub.test_utils import BaseTestCase
|
||||
from tests.common.utils import randstring
|
||||
|
||||
class SearchUserTest(BaseTestCase):
|
||||
def setUp(self):
|
||||
@@ -154,3 +157,34 @@ class SearchUserTest(BaseTestCase):
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert json_resp['users'][0]['email'] == self.admin.username
|
||||
|
||||
@patch.object(SearchUser, '_can_use_global_address_book')
|
||||
def test_search_when_not_use_global_address_book(self, mock_can_use_global_address_book):
|
||||
|
||||
mock_can_use_global_address_book.return_value = False
|
||||
|
||||
contact_email = '%s@%s.com' % (randstring(6), randstring(6))
|
||||
|
||||
p = Profile.objects.add_or_update(self.admin.username, nickname='')
|
||||
p.contact_email = contact_email
|
||||
p.save()
|
||||
|
||||
# search with valid email
|
||||
resp = self.client.get(self.endpoint + '?q=%s' % contact_email)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert json_resp['users'][0]['email'] == self.admin.username
|
||||
|
||||
# search with invalid email & has no contacts
|
||||
resp = self.client.get(self.endpoint + '?q=%s' % contact_email[:6])
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert len(json_resp['users']) == 0
|
||||
|
||||
# search with invalid email & has contact
|
||||
nickname_of_admin = randstring(6)
|
||||
Contact.objects.add_contact(self.user.username, self.admin.username)
|
||||
Profile.objects.add_or_update(self.admin.username, nickname=nickname_of_admin)
|
||||
resp = self.client.get(self.endpoint + '?q=%s' % nickname_of_admin)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert json_resp['users'][0]['email'] == self.admin.username
|
||||
|
@@ -5,7 +5,9 @@ from django.core.urlresolvers import reverse
|
||||
|
||||
from seaserv import seafile_api
|
||||
|
||||
from seahub.profile.models import Profile
|
||||
from seahub.test_utils import BaseTestCase
|
||||
from tests.common.utils import randstring
|
||||
|
||||
class SharedFoldersTest(BaseTestCase):
|
||||
|
||||
@@ -34,21 +36,47 @@ class SharedFoldersTest(BaseTestCase):
|
||||
self.admin_user = self.admin.username
|
||||
self.url = reverse('api-v2.1-shared-folders')
|
||||
|
||||
sub_repo_id = self.create_virtual_repo()
|
||||
self.share_repo_to_user(sub_repo_id)
|
||||
self.share_repo_to_group(sub_repo_id)
|
||||
self.sub_repo_id = self.create_virtual_repo()
|
||||
|
||||
def tearDown(self):
|
||||
seafile_api.remove_share(self.repo_id, self.user_name, self.admin_user)
|
||||
seafile_api.unset_group_repo(self.repo_id, self.group_id, self.user_name)
|
||||
seafile_api.remove_inner_pub_repo(self.repo_id)
|
||||
|
||||
self.remove_repo()
|
||||
|
||||
def test_can_get(self):
|
||||
def test_can_get_when_share_to_user(self):
|
||||
self.share_repo_to_user(self.sub_repo_id)
|
||||
|
||||
contact_email = '%s@%s.com' % (randstring(6), randstring(6))
|
||||
nickname = randstring(6)
|
||||
p = Profile.objects.add_or_update(self.admin.username, nickname=nickname)
|
||||
p.contact_email = contact_email
|
||||
p.save()
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.get(self.url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp[0]['share_type'] == 'personal'
|
||||
assert json_resp[1]['share_type'] == 'group'
|
||||
assert json_resp[0]['repo_id'] == self.repo_id
|
||||
assert json_resp[0]['user_email'] == self.admin.username
|
||||
assert json_resp[0]['user_name'] == nickname
|
||||
assert json_resp[0]['contact_email'] == contact_email
|
||||
|
||||
def test_can_get_when_share_to_group(self):
|
||||
|
||||
self.share_repo_to_group(self.sub_repo_id)
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.get(self.url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp[0]['share_type'] == 'group'
|
||||
assert json_resp[0]['repo_id'] == self.repo_id
|
||||
assert json_resp[0]['group_id'] == self.group_id
|
||||
|
||||
def test_get_with_invalid_repo_permission(self):
|
||||
# login with admin, then get user's share repo info
|
||||
|
@@ -5,7 +5,9 @@ from django.core.urlresolvers import reverse
|
||||
import seaserv
|
||||
from seaserv import seafile_api
|
||||
|
||||
from seahub.profile.models import Profile
|
||||
from seahub.test_utils import BaseTestCase
|
||||
from tests.common.utils import randstring
|
||||
|
||||
class SharedReposTest(BaseTestCase):
|
||||
|
||||
@@ -31,21 +33,53 @@ class SharedReposTest(BaseTestCase):
|
||||
self.url = reverse('api-v2.1-shared-repos')
|
||||
|
||||
def tearDown(self):
|
||||
seafile_api.remove_share(self.repo_id, self.user_name, self.admin_name)
|
||||
seafile_api.unset_group_repo(self.repo_id, self.group_id, self.user_name)
|
||||
seafile_api.remove_inner_pub_repo(self.repo_id)
|
||||
|
||||
self.remove_repo()
|
||||
|
||||
def test_can_get(self):
|
||||
def test_can_get_when_share_to_user(self):
|
||||
self.share_repo_to_user()
|
||||
|
||||
contact_email = '%s@%s.com' % (randstring(6), randstring(6))
|
||||
nickname = randstring(6)
|
||||
p = Profile.objects.add_or_update(self.admin_name, nickname=nickname)
|
||||
p.contact_email = contact_email
|
||||
p.save()
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.get(self.url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
|
||||
assert json_resp[0]['share_type'] == 'personal'
|
||||
assert json_resp[0]['repo_id'] == self.repo_id
|
||||
assert json_resp[0]['user_email'] == self.admin_name
|
||||
assert json_resp[0]['user_name'] == nickname
|
||||
assert json_resp[0]['contact_email'] == contact_email
|
||||
|
||||
def test_can_get_when_share_to_group(self):
|
||||
self.share_repo_to_group()
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.get(self.url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
|
||||
assert json_resp[0]['share_type'] == 'group'
|
||||
assert json_resp[0]['repo_id'] == self.repo_id
|
||||
assert json_resp[0]['group_id'] == self.group_id
|
||||
|
||||
def test_can_get_when_share_to_public(self):
|
||||
self.share_repo_to_public()
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.get(self.url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp[0]['share_type'] == 'personal'
|
||||
assert json_resp[1]['share_type'] == 'group'
|
||||
assert json_resp[2]['share_type'] == 'public'
|
||||
|
||||
assert json_resp[0]['share_type'] == 'public'
|
||||
|
||||
def test_get_with_invalid_repo_permission(self):
|
||||
self.share_repo_to_user()
|
||||
|
Reference in New Issue
Block a user