1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 07:01:12 +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,
}
q = request.GET.get('nameContains', '')
rtype = request.GET.get('type', "")
if not rtype:
# set all to True, no filter applied
@@ -457,6 +458,9 @@ class Repos(APIView):
if r.is_virtual:
continue
if q and q.lower() not in r.name.lower():
continue
repo = {
"type": "repo",
"id": r.id,
@@ -501,6 +505,9 @@ class Repos(APIView):
shared_repos.sort(lambda x, y: cmp(y.last_modify, x.last_modify))
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)
repo = {
"type": "srepo",
@@ -545,6 +552,9 @@ class Repos(APIView):
nickname_dict[e] = email2nickname(e)
for r in group_repos:
if q and q.lower() not in r.name.lower():
continue
repo = {
"type": "grepo",
"id": r.id,
@@ -576,6 +586,9 @@ class Repos(APIView):
nickname_dict[e] = email2nickname(e)
for r in public_repos:
if q and q.lower() not in r.name.lower():
continue
repo = {
"type": "grepo",
"id": r.repo_id,

View File

@@ -1,12 +1,22 @@
"""seahub/api2/views.py::Repo api tests.
"""
import json
from mock import patch
from constance import config
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.test_utils import 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):
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')
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