"""Tests Meta DDEX header generation.""" from textwrap import dedent from unittest.mock import patch from src.constants.ddex import DEFAULT_TERRITORY_CODE from src.ddex import release from src.ddex.e import E from soundrecording_utils.metadata.types import OrchardSoundRecording from soundrecording_utils.metadata.types import Track from soundrecording_utils.metadata.types import TrackConnection @patch('src.ddex.release.generate_p_line') def test_generate_p_lines( mock_generate_p_line, mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track, helpers, ): """Test _generate_p_lines for single label.""" mock_generate_p_line.side_effect = lambda p_info: E('MockPLine', p_info) result = release._generate_p_lines(mock_orchard_sound_recording) pline_collection = E( 'TestContainer', *result, ) result = helpers.print_xml(pline_collection) expected = """ 2021 Example Label """ assert result == dedent(expected).strip() @patch('src.ddex.release.generate_p_line') def test_generate_p_lines_duplicate_track_p_lines( mock_generate_p_line, mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track, helpers, ): """Test _generate_p_lines for duplicate labels.""" mock_generate_p_line.side_effect = lambda p_info: E('MockPLine', p_info) mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track, mock_track, ], ), ) result = release._generate_p_lines(mock_orchard_sound_recording) pline_collection = E( 'TestContainer', *result, ) result = helpers.print_xml(pline_collection) expected = """ 2021 Example Label """ assert result == dedent(expected).strip() @patch('src.ddex.release.generate_p_line') def test_generate_p_lines_multiple_track_p_lines( mock_generate_p_line, mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track, helpers, ): """Test _generate_p_lines for multiple labels.""" mock_generate_p_line.side_effect = lambda p_info: E('MockPLine', p_info) mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace( p_info='2020 Example Label', ), mock_track._replace( p_info='2021 Some Other Label', ), mock_track._replace( p_info='2020 Example Label', ), ], ), ) result = release._generate_p_lines(mock_orchard_sound_recording) pline_collection = E( 'TestContainer', *result, ) result = helpers.print_xml(pline_collection) expected = """ 2020 Example Label 2021 Some Other Label """ assert result == dedent(expected).strip() @patch('src.ddex.release.generate_reference_title') @patch('src.ddex.release._generate_p_lines') @patch('src.ddex.release._generate_all_release_details_by_territories') def test_generate_release( mock_generate_all_release_details_by_terretories, mock_generate_p_lines, mock_generate_reference_title, mock_orchard_sound_recording: OrchardSoundRecording, helpers, ): """Test generate_release.""" mock_generate_p_lines.return_value = [ E('MockPLine1'), E('MockPLine2'), ] mock_generate_all_release_details_by_terretories.return_value = [ E('MockResourceDetailByTerritory1'), E('MockResourceDetailByTerritory2'), ] mock_generate_reference_title.return_value = E('MockReferenceTitle') result = release.generate_release( 'R0', 'A1', mock_orchard_sound_recording, ) result = helpers.print_xml(result) expected = """ XXAAA2100000 R0 A1 SingleResourceRelease """ # noqa: E501 assert result == dedent(expected).strip() @patch( 'src.ddex.release.' '_generate_release_details_by_territory' ) @patch( 'src.ddex.release.' 'deduplicate_territories' ) def test_generate_all_release_details_by_territories( mock_deduplicate_territories, mock_generate_details, mock_track, mock_orchard_sound_recording): """Test track filtering by territories.""" mock_generate_details.return_value = 'Result' mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace(territories=[]), mock_track ], ), ) mock_deduplicate_territories.return_value = \ mock_orchard_sound_recording.track_connection.tracks result = release._generate_all_release_details_by_territories( mock_orchard_sound_recording ) assert result == ['Result'] mock_deduplicate_territories.assert_called_once_with(mock_orchard_sound_recording) # noqa:E501 mock_generate_details.assert_called_once_with(mock_track.territories, mock_track) # noqa:E501 @patch( 'src.ddex.release.' '_generate_release_details_by_territory' ) @patch( 'src.ddex.release.' 'deduplicate_territories' ) def test_generate_all_release_details_by_territories_no_territories( mock_deduplicate_territories, mock_generate_details, mock_track, mock_orchard_sound_recording): """Test track filtering by territories.""" mock_generate_details.return_value = 'Result' mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace(territories=[]), mock_track._replace(territories=[]) ], ), ) mock_deduplicate_territories.return_value = \ mock_orchard_sound_recording.track_connection.tracks result = release._generate_all_release_details_by_territories( mock_orchard_sound_recording ) assert result == ['Result'] mock_deduplicate_territories.assert_called_once_with(mock_orchard_sound_recording) # noqa:E501 mock_generate_details.assert_called_once_with([DEFAULT_TERRITORY_CODE], mock_track._replace(territories=[])) # noqa:E501 @patch( 'src.ddex.release.' 'generate_display_artist_name' ) @patch( 'src.ddex.release.' 'generate_track_display_artists' ) def test_generate_details_by_territory( mock_generate_track_display_artists, mock_generate_display_artist_name, mock_track, mock_track_participation, helpers): """Test release details xml generation.""" mock_generate_track_display_artists.return_value = [ E('DisplayArtist1'), E('DisplayArtist2') ] mock_generate_display_artist_name.return_value = E('DisplayArtistName') result = release._generate_release_details_by_territory( ['AA', 'BB', 'CC'], mock_track ) result = helpers.print_xml(result) expected = """ AA BB CC Test Label <TitleText>Test Track Name</TitleText> NotExplicit Rock """ assert result == dedent(expected).strip() mock_generate_display_artist_name.assert_called_once_with(mock_track.participations) # noqa:E501 mock_generate_track_display_artists.assert_called_once_with(mock_track)