"""Tests Meta DDEX header generation.""" from textwrap import dedent from unittest.mock import patch from freezegun import freeze_time from soundrecording_utils.constants.ddex.constants import DEFAULT_TERRITORY_CODE from soundrecording_utils.ddex.v38 import release from soundrecording_utils.ddex.v38.e import E from soundrecording_utils.metadata.types import OrchardSoundRecording, TrackConnection @patch('soundrecording_utils.ddex.v38.release.generate_reference_title') @patch( 'soundrecording_utils.ddex.v38.release._generate_all_release_details_by_territories' ) # noqa: E501 def test_generate_release( mock_generate_all_release_details_by_territories, mock_generate_reference_title, mock_orchard_sound_recording: OrchardSoundRecording, helpers, ): """Test generate_release.""" mock_generate_all_release_details_by_territories.return_value = [ E('MockResourceDetailByTerritory1'), E('MockResourceDetailByTerritory2'), ] mock_generate_reference_title.return_value = E('MockReferenceTitle') xml = release.generate_release( 'R0', 'A1', mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0], 'tiktok', ) result = helpers.print_xml(xml) expected = """ isrc-123 R0 A1 SingleResourceRelease (P) 2021 Example Label """ # noqa: E501 assert result == dedent(expected).strip() @patch( 'soundrecording_utils.ddex.v38.release.' '_generate_release_details_by_territory' ) @freeze_time('2024-01-02 12:00:00') def test_generate_all_release_details_by_territories( mock_generate_details, mock_track, mock_orchard_sound_recording, mock_fingerprint_rule, ): """Test track filtering by territories.""" mock_generate_details.return_value = 'Result' t1 = mock_track._replace( rules=[ mock_fingerprint_rule._replace(territory='FR'), mock_fingerprint_rule._replace(territory='US'), ] ) mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[t1], ), ) xml = release._generate_all_release_details_by_territories( mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0], 'tiktok', ) assert xml == ['Result'] mock_generate_details.assert_called_once_with(['FR', 'US'], t1) # noqa:E501 @patch( 'soundrecording_utils.ddex.v38.release.' '_generate_release_details_by_territory' ) def test_generate_all_release_details_by_territories_no_territories( mock_generate_details, mock_track, mock_orchard_sound_recording ): """Test track filtering by territories.""" mock_generate_details.return_value = 'Result' t1 = mock_track._replace(rules=[]) mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[t1], ), ) xml = release._generate_all_release_details_by_territories( mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0], 'tiktok', ) assert xml == ['Result'] mock_generate_details.assert_called_once_with([DEFAULT_TERRITORY_CODE], t1) # noqa:E501 @patch('soundrecording_utils.ddex.v38.release.' 'generate_display_artist_name') @patch('soundrecording_utils.ddex.v38.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)