1
0
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:
zhengxie
2017-02-17 17:11:33 +08:00
176 changed files with 44016 additions and 40721 deletions

View 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

View 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)

View File

@@ -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')

View File

@@ -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

View File

@@ -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&note=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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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()