"""Tests for Asset Final logic tier.""" import os from unittest.mock import MagicMock from unittest.mock import patch import pytest from asset_transcoder.logic import asset_final from asset_transcoder.utils import exceptions as exc @patch('asset_transcoder.utils.s3.resource') @patch('asset_transcoder.utils.s3.client') def test_asset_final_success(s3_client, s3_resource, db_fixture, asset_final_fixture, monkeypatch): """Test that asset final is created.""" s3_client.head_object.return_value = {'ContentType': 'audio/flac', 'Metadata': {}} s3_resource.meta.client.copy.return_value = True os.environ['OUTPUT_ASSETS_PODCAST_BUCKET_NAME'] = 'some-bucket' status = asset_final_fixture['status'] result = asset_final.create_status_and_final_assets(**asset_final_fixture) assert result assert result['status'] == status s3_resource.meta.client.copy.assert_called_once_with( { 'Bucket': 'some-bucket', 'Key': 'new_filename_1.jpg' }, 'some-bucket', 'new_filename_1.jpg', ExtraArgs={ 'ContentType': 'audio/flac', 'ContentDisposition': 'attachment; filename="episode_photo_1.jpg-2019-11-18 10:00:01.000700.jpg"', 'Metadata': {}, 'MetadataDirective': 'REPLACE' }, SourceClient=s3_client ) def test_asset_final_error_invalid_status(db_fixture, asset_final_fixture): """Test that asset final fails with invalid status passed.""" asset_final_fixture['status'] = 'some_weird_status' with pytest.raises(exc.OwsError) as err: asset_final.create_status_and_final_assets(**asset_final_fixture) assert err.value.message == 'Status some_weird_status is not valid for processing' @patch('asset_transcoder.connectors.mysql.asset_transcoder_db_session') def test_create_asset_final_single_commit(db_session_mock, asset_final_fixture, monkeypatch): """Test that status and final models are committed by single commit.""" monkeypatch.setattr(asset_final, '_add_content_disposition_to_asset_finals', MagicMock()) commit_mock = MagicMock( return_value=True ) db_session_mock.return_value.commit = commit_mock asset_final.create_status_and_final_assets(**asset_final_fixture) assert commit_mock.call_count == 1