Media-Token can be used only to access the content, but unable to modify user data
197 lines
No EOL
8.6 KiB
Python
197 lines
No EOL
8.6 KiB
Python
import os
|
|
import unittest
|
|
import unittest.mock
|
|
import json
|
|
from .context import create_app, default_test_config, create_test_session
|
|
from backend.data import db
|
|
from backend.data import dao_users
|
|
from backend.data import dao_session
|
|
from backend.data.data_models import Session
|
|
from backend.data.data_models import RegisteringUser
|
|
|
|
class AddFileMetadataUnitTest(unittest.TestCase):
|
|
|
|
url_path = '/file/metadata'
|
|
app = create_app(default_test_config)
|
|
client = app.test_client()
|
|
|
|
def setUp(self):
|
|
with self.app.app_context():
|
|
db.init_db()
|
|
|
|
def tearDown(self):
|
|
with self.app.app_context():
|
|
db.close_db()
|
|
os.remove("testdb")
|
|
|
|
def insert_user(self, user: RegisteringUser):
|
|
with self.app.app_context():
|
|
user_id = dao_users.insert_user(user)
|
|
return user_id
|
|
|
|
def insert_session(self, session: Session):
|
|
with self.app.app_context():
|
|
dao_session.insert_user_session(session)
|
|
|
|
def test_no_headers_returns_unauthorized(self):
|
|
expected = {'message':'Missing Authorization!','code':440}
|
|
|
|
response = self.client.post(self.url_path)
|
|
actual_response_json = json.loads(response.data.decode())
|
|
|
|
self.assertEqual(401, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
def test_not_saved_access_token_headers_returns_unauthorized(self):
|
|
expected = {'message':'Invalid Authorization!','code':441}
|
|
|
|
response = self.client.post(self.url_path, headers={'Authorization': 'token'})
|
|
actual_response_json = json.loads(response.data.decode())
|
|
|
|
self.assertEqual(401, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
def test_expired_access_token_headers_returns_unauthorized(self):
|
|
session = create_test_session(user_id=2, access_token='token', access_expires_at=1, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'message':'Invalid Authorization!','code':441}
|
|
|
|
response = self.client.post(self.url_path, headers={'Authorization': 'token'})
|
|
actual_response_json = json.loads(response.data.decode())
|
|
|
|
self.assertEqual(401, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_sending_non_saved_user_error_is_shown(self, mock_time):
|
|
session = create_test_session(user_id=2, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'message':'Invalid Authorization!','code':442}
|
|
|
|
header = {'Authorization': 'token'}
|
|
response = self.client.post(self.url_path, headers = header)
|
|
|
|
actual_response_json = json.loads(response.data.decode())
|
|
self.assertEqual(400, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_given_authenticated_user_sending_data_shows_success(self, mock_time):
|
|
user = RegisteringUser(
|
|
name = 'banan',
|
|
password = 'citrom',
|
|
otp_secret = 'base32secret3232'
|
|
)
|
|
user_id = self.insert_user(user)
|
|
session = create_test_session(user_id=user_id, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'message':'File MetaData Saved!','code':203}
|
|
|
|
header = {'Authorization': 'token'}
|
|
data = json.dumps({'key': 'value'})
|
|
response = self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
|
|
actual_response_json = json.loads(response.data.decode())
|
|
self.assertEqual(200, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_given_authenticated_user_sending_invalid_data_shows_error(self, mock_time):
|
|
user = RegisteringUser(
|
|
name = 'banan',
|
|
password = 'citrom',
|
|
otp_secret = 'base32secret3232'
|
|
)
|
|
user_id = self.insert_user(user)
|
|
session = create_test_session(user_id=user_id, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'message':'Couldn\'t save metadata!','code':415}
|
|
|
|
header = {'Authorization': 'token'}
|
|
data = ""
|
|
response = self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
|
|
actual_response_json = json.loads(response.data.decode())
|
|
self.assertEqual(400, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_given_authenticated_user_sending_data_can_be_read(self, mock_time):
|
|
user = RegisteringUser(
|
|
name = 'banan',
|
|
password = 'citrom',
|
|
otp_secret = 'base32secret3232'
|
|
)
|
|
user_id = self.insert_user(user)
|
|
session = create_test_session(user_id=user_id, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected_of_key_query = {'key': 'value'}
|
|
expected_of_key2_query = {'key2':'value2'}
|
|
|
|
data = json.dumps({'key': 'value', 'key2': 'value2'})
|
|
header = {'Authorization': 'token'}
|
|
self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
get_query_key1 = {'file_key': 'key'}
|
|
response_of_key1 = self.client.get(self.url_path, query_string = get_query_key1, headers = header)
|
|
get_query_key2 = {'file_key': 'key2'}
|
|
response_of_key2 = self.client.get(self.url_path, query_string = get_query_key2, headers = header)
|
|
|
|
self.assertEqual(200, response_of_key1.status_code)
|
|
actual_response_json = json.loads(response_of_key1.data.decode())
|
|
self.assertEqual(expected_of_key_query, actual_response_json)
|
|
|
|
actual_response_json = json.loads(response_of_key2.data.decode())
|
|
self.assertEqual(200, response_of_key2.status_code)
|
|
self.assertEqual(expected_of_key2_query, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_given_authenticated_user_data_can_be_overwritten_and_extended(self, mock_time):
|
|
user = RegisteringUser(
|
|
name = 'banan',
|
|
password = 'citrom',
|
|
otp_secret = 'base32secret3232'
|
|
)
|
|
user_id = self.insert_user(user)
|
|
session = create_test_session(user_id=user_id, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'key': 'value1'}
|
|
|
|
header = {'Authorization': 'token'}
|
|
data = json.dumps({'key': 'value', 'key2': 'value2'})
|
|
self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
data = json.dumps({'key': 'value1', 'key3': 'value3'})
|
|
self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
get_query = {'file_key': 'key'}
|
|
response = self.client.get(self.url_path, query_string=get_query, headers = header)
|
|
|
|
self.assertEqual(200, response.status_code)
|
|
actual_response_json = json.loads(response.data.decode())
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
@unittest.mock.patch('time.time', return_value=1000)
|
|
def test_given_authenticated_user_invalid_data_is_not_saved(self, mock_time):
|
|
user = RegisteringUser(
|
|
name = 'banan',
|
|
password = 'citrom',
|
|
otp_secret = 'base32secret3232'
|
|
)
|
|
user_id = self.insert_user(user)
|
|
session = create_test_session(user_id=user_id, access_token='token', access_expires_at=1050, refresh_expires_at=2000)
|
|
self.insert_session(session)
|
|
expected = {'key': 'value'}
|
|
|
|
header = {'Authorization': 'token'}
|
|
data = json.dumps({'key': 'value', 'key2': 'value2'})
|
|
self.client.post(self.url_path, headers = header, data = data, content_type='application/json')
|
|
invalid_data = json.dumps([{'key': 'value1', 'key3': 'value3'}])
|
|
self.client.post(self.url_path, headers = header, data = invalid_data, content_type='application/json')
|
|
get_query={'file_key':'key'}
|
|
response = self.client.get(self.url_path, query_string = get_query, headers = header)
|
|
|
|
actual_response_json = json.loads(response.data.decode())
|
|
self.assertEqual(200, response.status_code)
|
|
self.assertEqual(expected, actual_response_json)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(verbosity=2) |