2014-09-05 02:07:33 +00:00
|
|
|
#coding: UTF-8
|
2014-08-28 08:19:42 +00:00
|
|
|
|
2014-09-05 02:07:33 +00:00
|
|
|
import unittest
|
|
|
|
from urllib import urlencode, quote
|
|
|
|
from tests.common.utils import apiurl, randstring, urljoin
|
|
|
|
from tests.api.apitestbase import ApiTestBase
|
|
|
|
from tests.api.urls import SHARED_LINKS_URL, SHARED_LIBRARIES_URL, \
|
|
|
|
BESHARED_LIBRARIES_URL, SHARED_FILES_URL, F_URL, S_F_URL
|
|
|
|
|
|
|
|
class SharesApiTest(ApiTestBase):
|
|
|
|
use_test_group = True
|
|
|
|
use_test_repo = True
|
|
|
|
|
|
|
|
def create_file(self, fname=None):
|
|
|
|
data = {'operation': 'create'}
|
|
|
|
fname = fname or ('文件 %s.txt' % randstring(10))
|
|
|
|
fpath = '/' + fname
|
|
|
|
query = urlencode(dict(p=fpath))
|
|
|
|
furl = self.test_file_url + '?' + query
|
|
|
|
res = self.post(furl, data=data, expected=201)
|
|
|
|
self.assertEqual(res.text, '"success"')
|
|
|
|
return fname, furl
|
|
|
|
|
|
|
|
def test_create_file_shared_link(self):
|
|
|
|
fname, _ = self.create_file()
|
|
|
|
fsurl = urljoin(self.test_file_url, 'shared-link')
|
|
|
|
data = {
|
|
|
|
'type': 'f',
|
|
|
|
'p': '/' + fname,
|
|
|
|
}
|
|
|
|
res = self.put(fsurl, data=data, expected=201)
|
|
|
|
self.assertRegexpMatches(res.headers['Location'], \
|
|
|
|
r'http(.*)/f/(\w{10,10})/')
|
|
|
|
|
|
|
|
res = self.get(SHARED_LINKS_URL).json()
|
|
|
|
self.assertNotEmpty(res)
|
|
|
|
for fileshare in res['fileshares']:
|
|
|
|
self.assertIsNotNone(fileshare['username'])
|
|
|
|
self.assertIsNotNone(fileshare['repo_id'])
|
|
|
|
#self.assertIsNotNone(fileshare['ctime'])
|
|
|
|
self.assertIsNotNone(fileshare['s_type'])
|
|
|
|
self.assertIsNotNone(fileshare['token'])
|
|
|
|
self.assertIsNotNone(fileshare['view_cnt'])
|
|
|
|
self.assertIsNotNone(fileshare['path'])
|
|
|
|
|
|
|
|
|
|
|
|
# def test_create_directory_shared_link(self):
|
|
|
|
# data = { 'operation': 'mkdir' }
|
|
|
|
# durl = self.test_dir_url + u'?p=/test_create_shared_link_d'
|
|
|
|
# self.post(durl, data=data)
|
|
|
|
# self.post(durl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'd', 'p': '/test_create_shared_link_d' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# self.assertEqual(res.status_code, 201)
|
|
|
|
# self.assertRegexpMatches(res.headers['Location'], \
|
|
|
|
# r'http(.*)/d/(\w{10,10})/')
|
|
|
|
|
|
|
|
# def test_remove_shared_link(self):
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_remove_shared_link_f'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_remove_shared_link_f' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fturl = SHARED_LINKS_URL + u'?t=' + t
|
|
|
|
# res = self.delete(fturl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertEqual(res.text, u'{}')
|
|
|
|
|
|
|
|
# def test_get_shared_file_url(self):
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_visit_shared_link_f'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_visit_shared_link_f' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fdurl = F_URL + t + u'/'
|
|
|
|
# res = self.get(fdurl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertRegexpMatches(res.text, r'"http(.*)/files/\w{8,8}/(.*)"')
|
|
|
|
|
|
|
|
# def test_get_shared_file_detail(self):
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_visitd_shared_link_f'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_visitd_shared_link_f' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fdurl = F_URL + t + u'/detail/'
|
|
|
|
# res = self.get(fdurl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# json = res.json()
|
|
|
|
# self.assertIsNotNone(json)
|
|
|
|
# self.assertIsNotNone(json['repo_id'])
|
|
|
|
# self.assertIsNotNone(json['name'])
|
|
|
|
# self.assertIsNotNone(json['size'])
|
|
|
|
# self.assertIsNotNone(json['path'])
|
|
|
|
# self.assertIsNotNone(json['type'])
|
|
|
|
# self.assertIsNotNone(json['mtime'])
|
|
|
|
# self.assertIsNotNone(json['id'])
|
|
|
|
|
|
|
|
# def test_get_private_shared_file_url(self):
|
|
|
|
# if True: #todo: override this
|
|
|
|
# return
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_visit_shared_link_sf'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_visit_shared_link_sf' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fdurl = S_F_URL + t + u'/'
|
|
|
|
# res = self.get(fdurl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertRegexpMatches(res.text, r'"http(.*)/files/\w{8,8}/(.*)"')
|
|
|
|
|
|
|
|
# def test_get_private_shared_file_detail(self):
|
|
|
|
# if True: #todo: override this
|
|
|
|
# return
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_visitd_shared_link_sf'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_visitd_shared_link_sf' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fdurl = S_F_URL + t + u'/detail/'
|
|
|
|
# res = self.get(fdurl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# json = res.json()
|
|
|
|
# self.assertIsNotNone(json)
|
|
|
|
# self.assertIsNotNone(json['repo_id'])
|
|
|
|
# self.assertIsNotNone(json['name'])
|
|
|
|
# self.assertIsNotNone(json['size'])
|
|
|
|
# self.assertIsNotNone(json['path'])
|
|
|
|
# self.assertIsNotNone(json['type'])
|
|
|
|
# self.assertIsNotNone(json['mtime'])
|
|
|
|
# self.assertIsNotNone(json['id'])
|
|
|
|
|
|
|
|
# def test_remove_shared_file(self):
|
|
|
|
# if True: #todo: override this
|
|
|
|
# return
|
|
|
|
# data = { 'operation': 'create' }
|
|
|
|
# furl = self.test_file_url + u'?p=/test_remove_shared_file'
|
|
|
|
# self.post(furl, data=data)
|
|
|
|
# fsurl = self.test_file_url + u'shared-link/'
|
|
|
|
# data = { 'type': 'f', 'p': '/test_remove_shared_file' }
|
|
|
|
# res = self.put(fsurl, data=data)
|
|
|
|
# import re
|
|
|
|
# t = re.match(r'http(.*)/f/(\w{10,10})/', res.headers['Location']).group(2)
|
|
|
|
# fturl = SHARED_FILES_URL + u'?t=' + t
|
|
|
|
# res = self.delete(fturl)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertEqual(res.text, u'{}')
|
|
|
|
|
|
|
|
# def test_list_shared_libraries(self):
|
|
|
|
# res = self.get(SHARED_LIBRARIES_URL)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# json = res.json()
|
|
|
|
# self.assertIsNotNone(json)
|
|
|
|
# for repo in json:
|
|
|
|
# self.assertIsNotNone(repo['repo_id'])
|
|
|
|
# self.assertIsNotNone(repo['share_type'])
|
|
|
|
# self.assertIsNotNone(repo['permission'])
|
|
|
|
# self.assertIsNotNone(repo['encrypted'])
|
|
|
|
# self.assertIsNotNone(repo['user'])
|
|
|
|
# self.assertIsNotNone(repo['last_modified'])
|
|
|
|
# self.assertIsNotNone(repo['repo_desc'])
|
|
|
|
# self.assertIsNotNone(repo['group_id'])
|
|
|
|
# self.assertIsNotNone(repo['repo_name'])
|
|
|
|
|
|
|
|
# def test_list_beshared_libraries(self):
|
|
|
|
# res = self.get(BESHARED_LIBRARIES_URL)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# json = res.json()
|
|
|
|
# self.assertIsNotNone(json)
|
|
|
|
# for repo in json:
|
|
|
|
# self.assertIsNotNone(repo['user'])
|
|
|
|
# self.assertIsNotNone(repo['repo_id'])
|
|
|
|
# self.assertIsNotNone(repo['share_type'])
|
|
|
|
# self.assertIsNotNone(repo['permission'])
|
|
|
|
# self.assertIsNotNone(repo['encrypted'])
|
|
|
|
# self.assertIsNotNone(repo['last_modified'])
|
|
|
|
# self.assertIsNotNone(repo['repo_desc'])
|
|
|
|
# self.assertIsNotNone(repo['group_id'])
|
|
|
|
# self.assertIsNotNone(repo['repo_name'])
|
|
|
|
# self.assertIsNotNone(repo['is_virtual'])
|
|
|
|
|
|
|
|
# def test_share_library(self):
|
|
|
|
# data = { 'share_type': 'group', 'user': USERNAME, 'group_id': self.gid , \
|
|
|
|
# 'permission': 'rw' }
|
|
|
|
# slurl = SHARED_LIBRARIES_URL + str(self.test_repo_id) + u'/'
|
|
|
|
# res = self.put(slurl, params=data)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertEqual(res.text, u'"success"')
|
|
|
|
|
|
|
|
# def test_un_share_library(self):
|
|
|
|
# data = { 'share_type': 'group', 'user': USERNAME, 'group_id': self.gid , \
|
|
|
|
# 'permission': 'rw' }
|
|
|
|
# slurl = SHARED_LIBRARIES_URL + str(self.test_repo_id) + u'/'
|
|
|
|
# data = { 'share_type': 'group', 'user': USERNAME, 'group_id': self.gid }
|
|
|
|
# self.put(slurl, params=data)
|
|
|
|
# res = self.delete(slurl, params=data)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# self.assertEqual(res.text, u'"success"')
|
|
|
|
|
|
|
|
# def test_list_shared_files(self):
|
|
|
|
# res = self.get(SHARED_FILES_URL)
|
|
|
|
# self.assertEqual(res.status_code, 200)
|
|
|
|
# json = res.json()
|
|
|
|
# self.assertIsNotNone(json)
|
|
|
|
# self.assertIsNotNone(json['priv_share_in'])
|
|
|
|
# self.assertIsNotNone(json['priv_share_out'])
|
|
|
|
|
|
|
|
# for sfiles in zip(json['priv_share_in'], json['priv_share_out']):
|
|
|
|
# for sfile in sfiles:
|
|
|
|
# self.assertIsNotNone(sfile['s_type'])
|
|
|
|
# self.assertIsNotNone(sfile['repo_id'])
|
|
|
|
# self.assertIsNotNone(sfile['permission'])
|
|
|
|
# self.assertIsNotNone(sfile['to_user'])
|
|
|
|
# self.assertIsNotNone(sfile['token'])
|
|
|
|
# self.assertIsNotNone(sfile['from_user'])
|
|
|
|
# self.assertIsNotNone(sfile['path'])
|