"""Tests ddex utility functions.""" from src.ddex import util import pytest from soundrecording_utils.metadata.types import OrchardSoundRecording from soundrecording_utils.metadata.types import Product from soundrecording_utils.metadata.types import Track from soundrecording_utils.metadata.types import TrackConnection def test_get_primary_track( mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track ): """Test selection of primary track.""" mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace( name='Track 1', primary=False ), mock_track._replace( name='Track 2', primary=True ) ] ) ) result = util.get_primary_track(mock_orchard_sound_recording) assert result.name == 'Track 2' def test_no_tracks(mock_orchard_sound_recording: OrchardSoundRecording): """Test dummy Track generation.""" mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection(tracks=[]) ) result = util.get_primary_track(mock_orchard_sound_recording) assert result.territories == [] assert result.name == '' assert result.isrc == '' assert result.duration_seconds == 0 assert result.duration_minutes == 0 def test_no_primary_tracks( mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track ): """Test exception on no primary track.""" mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace( name='Track 1', primary=False ), mock_track._replace( name='Track 2', primary=False ) ] ) ) with pytest.raises(StopIteration): util.get_primary_track(mock_orchard_sound_recording) def test_deduplicate_territories( mock_orchard_sound_recording: OrchardSoundRecording, mock_track: Track, mock_product: Product ): """Test resolving territories claimed by multiple tracks.""" mock_orchard_sound_recording = mock_orchard_sound_recording._replace( track_connection=TrackConnection( tracks=[ mock_track._replace( name='Track 1', territories=['AA', 'BB', 'DD'], product=mock_product._replace( release_date='2019-06-15' ) ), mock_track._replace( name='Track 2', territories=['AA', 'EE', 'DD'], product=mock_product._replace( release_date='2019-06-14' ) ), mock_track._replace( name='Track 3', territories=[], product=mock_product._replace( release_date='2019-06-16' ) ) ] ) ) result_tracks = util.deduplicate_territories(mock_orchard_sound_recording) assert len(result_tracks) == 3 assert result_tracks[0].name == 'Track 2' assert result_tracks[0].territories == ['AA', 'DD', 'EE'] assert result_tracks[1].name == 'Track 1' assert result_tracks[1].territories == ['BB'] assert result_tracks[2].name == 'Track 3' assert result_tracks[2].territories == []