"""Test release correction.""" from content_utils.exceptions import IneligibleEventError import pytest from src.logic import release_correction def test_get_release_correction_success(request_engine): """Test successfully fetching a release correction.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'submitted', 'items': [ { 'release_correction_detail_id': 345, 'table_name': 'releases', 'field_name': 'coverart', 'key_id': 123, 'key_value': True } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) actual = release_correction.get_release_correction(123) assert actual == mock_response def test_get_release_correction_not_found(request_engine): """Test get release correction fetches a 404 response.""" mock_response = {'foo': 'bar'} request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', status=404, response=mock_response ) with pytest.raises(IneligibleEventError) as e: release_correction.get_release_correction(123) assert e.value.args[0] == 'Release correction not found.' def test_get_release_correction_error(request_engine): """Test get release correction fetches an error response.""" mock_response = {'foo': 'bar'} request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', status=500, response=mock_response ) with pytest.raises(Exception) as e: release_correction.get_release_correction(123) assert e.value.args[0] == 'Failed fetching release correction' assert e.value.args[1] == '{"foo": "bar"}' def test_get_release_correction_unsubmitted(request_engine): """Test get release correction fetches a correction that is not submitted.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'applied', 'items': [ { 'release_correction_detail_id': 345, 'table_name': 'releases', 'field_name': 'coverart', 'key_id': 123, 'key_value': True } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) with pytest.raises(IneligibleEventError) as e: release_correction.get_release_correction(123) assert e.value.args[0] == 'Release correction not in a submitted state.' def test_get_release_revisions_with_updates(request_engine): """Test getting release metadata updates.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'submitted', 'items': [ { 'release_correction_detail_id': 1, 'table_name': 'releases', 'field_name': 'coverart', 'key_id': 123, 'key_value': True }, { 'release_correction_detail_id': 2, 'table_name': 'track', 'field_name': 'label', 'key_id': 456, 'key_value': 'foo' }, { 'release_correction_detail_id': 3, 'table_name': 'track', 'field_name': 'track_name', 'key_id': 456, 'key_value': 'bar' }, { 'release_correction_detail_id': 4, 'table_name': 'releases', 'field_name': 'label', 'key_id': 123, 'key_value': 'MIXUS' }, { 'release_correction_detail_id': 5, 'table_name': 'releases', 'field_name': 'c_line', 'key_id': 123, 'key_value': '2020 MIXUS' }, { 'release_correction_detail_id': 6, 'table_name': 'releases', 'field_name': 'release_subgenre', 'key_id': 123, 'key_value': [168] }, { 'release_correction_detail_id': 7, 'table_name': 'releases', 'field_name': 'genre_id', 'key_id': 123, 'key_value': 1 }, { 'release_correction_detail_id': 8, 'table_name': 'releases', 'field_name': 'featuring', 'key_id': 123, 'key_value': [ {'role': 'featuring', 'artist_name': 'Gaahls Wyrd'}, {'role': 'featuring', 'artist_name': 'Jaani Peuhu'}, {'role': 'featuring', 'artist_name': 'Napalm Death'}, {'role': 'featuring', 'artist_name': 'Umbra'} ] } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) actual = release_correction.get_release_correction_updates(123) assert actual == ({ 'imprint': 'MIXUS', 'c_line': '2020 MIXUS', 'subgenre_id': 168, 'genre_id': 1, }, { 'featuring': [ {'role': 'featuring', 'artist_name': 'Gaahls Wyrd'}, {'role': 'featuring', 'artist_name': 'Jaani Peuhu'}, {'role': 'featuring', 'artist_name': 'Napalm Death'}, {'role': 'featuring', 'artist_name': 'Umbra'} ] }) def test_get_release_revisions_without_update(request_engine): """Test getting release metadata updates without any updates to make.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'submitted', 'items': [ { 'release_correction_detail_id': 345, 'table_name': 'releases', 'field_name': 'coverart', 'key_id': 123, 'key_value': True }, { 'release_correction_detail_id': 346, 'table_name': 'track', 'field_name': 'label', 'key_id': 456, 'key_value': 'foo' }, { 'release_correction_detail_id': 347, 'table_name': 'track', 'field_name': 'track_name', 'key_id': 456, 'key_value': 'bar' } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) with pytest.raises(IneligibleEventError) as e: release_correction.get_release_correction_updates(123) assert e.value.args[0] == 'No release metadata to update.' def test_get_release_revisions_remaps_release_name(request_engine): """Test that release_name field is remapped to product_name.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'submitted', 'items': [ { 'release_correction_detail_id': 1, 'table_name': 'releases', 'field_name': 'release_name', 'key_id': 123, 'key_value': 'My Album' } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) actual = release_correction.get_release_correction_updates(123) assert actual == ({'product_name': 'My Album'}, {}) def test_raises_with_unknown_field(request_engine): """Test raising when encountering an unknown field.""" mock_response = { 'release_correction_id': 234, 'release_id': 123, 'status': 'submitted', 'items': [ { 'release_correction_detail_id': 345, 'table_name': 'releases', 'field_name': 'coverart', 'key_id': 123, 'key_value': True }, { 'release_correction_detail_id': 346, 'table_name': 'releases', 'field_name': 'genre_id', 'key_id': 123, 'key_value': 6 }, { 'release_correction_detail_id': 347, 'table_name': 'releases', 'field_name': 'foo_bar', 'key_id': 123, 'key_value': 'baz' } ] } request_engine['ows-product-workflow'].add_spec( 'GET', '/correction/123', response=mock_response ) with pytest.raises(Exception) as e: release_correction.get_release_correction_updates(123) assert e.value.args[0] == 'Unknown field name found' assert e.value.args[1] == 'foo_bar'