diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 6fa3d9519b..0d33a0b587 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -57,7 +57,7 @@ from seahub.message.models import UserMessage from seahub.notifications.models import UserNotification from seahub.options.models import UserOptions from seahub.contacts.models import Contact -from seahub.profile.models import Profile +from seahub.profile.models import Profile, DetailedProfile from seahub.shortcuts import get_first_object_or_none from seahub.signals import (repo_created, repo_deleted, share_file_to_user_successful) @@ -238,10 +238,17 @@ class AccountInfo(APIView): def get(self, request, format=None): info = {} email = request.user.username + p = Profile.objects.get_profile_by_user(email) + d_p = DetailedProfile.objects.get_detailed_profile_by_user(email) + info['email'] = email - info['nickname'] = email2nickname(email) + info['name'] = email2nickname(email) info['total'] = seafile_api.get_user_quota(email) info['usage'] = seafile_api.get_user_self_usage(email) + info['login_id'] = p.login_id if p else "" + info['department'] = d_p.department if d_p else "" + info['contact_email'] = p.contact_email if p else "" + info['institution'] = p.institution if p else "" return Response(info) @@ -372,6 +379,13 @@ class SearchUser(APIView): def format_user_result(request, users, size): results = [] + + # Get contact_emails from users' profiles + profiles = Profile.objects.filter(user__in=users) + contact_email_dict = {} + for e in profiles: + contact_email_dict[e.user] = e.contact_email + for email in users: url, is_default, date_uploaded = api_avatar_url(email, size) results.append({ @@ -379,6 +393,7 @@ def format_user_result(request, users, size): "avatar": avatar(email, size), "avatar_url": request.build_absolute_uri(url), "name": email2nickname(email), + "contact_email": contact_email_dict.get(email, ""), }) return results @@ -2261,6 +2276,11 @@ class DirView(APIView): create_parents = request.POST.get('create_parents', '').lower() in ('true', '1') if not create_parents: + # check whether parent dir exists + if not seafile_api.get_dir_id_by_path(repo_id, parent_dir): + return api_error(status.HTTP_400_BAD_REQUEST, + 'Parent dir does not exist') + new_dir_name = os.path.basename(path) new_dir_name_utf8 = check_filename_with_rename_utf8(repo_id, parent_dir, diff --git a/seahub/base/accounts.py b/seahub/base/accounts.py index d1644ed6b3..6625d4d1f2 100644 --- a/seahub/base/accounts.py +++ b/seahub/base/accounts.py @@ -93,7 +93,6 @@ class UserManager(object): user.org = emailuser.org user.source = emailuser.source user.role = emailuser.role - user.source = emailuser.source return user @@ -293,7 +292,6 @@ class AuthBackend(object): user.org = emailuser.org user.source = emailuser.source user.role = emailuser.role - user.source = emailuser.source return user diff --git a/tests/api/test_accounts.py b/tests/api/test_accounts.py index 135150266c..859f378a36 100644 --- a/tests/api/test_accounts.py +++ b/tests/api/test_accounts.py @@ -18,6 +18,10 @@ class AccountsApiTest(ApiTestBase): self.assertEqual(info['email'], self.username) self.assertIsNotNone(info['total']) self.assertIsNotNone(info['usage']) + self.assertIsNotNone(info['login_id']) + self.assertIsNotNone(info['department']) + self.assertIsNotNone(info['contact_email']) + self.assertIsNotNone(info['institution']) def test_list_accounts(self): # Normal user can not list accounts diff --git a/tests/api/test_dir.py b/tests/api/test_dir.py new file mode 100644 index 0000000000..771266326b --- /dev/null +++ b/tests/api/test_dir.py @@ -0,0 +1,37 @@ +import json +import os + +from django.core.urlresolvers import reverse + +from seahub.test_utils import BaseTestCase + +class DirTest(BaseTestCase): + def setUp(self): + self.login_as(self.user) + self.endpoint = reverse('DirView', args=[self.repo.id]) + self.folder_name = os.path.basename(self.folder) + + def tearDown(self): + self.remove_repo() + + def test_can_list(self): + resp = self.client.get(self.endpoint) + json_resp = json.loads(resp.content) + + self.assertEqual(200, resp.status_code) + assert len(json_resp) == 1 + assert self.folder_name == json_resp[0]['name'] + + def test_can_create(self): + resp = self.client.post(self.endpoint + '?p=/new_dir', { + 'operation': 'mkdir' + }) + + self.assertEqual(201, resp.status_code) + + def test_create_with_nonexistent_parent(self): + resp = self.client.post(self.endpoint + '?p=/new_parent/new_dir', { + 'operation': 'mkdir' + }) + + self.assertEqual(400, resp.status_code) diff --git a/tests/api/test_search_user.py b/tests/api/test_search_user.py new file mode 100644 index 0000000000..268d791d2b --- /dev/null +++ b/tests/api/test_search_user.py @@ -0,0 +1,27 @@ +import json + +from django.core.urlresolvers import reverse + +from seahub.profile.models import Profile +from seahub.test_utils import BaseTestCase + +class SearchUserTest(BaseTestCase): + def setUp(self): + self.login_as(self.user) + self.endpoint = reverse('search-user') + + def test_can_search(self): + p = Profile.objects.add_or_update(self.user.email, nickname="test") + p.contact_email = 'new_mail@test.com' + p.save() + + resp = self.client.get(self.endpoint + '?q=' + self.user.email) + json_resp = json.loads(resp.content) + + self.assertEqual(200, resp.status_code) + assert json_resp['users'] is not None + assert json_resp['users'][0]['email'] == self.user.email + assert json_resp['users'][0]['avatar'] is not None + assert json_resp['users'][0]['avatar_url'] is not None + assert json_resp['users'][0]['name'] == 'test' + assert json_resp['users'][0]['contact_email'] == 'new_mail@test.com'