"""Tests for Metadata.""" from typing import Iterable import pytest from gridgen.models import metadata from gridgen.models.metadata import TrackMeta upc = "669910123456" isrc = "US1234567890" RELEASE_META = metadata.ReleaseMeta( 15645612, upc, "grid", "product_number", "release_name", "release_supplemental_info", "configuration", "repertoire_owner", "display_artist_name", "gras_status", "format", ) TRACK_META = metadata.TrackMeta( 123132, upc, isrc, "This is a test track", "track_supplemental_info", "p_line", "track_type", 123, set(), set(), ) EQUALITY_TEST_DATA = [ metadata.TrackMeta( duration=187, isrc="myisrc", main_participants={metadata.ArtistMeta(name="My Artist", role="drummer")}, p_line="My PLine", product_numbers={metadata.GridMeta(grid=None, product_no="mynumber")}, track_id=123, track_name="My Track", track_supplemental_info="", track_type="audio", upc="666", ) ] def test_get_track_by_isrc() -> None: """Test get_track_by_isrc.""" release = metadata.Release(RELEASE_META, {TRACK_META}) track = release.get_track_by_isrc(isrc) assert track assert track.isrc == isrc assert track.track_name == "This is a test track" if release.metadata: assert release.metadata.upc == upc def test_add_track() -> None: """Test add_track.""" release = metadata.Release(RELEASE_META) release.add_track(TRACK_META) new_isrc = "DE1234567890" new_track = metadata.TrackMeta( 23423, upc, new_isrc, "This is a second test track", "track_supplemental_info", "p_line", "track_type", 31243, set(), set(), ) release.add_track(new_track) assert isinstance(release.tracks, dict) assert len(release.tracks) == 2 assert new_isrc in release.tracks def altered_tuples(meta_tuple: TrackMeta) -> Iterable[TrackMeta]: """Alter a meta_tuple.""" for attr in meta_tuple.__dict__: attrs = dict(meta_tuple.__dict__) if isinstance(getattr(meta_tuple, attr), (set, list, tuple)): attrs[attr] = ["###"] else: attrs[attr] = "###" yield type(meta_tuple)(**attrs) @pytest.mark.parametrize("meta_tuple", EQUALITY_TEST_DATA) def test_metadata_hashes(meta_tuple: TrackMeta) -> None: """Test that metadata tuple is hashable.""" assert meta_tuple in {meta_tuple} assert meta_tuple not in set() meta_tuple2 = type(meta_tuple)(**dict(meta_tuple.__dict__)) assert meta_tuple is not meta_tuple2 assert hash(meta_tuple) == hash(meta_tuple2) for meta_tuple2 in altered_tuples(meta_tuple): assert meta_tuple is not meta_tuple2 assert hash(meta_tuple) != hash(meta_tuple2) @pytest.mark.parametrize("meta_tuple", EQUALITY_TEST_DATA) def test_metadata_equality(meta_tuple: TrackMeta) -> None: """Test that metadata tuple has correct eq implementation.""" meta_tuple2 = type(meta_tuple)(**dict(meta_tuple.__dict__)) assert meta_tuple is not meta_tuple2 assert meta_tuple == meta_tuple2 for meta_tuple2 in altered_tuples(meta_tuple): assert meta_tuple is not meta_tuple2 assert meta_tuple != meta_tuple2