"""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()