"""Unit tests for metadata capture logic.""" from flexmock import flexmock from owsresponse import response import pytest from transcoding.constants import exceptions from transcoding.constants import mediainfo as mediainfo_const from transcoding.logic import metadata_capture from transcoding.utils import mediainfo_extractor @pytest.fixture() def asset_path(): """Return a mock file path.""" return '/dev/null' def test_get_audio_metadata_success(asset_path): """Test that the extracted metadata is returned.""" mock_metadata = {'foo': 'bar'} util_response = response.Response(message=mock_metadata) (flexmock(mediainfo_extractor) .should_receive('get_media_info') .once() .with_args(asset_path, mediainfo_const.AUDIO_INFO_PARAM_FILTER) .and_return(util_response)) assert metadata_capture.get_metadata(asset_path) == mock_metadata def test_get_metadata_failure(): """Test that a retryable error is raise when metadata capture fails.""" error_message = 'nope, that did not work' util_response = response.create_fatal_response(error_message) (flexmock(mediainfo_extractor) .should_receive('get_media_info') .once() .with_args(asset_path, mediainfo_const.AUDIO_INFO_PARAM_FILTER) .and_return(util_response)) with pytest.raises(exceptions.TranscodingRetryableError) as e: metadata_capture.get_metadata(asset_path) assert e.value.reason == error_message