Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/tests/unit/test_file_api.py
1292 views
1
import os
2
import pytest
3
import shutil
4
import base64
5
from datetime import datetime
6
from buildyourownbotnet.core.dao import file_dao
7
from ..conftest import app_client, new_user, login, cleanup
8
9
10
def test_api_file_add(app_client, new_user, new_session):
11
"""
12
Given an authenticated user and a session,
13
when a POST request is sent to /api/file/add endpoint with valid parameters,
14
check that the file metadata is stored in the database correctly.
15
"""
16
login(app_client, new_user.username, 'test_password')
17
with open('./buildyourownbotnet/assets/images/crying-cat.jpg', 'rb') as fp:
18
raw_img_data = fp.read()
19
b64_data = base64.b64encode(raw_img_data)
20
b64_session = base64.b64encode(new_session.public_ip.encode())
21
file_metadata = {
22
'data': b64_data,
23
'type': 'jpg',
24
'owner': new_user.username,
25
'module': 'upload',
26
'session': b64_session,
27
'filename': 'crying-cat.jpg'
28
}
29
res = app_client.post('/api/file/add', data = file_metadata)
30
31
# check request was successful
32
assert res.status_code == 200
33
34
# check file metadata was added to database correctly
35
user_files = file_dao.get_user_files(new_user.id)
36
assert len(user_files) == 1
37
user_file = user_files[0]
38
assert user_file.filename == file_metadata['filename']
39
assert user_file.module == file_metadata['module']
40
assert user_file.owner == file_metadata['owner']
41
assert user_file.session == base64.b64decode(file_metadata['session'])
42
assert (datetime.utcnow() - user_file.created).seconds <= 30
43
44
# check file was stored in filesystem correctly
45
user_dir = os.path.join('./buildyourownbotnet/output/', new_user.username)
46
files_dir = os.path.join(user_dir, 'files')
47
user_files = os.listdir(files_dir)
48
assert len(user_files) != 0
49
assert file_metadata['filename'] in user_files
50
51
# cleanup
52
os.remove(os.path.join(files_dir, file_metadata['filename']))
53
54