"""Test generate_upload_data module.""" from unittest.mock import MagicMock from oto import response import pytest from assets import config from assets.logic import generate_upload_data from assets.models import asset_upload from assets.models import token @pytest.fixture def fixture_username(): """Fixture to get a name representing a user.""" return 'anyone' @pytest.fixture def fixture_fail(): """Fixture to get a negative response.""" return response.create_error_response('fail', 'now') @pytest.fixture def fixture_ok(): """Fixture to get a successful response.""" return response.Response('ok') @pytest.fixture def fixture_credential(): """Fixture to get an AWS credential dictionary.""" credential = {'token': 'a_token'} return response.Response(credential) def test__generate_filename(): """Test the generated filename does not contain hyphens.""" result = generate_upload_data._generate_filename() assert '-' not in result def test_get_upload_permission_no_user(): """Test get_upload_permission fails without user.""" result = generate_upload_data.get_upload_permission(False) assert result.status == 400 def test_get_upload_permission_no_token( monkeypatch, fixture_fail, fixture_username): """Test get_upload_permission fails without token.""" monkeypatch.setattr(token, 'get_s3_token', MagicMock( return_value=fixture_fail)) result = generate_upload_data.get_upload_permission(fixture_username) assert not result def test_get_upload_permission_no_asset_upload( monkeypatch, fixture_fail, fixture_credential, fixture_username): """Test get_upload_permission fails when unable to log request.""" monkeypatch.setattr(token, 'get_s3_token', MagicMock( return_value=fixture_credential)) monkeypatch.setattr(asset_upload, 'create_asset_upload', MagicMock( return_value=fixture_fail)) result = generate_upload_data.get_upload_permission(fixture_username) assert not result def test_get_upload_permission( monkeypatch, fixture_credential, fixture_ok, fixture_username): """Test get_upload_permission succeeds.""" bucket = 'a_bucket' filename = 'a_filename' config.RAW_ASSETS_BUCKET_NAME = bucket monkeypatch.setattr( generate_upload_data, '_generate_filename', MagicMock( return_value=filename)) token_mock = MagicMock(return_value=fixture_credential) monkeypatch.setattr(token, 'get_s3_token', token_mock) asset_upload_mock = MagicMock(return_value=fixture_ok) monkeypatch.setattr( asset_upload, 'create_asset_upload', asset_upload_mock) result = generate_upload_data.get_upload_permission(fixture_username) assert result.message['bucket'] == bucket assert result.message['filename'] == filename assert result.message['credentials'] == fixture_credential.message token_mock.assert_called_with(filename) asset_upload_mock.assert_called_with( fixture_username, filename, fixture_credential.message.get('token'))