mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-01 07:01:12 +00:00
serach-repo
This commit is contained in:
@@ -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,
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user