1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-06-25 14:43:15 +00:00
seahub/tests/api/test_files.py
2014-09-05 13:51:44 +08:00

181 lines
6.9 KiB
Python

from apitestbase import DEFAULT_LIBRARY_URL, get_authed_instance
from apitestbase import LIBRARIES_URL
import unittest
class FilesApiTestCase(unittest.TestCase):
def setUp(self):
self.requests = get_authed_instance()
self.assertIsNotNone(self.requests)
res = self.requests.post(DEFAULT_LIBRARY_URL)
self.rid = res.json()['repo_id']
self.rurl = LIBRARIES_URL + str(self.rid) + u'/'
self.furl = self.rurl + u'file/'
def test_create_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test.c'
res = self.requests.post(furl, data=data)
self.assertEqual(res.status_code, 201)
self.assertEqual(res.text, '"success"')
def test_rename_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test2.c'
res = self.requests.post(furl, data=data)
data = { 'operation': 'rename', 'newname': 'test.c' }
res = self.requests.post(furl, data=data)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)"')
def test_remove_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test2.c'
res = self.requests.post(furl, data=data)
res = self.requests.delete(furl)
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, '"success"')
def test_move_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test2.c'
res = self.requests.post(furl, data=data)
#todo: create another repo here, and use is as dst_repo
data = { 'operation': 'move', 'dst_repo': self.rid, 'dst_dir': '/'}
res = self.requests.post(furl, data=data)
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, '"success"')
def test_copy_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test2.c'
res = self.requests.post(furl, data=data)
#todo: create another repo here, and use is as dst_repo
fopurl = self.rurl + u'fileops/copy/?p=/'
data = { 'file_names': 'test2.c', 'dst_repo': self.rid, 'dst_dir': '/'}
res = self.requests.post(fopurl, data=data)
self.assertEqual(res.text, '"success"')
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, '"success"')
def test_download_file_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test.c'
self.requests.post(furl, data=data)
res = self.requests.get(furl)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/test.c"')
def test_download_file_from_history_api(self):
data = { 'operation': 'create' }
furl = self.furl + '?p=/test.c'
self.requests.post(furl, data=data)
fhurl = self.furl + u'history/?p=/test.c'
res = self.requests.get(fhurl)
self.assertEqual(res.status_code, 200)
json = res.json()
commit_id = json['commits'][0]['id']
self.assertIsNotNone(commit_id)
fcurl = self.furl + u'revision/?p=/test.c&commit_id=' + commit_id
res = self.requests.get(fcurl)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/test.c"')
def test_get_file_detail_api(self):
data = { 'operation': 'create' }
furl = self.furl + '?p=/test.c'
self.requests.post(furl, data=data)
fdurl = self.furl + u'detail/?p=/test.c'
res = self.requests.get(fdurl)
self.assertEqual(res.status_code, 200)
json = res.json()
self.assertIsNotNone(json)
self.assertIsNotNone(json['id'])
self.assertIsNotNone(json['mtime'])
self.assertIsNotNone(json['type'])
self.assertIsNotNone(json['name'])
self.assertIsNotNone(json['size'])
def test_get_file_history_api(self):
data = { 'operation': 'create' }
furl = self.furl + '?p=/test.c'
self.requests.post(furl, data=data)
fhurl = self.furl + u'history/?p=/test.c'
res = self.requests.get(fhurl)
self.assertEqual(res.status_code, 200)
json = res.json()
self.assertIsNotNone(json)
self.assertIsNotNone(json['commits'])
for commit in json['commits']:
self.assertIsNotNone(commit['rev_file_size'])
#self.assertIsNotNone(commit['rev_file_id']) #allow null
self.assertIsNotNone(commit['ctime'])
self.assertIsNotNone(commit['creator_name'])
self.assertIsNotNone(commit['creator'])
self.assertIsNotNone(commit['root_id'])
#self.assertIsNotNone(commit['rev_renamed_old_path']) #allow null
#self.assertIsNotNone(commit['parent_id']) #allow null
self.assertIsNotNone(commit['new_merge'])
self.assertIsNotNone(commit['repo_id'])
self.assertIsNotNone(commit['desc'])
self.assertIsNotNone(commit['id'])
self.assertIsNotNone(commit['conflict'])
#self.assertIsNotNone(commit['second_parent_id']) #allow null
def test_get_upload_link_api(self):
upload_url = self.rurl + u'upload-link/'
res = self.requests.get(upload_url)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/upload-api/\w{8,8}"')
def test_get_updataink_api(self):
update_url = self.rurl + u'update-link/'
res = self.requests.get(update_url)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/update-api/\w{8,8}"')
def test_upload_api(self):
furl = self.furl + u'?p=/test_upload.c'
res = self.requests.delete(furl)
upload_url = self.rurl + u'upload-link/'
res = self.requests.get(upload_url)
import re
upload_api_url = re.match(r'"(.*)"', res.text).group(1)
#target_file must contains its parent dir path
files = { 'file': ('test_upload'+'.c', 'int main(){return0;}\n'), \
'parent_dir': '/' }
res = self.requests.post(upload_api_url, files=files)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'\w{40,40}')
def test_update_api(self):
data = { 'operation': 'create' }
furl = self.furl + u'?p=/test_update.c'
res = self.requests.post(furl, data=data)
# call update-link
update_url = self.rurl + u'update-link/'
res = self.requests.get(update_url)
import re
update_api_url = re.match(r'"(.*)"', res.text).group(1)
#target_file must contains its parent dir path
files = { 'file': ('test_update.c', 'int main(){return0;}\n'), \
'target_file': '/test_update.c' }
res = self.requests.post(update_api_url, files=files)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'\w{40,40}')
def test_get_upload_blocks_link_api(self):
upload_blks_url = self.rurl + u'upload-blks-link/'
res = self.requests.get(upload_blks_url)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/upload-blks-api/\w{8,8}"')
def test_get_update_blocks_link_api(self):
update_blks_url = self.rurl + u'update-blks-link/'
res = self.requests.get(update_blks_url)
self.assertEqual(res.status_code, 200)
self.assertRegexpMatches(res.text, r'"http(.*)/update-blks-api/\w{8,8}"')
if __name__ == '__main__':
unittest.main(verbosity=2)