mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-30 17:02:15 +00:00
188 lines
7.3 KiB
Python
188 lines
7.3 KiB
Python
import json
|
|
|
|
from django.core.urlresolvers import reverse
|
|
import seaserv
|
|
from seaserv import seafile_api
|
|
|
|
from seahub.base.accounts import User
|
|
from seahub.base.templatetags.seahub_tags import email2nickname
|
|
from seahub.profile.models import Profile
|
|
from seahub.test_utils import BaseTestCase
|
|
from tests.common.utils import randstring
|
|
|
|
class AccountTest(BaseTestCase):
|
|
def setUp(self):
|
|
self.user1 = self.create_user('user_%s@test.com' % randstring(4),
|
|
is_staff=False)
|
|
self.user2 = self.create_user('user_%s@test.com' % randstring(4),
|
|
is_staff=False)
|
|
|
|
def tearDown(self):
|
|
self.remove_user(self.user1.username)
|
|
self.remove_user(self.user2.username)
|
|
|
|
def _do_create(self):
|
|
resp = self.client.put(
|
|
reverse('api2-account', args=['new_user@test.com']),
|
|
'password=123456&is_staff=1&is_active=1',
|
|
'application/x-www-form-urlencoded',
|
|
)
|
|
# manually remove this account
|
|
self.remove_user(email='new_user@test.com')
|
|
return resp
|
|
|
|
def _do_get_info(self):
|
|
return self.client.get(reverse('api2-account', args=[self.user1.email]))
|
|
|
|
def _do_migrate(self):
|
|
return self.client.post(
|
|
reverse('api2-account', args=[self.user1.username]), {
|
|
'op': 'migrate',
|
|
'to_user': self.user2.username,
|
|
}
|
|
)
|
|
|
|
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',
|
|
'application/x-www-form-urlencoded',
|
|
)
|
|
|
|
def _do_delete(self):
|
|
return self.client.delete(
|
|
reverse('api2-account', args=[self.user1.username])
|
|
)
|
|
|
|
def test_permission_error(self):
|
|
self.login_as(self.user)
|
|
|
|
resp = self._do_create()
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
resp = self._do_get_info()
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
resp = self._do_update()
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
resp = self._do_migrate()
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
resp = self._do_delete()
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
def test_get_info(self):
|
|
self.login_as(self.admin)
|
|
|
|
resp = self._do_get_info()
|
|
json_resp = json.loads(resp.content)
|
|
assert len(json_resp) == 7
|
|
assert json_resp['email'] == self.user1.username
|
|
assert json_resp['is_staff'] is False
|
|
assert json_resp['is_active'] is True
|
|
assert json_resp['usage'] == 0
|
|
|
|
def test_create(self):
|
|
self.login_as(self.admin)
|
|
|
|
resp = self._do_create()
|
|
self.assertEqual(201, resp.status_code)
|
|
|
|
def test_update(self):
|
|
self.login_as(self.admin)
|
|
|
|
resp = self._do_update()
|
|
self.assertEqual(200, resp.status_code)
|
|
|
|
self.assertTrue(User.objects.get(self.user1.username).check_password(
|
|
'654321'))
|
|
self.assertTrue(User.objects.get(self.user1.username).is_staff)
|
|
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)
|
|
|
|
def test_refresh_profile_cache_after_update(self):
|
|
self.login_as(self.admin)
|
|
self.assertEqual(email2nickname(self.user1.username),
|
|
self.user1.username.split('@')[0])
|
|
|
|
resp = self._do_update()
|
|
self.assertEqual(200, resp.status_code)
|
|
|
|
self.assertEqual(email2nickname(self.user1.username), 'user1')
|
|
|
|
def test_migrate(self):
|
|
self.login_as(self.admin)
|
|
|
|
# user1 created a repo
|
|
user1_repo = self.create_repo(name='user1-repo', desc='',
|
|
username=self.user1.username,
|
|
passwd=None)
|
|
user1_repos = seafile_api.get_owned_repo_list(self.user1.username)
|
|
self.assertEqual(len(user1_repos), 1)
|
|
self.assertEqual(user1_repos[0].id, user1_repo)
|
|
|
|
# user1 created a group and joined a group created by the other
|
|
user1_group = self.create_group(group_name='test_group',
|
|
username=self.user1.username)
|
|
other_group = self.create_group(group_name='other_group',
|
|
username=self.user.username)
|
|
seaserv.ccnet_threaded_rpc.group_add_member(other_group.id,
|
|
self.user.username,
|
|
self.user1.username)
|
|
|
|
user1_groups = seaserv.get_personal_groups_by_user(self.user1.username)
|
|
self.assertEqual(len(user1_groups), 2)
|
|
self.assertEqual(user1_groups[0].id, user1_group.id)
|
|
self.assertEqual(user1_groups[0].creator_name, self.user1.username)
|
|
self.assertEqual(user1_groups[1].id, other_group.id)
|
|
self.assertEqual(user1_groups[1].creator_name, self.user.username)
|
|
|
|
# user2 had no repos
|
|
user2_repos = seafile_api.get_owned_repo_list(self.user2.username)
|
|
self.assertEqual(len(user2_repos), 0)
|
|
# user2 had no groups
|
|
user2_groups = seaserv.get_personal_groups_by_user(self.user2.username)
|
|
self.assertEqual(len(user2_groups), 0)
|
|
|
|
# admin migrate account user1 to account user2
|
|
resp = self._do_migrate()
|
|
self.assertEqual(200, resp.status_code)
|
|
|
|
### Verify ###
|
|
# user1 should have no repos
|
|
new_user1_repos = seafile_api.get_owned_repo_list(self.user1.username)
|
|
self.assertEqual(len(new_user1_repos), 0)
|
|
# user1 should still in two groups, except not the creator anymore in
|
|
# the first group, but second group should remain the same
|
|
user1_groups = seaserv.get_personal_groups_by_user(self.user1.username)
|
|
self.assertEqual(len(user1_groups), 2)
|
|
self.assertEqual(user1_groups[0].id, user1_group.id)
|
|
self.assertNotEqual(user1_groups[0].creator_name, self.user1.username)
|
|
self.assertEqual(user1_groups[1].id, other_group.id)
|
|
self.assertEqual(user1_groups[1].creator_name, self.user.username)
|
|
|
|
# user2 should have the repo used to be user1's
|
|
new_user2_repos = seafile_api.get_owned_repo_list(self.user2.username)
|
|
self.assertEqual(len(new_user2_repos), 1)
|
|
self.assertEqual(new_user2_repos[0].id, user1_repo)
|
|
# user2 should be in two groups, and is the creator of first group,
|
|
# but second group should remain the same
|
|
user2_groups = seaserv.get_personal_groups_by_user(self.user2.username)
|
|
self.assertEqual(len(user2_groups), 2)
|
|
self.assertEqual(user2_groups[0].id, user1_group.id)
|
|
self.assertEqual(user2_groups[0].creator_name, self.user2.username)
|
|
self.assertEqual(user2_groups[1].id, other_group.id)
|
|
self.assertEqual(user2_groups[1].creator_name, self.user.username)
|
|
|
|
def test_delete(self):
|
|
self.login_as(self.admin)
|
|
|
|
resp = self._do_delete()
|
|
self.assertEqual(200, resp.status_code)
|