1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-12 13:24:52 +00:00

serach-repo

This commit is contained in:
zming
2017-09-18 14:50:00 +08:00
parent 6864bfeccd
commit a141f2beac
2 changed files with 179 additions and 0 deletions

View File

@@ -418,6 +418,7 @@ class Repos(APIView):
'org': False, 'org': False,
} }
q = request.GET.get('nameContains', '')
rtype = request.GET.get('type', "") rtype = request.GET.get('type', "")
if not rtype: if not rtype:
# set all to True, no filter applied # set all to True, no filter applied
@@ -457,6 +458,9 @@ class Repos(APIView):
if r.is_virtual: if r.is_virtual:
continue continue
if q and q.lower() not in r.name.lower():
continue
repo = { repo = {
"type": "repo", "type": "repo",
"id": r.id, "id": r.id,
@@ -501,6 +505,9 @@ class Repos(APIView):
shared_repos.sort(lambda x, y: cmp(y.last_modify, x.last_modify)) shared_repos.sort(lambda x, y: cmp(y.last_modify, x.last_modify))
for r in shared_repos: for r in shared_repos:
if q and q.lower() not in r.name.lower():
continue
r.password_need = is_passwd_set(r.repo_id, email) r.password_need = is_passwd_set(r.repo_id, email)
repo = { repo = {
"type": "srepo", "type": "srepo",
@@ -545,6 +552,9 @@ class Repos(APIView):
nickname_dict[e] = email2nickname(e) nickname_dict[e] = email2nickname(e)
for r in group_repos: for r in group_repos:
if q and q.lower() not in r.name.lower():
continue
repo = { repo = {
"type": "grepo", "type": "grepo",
"id": r.id, "id": r.id,
@@ -576,6 +586,9 @@ class Repos(APIView):
nickname_dict[e] = email2nickname(e) nickname_dict[e] = email2nickname(e)
for r in public_repos: for r in public_repos:
if q and q.lower() not in r.name.lower():
continue
repo = { repo = {
"type": "grepo", "type": "grepo",
"id": r.repo_id, "id": r.repo_id,

View File

@@ -1,12 +1,22 @@
"""seahub/api2/views.py::Repo api tests. """seahub/api2/views.py::Repo api tests.
""" """
import json import json
from mock import patch
from constance import config
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.template.defaultfilters import filesizeformat
from seaserv import seafile_api
from seahub.share.models import FileShare, UploadLinkShare from seahub.share.models import FileShare, UploadLinkShare
from seahub.test_utils import BaseTestCase from seahub.test_utils import BaseTestCase
class RepoTest(BaseTestCase): class RepoTest(BaseTestCase):
def setUp(self):
self.clear_cache()
self.login_as(self.user)
self.url = reverse('api2-repos')
self.repo_id = self.repo
def test_can_fetch(self): def test_can_fetch(self):
self.login_as(self.user) self.login_as(self.user)
@@ -84,3 +94,159 @@ class RepoTest(BaseTestCase):
resp = self.client.post(reverse('api2-repo', args=[self.repo.id])+'?op=checkpassword&magic=123') resp = self.client.post(reverse('api2-repo', args=[self.repo.id])+'?op=checkpassword&magic=123')
self.assertEqual(500, resp.status_code) self.assertEqual(500, resp.status_code)
def test_can_search(self):
resp = self.client.get(self.url + "?type=mine&nameContains=t")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == self.repo.id][0]
assert res_repo['type'] == 'repo'
assert res_repo['id'] == self.repo.id
assert res_repo['owner'] == self.user.email
assert res_repo['name'] == self.repo.name
assert res_repo['mtime'] == self.repo.last_modify
assert res_repo['modifier_email'] == self.repo.last_modifier
assert res_repo['size'] == self.repo.size
assert res_repo['size_formatted'] == filesizeformat(self.repo.size)
assert res_repo['encrypted'] == self.repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['virtual'] == False
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == self.repo.head_cmmt_id
assert res_repo['version'] == self.repo.version
self.remove_repo(self.repo.id)
def test_can_not_case_sensitive(self):
resp = self.client.get(self.url + "?type=mine&nameContains=T")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == self.repo.id][0]
assert res_repo['type'] == 'repo'
assert res_repo['id'] == self.repo.id
assert res_repo['owner'] == self.user.email
assert res_repo['name'] == self.repo.name
assert res_repo['mtime'] == self.repo.last_modify
assert res_repo['modifier_email'] == self.repo.last_modifier
assert res_repo['size'] == self.repo.size
assert res_repo['size_formatted'] == filesizeformat(self.repo.size)
assert res_repo['encrypted'] == self.repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['virtual'] == False
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == self.repo.head_cmmt_id
assert res_repo['version'] == self.repo.version
self.remove_repo(self.repo.id)
def test_can_get_all_own_repo_with_no_parameter(self):
resp = self.client.get(self.url + "?type=mine")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == self.repo.id][0]
assert res_repo['type'] == 'repo'
assert res_repo['id'] == self.repo.id
assert res_repo['owner'] == self.user.email
assert res_repo['name'] == self.repo.name
assert res_repo['mtime'] == self.repo.last_modify
assert res_repo['modifier_email'] == self.repo.last_modifier
assert res_repo['size'] == self.repo.size
assert res_repo['size_formatted'] == filesizeformat(self.repo.size)
assert res_repo['encrypted'] == self.repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['virtual'] == False
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == self.repo.head_cmmt_id
self.remove_repo(self.repo.id)
def test_can_get_share_repo(self):
self.logout()
self.login_as(self.admin)
share_repo = seafile_api.get_repo(self.create_repo(
name='test-share-repo', desc='', username=self.admin.username,
passwd=None))
share_url = reverse('api2-dir-shared-items', kwargs=dict(repo_id=share_repo.id))
data = "share_type=user&permission=rw&username=%s" % self.user.username
self.client.put(share_url, data, 'application/x-www-form-urlencoded')
self.logout()
self.login_as(self.user)
resp = self.client.get(self.url + "?nameContaines=sh")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == share_repo.id and e['type'] == 'srepo'][0]
assert res_repo['type'] == 'srepo'
assert res_repo['id'] == share_repo.id
assert res_repo['owner'] == self.admin.email
assert res_repo['name'] == share_repo.name
assert res_repo['mtime'] == share_repo.last_modify
assert res_repo['modifier_email'] == share_repo.last_modifier
assert res_repo['size'] == share_repo.size
assert res_repo['size_formatted'] == filesizeformat(share_repo.size)
assert res_repo['encrypted'] == share_repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == share_repo.head_cmmt_id
self.remove_repo(share_repo.id)
def test_can_get_share_group_repo(self):
config.ENABLE_SHARE_TO_ALL_GROUPS = True
self.logout()
self.login_as(self.admin)
share_repo = seafile_api.get_repo(self.create_repo(
name='test-group-repo', desc='', username=self.admin.username,
passwd=None))
share_group_url = reverse('api2-dir-shared-items', kwargs=dict(repo_id=share_repo.id))
data = "share_type=group&permission=rw&group_id=%s" % self.group.id
self.client.put(share_group_url, data, 'application/x-www-form-urlencoded')
self.logout()
self.login_as(self.user)
resp = self.client.get(self.url + "?nameContaines=group")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == share_repo.id and e['type'] == 'grepo'][0]
assert res_repo['id'] == share_repo.id
assert res_repo['owner'] == self.group.group_name
assert res_repo['name'] == share_repo.name
assert res_repo['mtime'] == share_repo.last_modify
assert res_repo['modifier_email'] == share_repo.last_modifier
assert res_repo['size'] == share_repo.size
assert res_repo['encrypted'] == share_repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == share_repo.head_cmmt_id
assert res_repo['version'] == share_repo.version
self.remove_repo(share_repo.id)
@patch('seahub.base.accounts.UserPermissions.can_view_org')
def test_can_search_public_repos(self, mock_can_view_org):
mock_can_view_org.return_value = True
self.logout()
self.login_as(self.admin)
share_group_url = reverse('api2-pub-repos')
data = "name=public-repo&permission=rw"
pub_repo = self.client.post(share_group_url, data, 'application/x-www-form-urlencoded')
share_repo_id = json.loads(pub_repo.content)
share_repo = seafile_api.get_repo(share_repo_id['id'])
self.logout()
self.login_as(self.user)
resp = self.client.get(self.url + "?q=publi")
resp_json = json.loads(resp.content)
assert self.repo.id in [e['id'] for e in resp_json]
res_repo = [e for e in resp_json if e['id'] == share_repo.id and e['owner'] == 'Organization'][0]
assert res_repo['id'] == share_repo.id
assert res_repo['owner'] == 'Organization'
assert res_repo['name'] == share_repo.name
assert res_repo['mtime'] == share_repo.last_modify
assert res_repo['modifier_email'] == share_repo.last_modifier
assert res_repo['size'] == share_repo.size
assert res_repo['size_formatted'] == filesizeformat(share_repo.size)
assert res_repo['encrypted'] == share_repo.encrypted
assert res_repo['permission'] == 'rw'
assert res_repo['share_from'] == self.admin.email
assert res_repo['share_type'] == 'public'
assert res_repo['root'] == ''
assert res_repo['head_commit_id'] == share_repo.head_cmmt_id
assert res_repo['version'] == share_repo.version