"""Test prop grps.""" from common.models.state_machine.grps_ingestion_context import \ GrpsIngestionContext from common.models.state_machine.product import Product from common.models.state_machine.project import Project from common.models.state_machine.track import Track from src.prep_grps import prep_forbidden_sequence, prep_track_name_length, \ prep_track_sequence_and_volume_number, remove_track_isrc_duplicates def test_prep_track_sequence_number(): """Test test_prep_track_sequence_number.""" tracks = [ Track(sequence_number=1, volume=1), Track(sequence_number=2, volume=1), Track(sequence_number=3, volume=1), Track(sequence_number=5, volume=1), Track(sequence_number=7, volume=1), Track(sequence_number=19, volume=1), Track(sequence_number=1, volume=2), Track(sequence_number=2, volume=2), Track(sequence_number=3, volume=2), Track(sequence_number=4, volume=2), Track(sequence_number=1, volume=3), Track(sequence_number=5, volume=3), Track(sequence_number=9, volume=3), Track(sequence_number=0, volume=4), Track(sequence_number=1, volume=4), Track(sequence_number=1, volume=4), Track(sequence_number=1, volume=4), Track(sequence_number=1, volume=4), ] prep_track_sequence_and_volume_number(tracks) assert [track.sequence_number for track in tracks if track.volume == 1] == [1, 2, 3, 4, 5, 6] assert [track.sequence_number for track in tracks if track.volume == 2] == [1, 2, 3, 4] assert [track.sequence_number for track in tracks if track.volume == 3] == [1, 2, 3] assert [track.sequence_number for track in tracks if track.volume == 4] == [1, 2, 3, 4, 5] def test_prep_track_volume_number(): """Test test_prep_track_sequence_number with missing volume.""" tracks = [ Track(sequence_number=1, volume=2), Track(sequence_number=2, volume=2), Track(sequence_number=4, volume=2), Track(sequence_number=5, volume=2), Track(sequence_number=0, volume=4), Track(sequence_number=1, volume=4), Track(sequence_number=1, volume=4), ] prep_track_sequence_and_volume_number(tracks) assert [track.sequence_number for track in tracks if track.volume == 1] == [1, 2, 3, 4] assert [track.sequence_number for track in tracks if track.volume == 2] == [1, 2, 3] def test_prep_track_sequence_volume_do_nothing(): """Test test_prep_track_sequence_number with valid data.""" tracks = [ Track(sequence_number=1, volume=1, isrc='1_1'), Track(sequence_number=2, volume=2, isrc='2_2'), Track(sequence_number=3, volume=3, isrc='3_3'), Track(sequence_number=5, volume=2, isrc='5_2'), Track(sequence_number=3, volume=2, isrc='3_2'), Track(sequence_number=3, volume=1, isrc='3_1'), Track(sequence_number=4, volume=2, isrc='4_2'), Track(sequence_number=1, volume=2, isrc='1_2'), Track(sequence_number=1, volume=3, isrc='1_3'), Track(sequence_number=2, volume=3, isrc='2_3'), Track(sequence_number=2, volume=1, isrc='2_1'), Track(sequence_number=4, volume=3, isrc='4_3'), ] prep_track_sequence_and_volume_number(tracks) for track in tracks: assert track.isrc == f'{track.sequence_number}_{track.volume}' def test_prep_forbidden_sequence(): """Make sure we break up the invalid sequence.""" project = Project(name='Name with ../invalid seq') track = Track(track_name='Name with ../ invalid sequence') grps_ingestion_context = GrpsIngestionContext(project=project, product=Product(), tracks=[track]) prep_forbidden_sequence(grps_ingestion_context) assert grps_ingestion_context.project.name == 'Name with .. / invalid seq' assert grps_ingestion_context.tracks[0].track_name == 'Name with .. / invalid sequence' # noqa def test_prep_track_name_length_to_long(): """Make sure we truncate track names that are too long.""" track = Track() track.track_name = 'A very long track name that exceeds the 200 character limit 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 1' # noqa: E501 prep_track_name_length([track]) assert len(track.track_name) <= 200 assert track.track_name[-3:] == '...' def test_remove_track_isrc_duplicates(): """Make sure isrc duplicates are removed.""" track_1 = Track(isrc='1', track_name='track') track_2 = Track(isrc='2') track_3 = Track(isrc='1', track_name='song') result = remove_track_isrc_duplicates([track_1, track_2, track_3]) assert result == [track_1, track_2]