"""Test finalization of package.""" from unittest.mock import AsyncMock from unittest.mock import call from unittest.mock import mock_open from unittest.mock import patch import config from freezegun import freeze_time import pytest from src.main import select_packager @pytest.mark.asyncio @freeze_time('2019-06-15 12:00:00') @pytest.mark.parametrize( 'dms_id, upload_metadata, upload_trigger, upload_image, copy_audio', [ ( 1, 'job-id/stereo.itmsp/metadata.xml', None, None, [ 'job-id/stereo.itmsp/spatial_1_1.wav', 'job-id/stereo.itmsp/spatial_1_2.wav' ] ), ( 187, 'job-id/spatial.xml', None, 'job-id/spatial_20190615120000/resources/spatial.jpg', [ 'job-id/spatial_20190615120000/resources/spatial_1_1.wav', # noqa:E501 'job-id/spatial_20190615120000/resources/spatial_1_2.wav' # noqa:E501 ] ), ( 399, 'job-id/20190615120000001/spatial/spatial.xml', 'job-id/BatchComplete_20190615120000001.xml', 'job-id/20190615120000001/spatial/resources/spatial.jpg', [ 'job-id/20190615120000001/spatial/resources/spatial_1_1.wav', # noqa:E501 'job-id/20190615120000001/spatial/resources/spatial_1_2.wav' # noqa:E501 ] ), ( 838, 'job-id/20190615120000000/spatial/spatial.xml', 'job-id/BatchComplete_20190615120000000.xml', 'job-id/20190615120000000/spatial/resources/spatial.jpg', [ 'job-id/20190615120000000/spatial/resources/spatial_1_1.wav', # noqa:E501 'job-id/20190615120000000/spatial/resources/spatial_1_2.wav' # noqa:E501 ] ), ( 1279, 'job-id/20190615120000000/spatial/spatial.xml', 'job-id/delivery.complete', 'job-id/20190615120000000/spatial/resources/spatial.jpg', [ 'job-id/20190615120000000/spatial/resources/spatial_1_1.wav', # noqa:E501 'job-id/20190615120000000/spatial/resources/spatial_1_2.wav' # noqa:E501 ] ), ( 1454, 'job-id/20190615120000000/spatial/spatial.xml', 'job-id/delivery.complete', 'job-id/20190615120000000/spatial/resources/spatial.tif', [ 'job-id/20190615120000000/spatial/resources/spatial_1_1.wav', # noqa:E501 'job-id/20190615120000000/spatial/resources/spatial_1_2.wav' # noqa:E501 ] ) ] ) async def test_commit( dms_id, upload_metadata, upload_trigger, upload_image, copy_audio): """Test per store output.""" packager = select_packager(dms_id) s3_mock = AsyncMock() packager.s3_connector = s3_mock input_bucket = 'input-bucket' output_bucket = config.OUTPUT_BUCKET spatial_audio_files = [ ( input_bucket, 'spatial/spatial_1_1_isrc1.wav' ), ( input_bucket, 'spatial/spatial_1_2_isrc2.wav' ) ] image_filename = '/tmp/image.jpg' if upload_image else None mock_file_open = mock_open() with patch('builtins.open', mock_file_open): await packager.commit_package( 'spatial', 'stereo', spatial_audio_files, 'xml-data', image_filename, 'job-id' ) # assert upload operations expected_upload_calls = [ call( b'xml-data', output_bucket, upload_metadata ) ] if upload_trigger: expected_upload_calls.append( call( b'', output_bucket, upload_trigger ) ) if image_filename: expected_open_calls = [call(image_filename, 'rb')] assert expected_open_calls == mock_file_open.call_args_list expected_upload_calls.append( call( mock_file_open(), output_bucket, upload_image ) ) s3_mock.upload_object.assert_has_calls(expected_upload_calls) assert expected_upload_calls == s3_mock.upload_object.call_args_list # assert copy operations expected_copy_calls = [ call( i[0], i[1], output_bucket, o ) for i, o in zip(spatial_audio_files, copy_audio) ] assert expected_copy_calls == s3_mock.copy_object.call_args_list