"""Tests v43 DDEX sound recording generation."""
from textwrap import dedent
from unittest.mock import patch
from soundrecording_utils.ddex.v43 import sound_recording
from soundrecording_utils.ddex.v43.e import E
from soundrecording_utils.metadata.types import Language, OrchardSoundRecording, Track, TrackConnection
def test_format_track_duration_iso_8601(mock_track: Track):
"""Test that format_track_duration formats validly."""
formatted = sound_recording._format_track_duration_iso_8601(mock_track)
assert formatted == 'PT1M2S'
def test_generate_language_of_performance_instrumental(
mock_track: Track,
helpers,
):
"""Test _generate_language_of_performance for N/A meta language."""
mock_track = mock_track._replace(
meta_language_code='N/A',
)
result = sound_recording._generate_language_of_performance(mock_track)
result = helpers.print_xml(result)
expected = """
true
"""
assert result == dedent(expected).strip()
def test_generate_language_of_performance_with_language(
mock_track: Track,
helpers,
):
"""Test _generate_language_of_performance with a language."""
mock_track = mock_track._replace(
meta_language_code='EN',
language=Language(
iso_639_1_code='ES',
),
)
result = sound_recording._generate_language_of_performance(mock_track)
result = helpers.print_xml(result)
expected = """
es
"""
assert result == dedent(expected).strip()
def test_generate_language_of_performance_without_language(
mock_track: Track,
helpers,
):
"""Test _generate_language_of_performance without a language."""
mock_track = mock_track._replace(
meta_language_code='EN',
language=Language(iso_639_1_code=None)
)
result = sound_recording._generate_language_of_performance(mock_track)
assert result is None
def test_generate_subtitle_with_version(
mock_track: Track,
helpers,
):
"""Test _generate_subtitle with a track version."""
mock_track = mock_track._replace(
version='Test Subtitle',
)
result = sound_recording._generate_subtitle(mock_track)
result = helpers.print_xml(result)
expected = """
Test Subtitle
"""
assert result == dedent(expected).strip()
def test_generate_subtitle_without_version(
mock_track: Track,
helpers,
):
"""Test _generate_subtitle with a track version."""
mock_track = mock_track._replace(
version=None,
)
result = sound_recording._generate_subtitle(mock_track)
assert result is None
@patch('soundrecording_utils.ddex.v43.sound_recording._generate_subtitle')
def test_generate_display_title(
mock_generate_subtitle,
mock_track: Track,
helpers,
):
"""Test generate_display_title."""
mock_generate_subtitle.return_value = None
result = sound_recording.generate_display_title(mock_track)
result = helpers.print_xml(result)
expected = """
Test Track Name
"""
assert result == dedent(expected).strip()
@patch('soundrecording_utils.ddex.v43.sound_recording._generate_subtitle')
def test_generate_display_title_with_version(
mock_generate_subtitle,
mock_track: Track,
helpers,
):
"""Test generate_display_title."""
mock_generate_subtitle.return_value = E('MockSubTitle', 'SubTitle')
result = sound_recording.generate_display_title(mock_track)
result = helpers.print_xml(result)
expected = """
Test Track Name
SubTitle
"""
assert result == dedent(expected).strip()
def test_generate_display_title_text(
mock_track: Track,
helpers,
):
"""Test generate_display_title_text."""
result = sound_recording.generate_display_title_text(mock_track)
result = helpers.print_xml(result)
expected = """
Test Track Name
"""
assert result == dedent(expected).strip()
@patch('soundrecording_utils.ddex.v43.sound_recording._generate_subtitle')
def test_generate_display_title_text_with_version(
mock_generate_subtitle,
mock_track: Track,
helpers,
):
"""Test generate_display_title_text with version."""
mock_generate_subtitle.return_value = E('SubTitle', 'Special Version')
result = sound_recording.generate_display_title_text(mock_track)
result = helpers.print_xml(result)
expected = """
Test Track Name - Special Version
"""
assert result == dedent(expected).strip()
@patch('soundrecording_utils.ddex.v43.sound_recording._format_track_duration_iso_8601')
@patch('soundrecording_utils.ddex.v43.sound_recording._generate_language_of_performance')
def test_generate_sound_recording_resource(
mock_generate_language_of_performance,
mock_format_track_duration_iso_8601,
mock_orchard_sound_recording: OrchardSoundRecording,
mock_track: Track,
helpers,
):
"""Test generate_sound_recording_release."""
mock_generate_language_of_performance.return_value = E(
'MockLanguageOfPerformance',
)
mock_format_track_duration_iso_8601.return_value = 'Mock Duration'
mock_orchard_sound_recording = mock_orchard_sound_recording._replace(
track_connection=TrackConnection(
tracks=[
mock_track._replace(
primary=False,
name='Track 1',
tuid='123'),
mock_track._replace(
primary=True,
name='Track 2',
tuid='456')
],
),
)
xml = sound_recording.generate_sound_recording_resource(
'A1',
mock_orchard_sound_recording,
mock_orchard_sound_recording.track_connection.tracks[1],
None
)
result = helpers.print_xml(xml)
expected = """
A1
MusicalWorkSoundRecording
isrc-123
(P) 2021 Example Label
Track 2
Track 2
PTHEORCHARD
RightsController
100.00
Mock Duration
NotExplicit
"""
assert result == dedent(expected).strip()