"""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
Test Track Name
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)