127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
import base64
|
|
|
|
import pytest
|
|
import responses
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from passerelle.apps.filr_rest.models import Filr
|
|
from passerelle.base.models import AccessRight, ApiUser
|
|
|
|
|
|
@pytest.fixture()
|
|
def connector(db):
|
|
api = ApiUser.objects.create(username='all', keytype='', key='')
|
|
connector = Filr.objects.create(
|
|
base_url='http://filr.invalid/',
|
|
basic_auth_username='foo',
|
|
basic_auth_password='bar',
|
|
slug='filr',
|
|
)
|
|
obj_type = ContentType.objects.get_for_model(connector)
|
|
AccessRight.objects.create(
|
|
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
|
|
)
|
|
return connector
|
|
|
|
|
|
def test_upload(app, connector):
|
|
params = {
|
|
'file': {
|
|
'filename': 'bla',
|
|
'content': base64.b64encode(b'who what').decode(),
|
|
'content_type': 'text/plain',
|
|
},
|
|
'root_folder_id': '1234',
|
|
'folder_name': 'folder_foo',
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.get(
|
|
'http://filr.invalid/rest/folders/1234/library_folders?title=folder_foo',
|
|
status=200,
|
|
json={'items': [{'title': 'folder_foo', 'id': 5678}]},
|
|
)
|
|
rsps.post(
|
|
'http://filr.invalid/rest/folders/5678/library_files?file_name=bla',
|
|
status=200,
|
|
json={'id': '09c1c3fb530f562401531018f4270000'},
|
|
)
|
|
resp = app.post_json('/filr-rest/filr/upload', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
assert json_resp['data'] == {
|
|
'folder_id': '5678',
|
|
'file_info': {'id': '09c1c3fb530f562401531018f4270000'},
|
|
}
|
|
|
|
|
|
def test_upload_with_folder_creation(app, connector):
|
|
params = {
|
|
'file': {
|
|
'filename': 'bla',
|
|
'content': base64.b64encode(b'who what').decode(),
|
|
'content_type': 'text/plain',
|
|
},
|
|
'root_folder_id': '1234',
|
|
'folder_name': 'folder_foo',
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.get(
|
|
'http://filr.invalid/rest/folders/1234/library_folders?title=folder_foo',
|
|
status=200,
|
|
json={'items': []},
|
|
)
|
|
rsps.post('http://filr.invalid/rest/folders/1234/library_folders', status=200, json={'id': 82})
|
|
rsps.post(
|
|
'http://filr.invalid/rest/folders/82/library_files?file_name=bla',
|
|
status=200,
|
|
json={'id': '09c1c3fb530f562401531018f4270000'},
|
|
)
|
|
resp = app.post_json('/filr-rest/filr/upload', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
assert json_resp['data'] == {
|
|
'folder_id': '82',
|
|
'file_info': {'id': '09c1c3fb530f562401531018f4270000'},
|
|
}
|
|
|
|
|
|
def test_share_folder(app, connector):
|
|
params = {
|
|
'folder_id': '1234',
|
|
'emails/0': 'foo@example.net',
|
|
'emails/1': '',
|
|
'emails/2': None,
|
|
'emails/3': "not-a-mail but it's ok",
|
|
'emails/4': 'bar@example.org',
|
|
'days_to_expire': '30',
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.post('http://filr.invalid/rest/folders/1234/shares?notify=true', status=200, json={'id': 9})
|
|
resp = app.post_json('/filr-rest/filr/share-folder', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
assert json_resp['data'] == [{'id': 9}, {'id': 9}, {'id': 9}]
|
|
|
|
params = {
|
|
'folder_id': '1234',
|
|
'emails/0': '',
|
|
'emails/1': None,
|
|
'days_to_expire': '30',
|
|
}
|
|
with responses.RequestsMock():
|
|
resp = app.post_json('/filr-rest/filr/share-folder', params=params, status=400)
|
|
assert resp.json['err_desc'] == 'no valid email in emails'
|
|
assert resp.json['data'] is None
|
|
|
|
|
|
def test_delete_folder(app, connector):
|
|
params = {
|
|
'folder_id': '1234',
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.delete('http://filr.invalid/rest/folders/1234', status=204, content_type='application/json')
|
|
resp = app.post_json('/filr-rest/filr/delete-folder', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
assert json_resp['data'] == ''
|