2023-04-10 22:17:12 -04:00
|
|
|
import pytest
|
|
|
|
from io import BytesIO
|
|
|
|
from werkzeug.datastructures import FileStorage
|
|
|
|
|
|
|
|
"""Test file share endpoints."""
|
|
|
|
|
|
|
|
|
|
|
|
# if other storage backends are implemented we test them with the same suite
|
|
|
|
# this might be redundant because test_storage tests the backends already
|
|
|
|
@pytest.mark.parametrize("client", [{"SACHET_STORAGE": "filesystem"}], indirect=True)
|
|
|
|
class TestSuite:
|
2023-04-13 13:30:53 -04:00
|
|
|
def test_sharing(self, client, users, auth, rand):
|
2023-04-10 22:17:12 -04:00
|
|
|
# create share
|
|
|
|
resp = client.post(
|
2023-04-13 13:30:53 -04:00
|
|
|
"/files", headers=auth("jeff")
|
2023-04-10 22:17:12 -04:00
|
|
|
)
|
|
|
|
assert resp.status_code == 201
|
|
|
|
|
|
|
|
data = resp.get_json()
|
|
|
|
url = data.get("url")
|
|
|
|
|
|
|
|
assert url is not None
|
|
|
|
assert "/files/" in url
|
|
|
|
|
|
|
|
upload_data = rand.randbytes(4000)
|
|
|
|
|
|
|
|
# upload file to share
|
|
|
|
resp = client.post(
|
|
|
|
url + "/content",
|
2023-04-13 13:30:53 -04:00
|
|
|
headers=auth("jeff"),
|
2023-04-10 22:17:12 -04:00
|
|
|
data={
|
|
|
|
"upload": FileStorage(stream=BytesIO(upload_data), filename="upload")
|
|
|
|
},
|
|
|
|
content_type="multipart/form-data",
|
|
|
|
)
|
|
|
|
assert resp.status_code == 201
|
|
|
|
|
|
|
|
# test not allowing re-upload
|
|
|
|
resp = client.post(
|
|
|
|
url + "/content",
|
2023-04-13 13:30:53 -04:00
|
|
|
headers=auth("jeff"),
|
2023-04-10 22:17:12 -04:00
|
|
|
data={
|
|
|
|
"upload": FileStorage(stream=BytesIO(upload_data), filename="upload")
|
|
|
|
},
|
|
|
|
content_type="multipart/form-data",
|
|
|
|
)
|
|
|
|
assert resp.status_code == 423
|
|
|
|
|
|
|
|
# read file
|
|
|
|
resp = client.get(
|
|
|
|
url + "/content",
|
2023-04-13 13:30:53 -04:00
|
|
|
headers=auth("jeff"),
|
2023-04-10 22:17:12 -04:00
|
|
|
)
|
|
|
|
assert resp.data == upload_data
|
|
|
|
|
|
|
|
# test deletion
|
|
|
|
resp = client.delete(
|
|
|
|
url,
|
2023-04-13 13:30:53 -04:00
|
|
|
headers=auth("jeff"),
|
2023-04-10 22:17:12 -04:00
|
|
|
)
|
|
|
|
assert resp.status_code == 200
|
|
|
|
|
|
|
|
# file shouldn't exist anymore
|
|
|
|
resp = client.get(
|
|
|
|
url + "/content",
|
2023-04-13 13:30:53 -04:00
|
|
|
headers=auth("jeff"),
|
2023-04-10 22:17:12 -04:00
|
|
|
)
|
|
|
|
assert resp.status_code == 404
|