mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-29 03:35:08 +00:00
103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
import json
|
|
import pytest
|
|
from mock import patch
|
|
|
|
from django.urls import reverse
|
|
|
|
from seahub.test_utils import BaseTestCase, TRAVIS
|
|
|
|
from seaserv import seafile_api
|
|
|
|
try:
|
|
from seahub.settings import LOCAL_PRO_DEV_ENV
|
|
except ImportError:
|
|
LOCAL_PRO_DEV_ENV = False
|
|
|
|
|
|
class SearchTest(BaseTestCase):
|
|
def setUp(self):
|
|
self.file_path = self.file
|
|
self.repo_id = self.repo.id
|
|
self.url = reverse('api_search')
|
|
|
|
self.mock_total = 15
|
|
self.mock_results = [
|
|
{
|
|
"repo_owner_name": "name",
|
|
"repo_id": self.repo_id,
|
|
"name": "lian.png",
|
|
"repo_owner_contact_email": "freeplant@163.com",
|
|
"repo_owner_email": "freeplant@163.com",
|
|
"last_modified": 1469415777,
|
|
"content_highlight": "",
|
|
"fullpath": self.file_path,
|
|
"repo_name": "seafile-design",
|
|
"is_dir": False,
|
|
"size": 142758,
|
|
"repo": seafile_api.get_repo(self.repo_id)
|
|
},
|
|
]
|
|
|
|
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
|
@patch('seahub.api2.views.search_files')
|
|
@patch('seahub.api2.views.is_pro_version')
|
|
@pytest.mark.skipif(TRAVIS, reason="")
|
|
def test_can_search_file(self, mock_search_files, mock_is_pro_version):
|
|
if not LOCAL_PRO_DEV_ENV:
|
|
return
|
|
|
|
mock_is_pro_version.return_value = True
|
|
mock_search_files.return_value = self.mock_results, \
|
|
self.mock_total
|
|
|
|
self.login_as(self.user)
|
|
resp = self.client.get(self.url + '?q=lian')
|
|
self.assertEqual(200, resp.status_code)
|
|
|
|
json_resp = json.loads(resp.content)
|
|
|
|
assert json_resp['total'] == self.mock_total
|
|
assert json_resp['results'][0]['repo_id'] == self.mock_results[0]['repo_id']
|
|
|
|
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
|
@patch('seahub.api2.views.is_pro_version')
|
|
def test_can_not_search_with_invalid_repo_permission(self, mock_is_pro_version):
|
|
if not LOCAL_PRO_DEV_ENV:
|
|
return
|
|
|
|
mock_is_pro_version.return_value = True
|
|
self.login_as(self.admin)
|
|
resp = self.client.get(self.url + '?q=lian&search_repo=%s' %
|
|
self.repo_id)
|
|
self.assertEqual(403, resp.status_code)
|
|
|
|
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
|
@patch('seahub.api2.views.is_pro_version')
|
|
def test_can_not_search_without_q_parameter(self, mock_is_pro_version):
|
|
if not LOCAL_PRO_DEV_ENV:
|
|
return
|
|
|
|
mock_is_pro_version.return_value = True
|
|
self.login_as(self.user)
|
|
resp = self.client.get(self.url)
|
|
self.assertEqual(400, resp.status_code)
|
|
|
|
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
|
@patch('seahub.api2.views.search_files')
|
|
@patch('seahub.api2.views.is_pro_version')
|
|
@pytest.mark.skipif(TRAVIS, reason="")
|
|
def test_can_search_with_search_path(self, mock_search_files, mock_is_pro_version):
|
|
if not LOCAL_PRO_DEV_ENV:
|
|
return
|
|
|
|
mock_is_pro_version.return_value = True
|
|
mock_search_files.return_value = self.mock_results, \
|
|
self.mock_total
|
|
|
|
self.login_as(self.user)
|
|
resp = self.client.get(self.url + '?q=lian&search_repo=%s&search_path=%s' % (self.repo_id, '/'))
|
|
json_resp = json.loads(resp.content)
|
|
print(json_resp)
|
|
assert json_resp['total'] == self.mock_total
|
|
assert json_resp['results'][0]['repo_id'] == self.mock_results[0]['repo_id']
|