From 072ee6588fa7b5083c3cca48f9885bd5a534affe Mon Sep 17 00:00:00 2001 From: Chilledheart Date: Thu, 28 Aug 2014 14:29:44 +0800 Subject: [PATCH] [tests] add web api test for files --- tests/integration_api/files.py | 180 ++++++++++++++++++++++++++ tests/integration_api/library.py | 13 +- tests/integration_api/starredfiles.py | 21 ++- tests/integration_suite.py | 4 +- 4 files changed, 204 insertions(+), 14 deletions(-) create mode 100644 tests/integration_api/files.py diff --git a/tests/integration_api/files.py b/tests/integration_api/files.py new file mode 100644 index 0000000000..f77302654d --- /dev/null +++ b/tests/integration_api/files.py @@ -0,0 +1,180 @@ +from integration_api import DEFAULT_LIBRARY_URL, get_authed_instance +from integration_api 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 testCreateFileApi(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 testRenameFileApi(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 testRemoveFileApi(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 testMoveFileApi(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 testCopyFileApi(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 testDownloadFileApi(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 testDownloadFileFromHistoryApi(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 testGetFileDetailApi(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 testGetFileHistoryApi(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 testGetUploadLinkApi(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 testGetUpdatainkApi(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 testUploadApi(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 testUpdateApi(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 testGetUploadBlocksLinkApi(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 testGetUpdateBlocksLinkApi(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) diff --git a/tests/integration_api/library.py b/tests/integration_api/library.py index 813aa28b27..70cbe82dcd 100644 --- a/tests/integration_api/library.py +++ b/tests/integration_api/library.py @@ -128,12 +128,11 @@ class LibraryApiTestCase(unittest.TestCase): self.assertEqual(res.text, '"success"') def testCheckOrCreateSubLibraryApi(self): - if True: #broken - return res = self.requests.post(DEFAULT_LIBRARY_URL) repo_id = res.json()['repo_id'] - sub_repo_url = LIBRARIES_URL + repo_id + u'/dir/sub_repo/?p=\/&name=sub_lib' - res = self.requests.get(sub_repo_url) + params = { 'p': '/', 'name': 'sub_lib' } + sub_repo_url = LIBRARIES_URL + repo_id + u'/dir/sub_repo/' + res = self.requests.get(sub_repo_url, params=params) json = res.json() self.assertEqual(res.status_code, 200) self.assertIsNotNone(json) @@ -198,7 +197,7 @@ class LibraryApiTestCase(unittest.TestCase): self.assertIsNotNone(repo['origin_repo_name']) self.assertIsNotNone(repo['last_modify']) self.assertIsNotNone(repo['no_local_history']) - self.assertIsNotNone(repo['head_branch']) + #self.assertIsNotNone(repo['head_branch']) self.assertIsNotNone(repo['last_sync_time']) self.assertIsNotNone(repo['id']) self.assertIsNotNone(repo['size']) @@ -209,9 +208,9 @@ class LibraryApiTestCase(unittest.TestCase): self.assertEqual(repo['is_virtual'], True) self.assertIsNotNone(repo['origin_repo_id']) self.assertIsNotNone(repo['version']) - self.assertIsNotNone(repo['random_key']) + #self.assertIsNotNone(repo['random_key']) self.assertIsNotNone(repo['is_original_owner']) - self.assertIsNotNone(repo['shared_email']) + #self.assertIsNotNone(repo['shared_email']) self.assertIsNotNone(repo['enc_version']) self.assertIsNotNone(repo['head_cmmt_id']) #self.assertIsNotNone(repo['desc']) diff --git a/tests/integration_api/starredfiles.py b/tests/integration_api/starredfiles.py index 0ec79bbfe5..9fe1c7f1f6 100644 --- a/tests/integration_api/starredfiles.py +++ b/tests/integration_api/starredfiles.py @@ -1,4 +1,5 @@ from integration_api import STARREDFILES_URL, get_authed_instance +from integration_api import DEFAULT_LIBRARY_URL, LIBRARIES_URL import unittest class StarredFilesApiTestCase(unittest.TestCase): @@ -6,27 +7,35 @@ class StarredFilesApiTestCase(unittest.TestCase): def setUp(self): self.requests = get_authed_instance() self.assertIsNotNone(self.requests) - #todo upload file and star a file here + 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 testListStarredFilesApi(self): res = self.requests.get(STARREDFILES_URL) self.assertEqual(res.status_code, 200) json = res.json() self.assertIsNotNone(json) - self.assertEqual(len(json), 0) def testStarFileApi(self): - data = { 'repo_id': '', 'p': '' } + data = { 'operation': 'create' } + furl = self.furl + '?p=/test.c' + self.requests.post(furl, data=data) + data = { 'repo_id': self.rid, 'p': '/test.c' } res = self.requests.post(STARREDFILES_URL, data=data) self.assertEqual(res.status_code, 201) self.assertEqual(res.text, u'"success"') def testUnStarFileApi(self): - data = { 'repo_id': '', 'p': '' } - res = self.requests.delete(STARREDFILES_URL, data=data) + data = { 'operation': 'create' } + furl = self.furl + '?p=/test.c' + self.requests.post(furl, data=data) + data = { 'repo_id': self.rid, 'p': '/test.c' } + res = self.requests.post(STARREDFILES_URL, data=data) + res = self.requests.delete(STARREDFILES_URL, params=data) self.assertEqual(res.status_code, 200) self.assertEqual(res.text, u'"success"') - if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/tests/integration_suite.py b/tests/integration_suite.py index 0d852b7ced..4fb2bd6305 100644 --- a/tests/integration_suite.py +++ b/tests/integration_suite.py @@ -17,6 +17,7 @@ def suite(): from integration_api.avatar import AvatarApiTestCase from integration_api.library import LibraryApiTestCase + from integration_api.files import FilesApiTestCase from integration_api.starredfiles import StarredFilesApiTestCase from integration_api.misc import MiscApiTestCase integration_api_suite = unittest.TestSuite((\ @@ -29,7 +30,8 @@ def suite(): unittest.makeSuite(GroupMsgsApiTestCase), unittest.makeSuite(AvatarApiTestCase), unittest.makeSuite(LibraryApiTestCase), - #unittest.makeSuite(StarredFilesApiTestCase), + unittest.makeSuite(FilesApiTestCase), + unittest.makeSuite(StarredFilesApiTestCase), unittest.makeSuite(MiscApiTestCase), ))