"""Contributor schema tests.""" from contributor.api.schemas.contributors import ( ContributorInput, UpdateContributorRequest, ) from contributor.api.schemas.tracks import ( TrackDataloaderRequest, TrackKey, TrackParticipations, ) class TestContributorInput: def test_strips_spotify_artist_uri_prefix_after_trimming(self) -> None: contributor = ContributorInput( name="Public Opinion", spotify_id=" spotify:artist:62vfQ1IiuwsEwyqPWiAsWF ", ) assert contributor.spotify_id == "62vfQ1IiuwsEwyqPWiAsWF" def test_leaves_plain_spotify_id_unchanged(self) -> None: contributor = ContributorInput( name="Public Opinion", spotify_id="62vfQ1IiuwsEwyqPWiAsWF", ) assert contributor.spotify_id == "62vfQ1IiuwsEwyqPWiAsWF" def test_leaves_missing_spotify_id_as_none(self) -> None: contributor = ContributorInput(name="Public Opinion", spotify_id=None) assert contributor.spotify_id is None def test_coalesces_blank_spotify_id_to_none(self) -> None: contributor = ContributorInput(name="Public Opinion", spotify_id=" ") assert contributor.spotify_id is None def test_trims_apple_music_id(self) -> None: contributor = ContributorInput( name="Public Opinion", apple_music_id=" 123456789 ", ) assert contributor.apple_music_id == "123456789" def test_coalesces_blank_apple_music_id_to_none(self) -> None: contributor = ContributorInput( name="Public Opinion", apple_music_id=" ", ) assert contributor.apple_music_id is None class TestUpdateContributorRequest: def test_strips_spotify_artist_uri_prefix_after_trimming(self) -> None: contributor = UpdateContributorRequest( spotify_id=" spotify:artist:62vfQ1IiuwsEwyqPWiAsWF ", ) assert contributor.spotify_id == "62vfQ1IiuwsEwyqPWiAsWF" def test_leaves_plain_spotify_id_unchanged(self) -> None: contributor = UpdateContributorRequest( spotify_id="62vfQ1IiuwsEwyqPWiAsWF", ) assert contributor.spotify_id == "62vfQ1IiuwsEwyqPWiAsWF" def test_leaves_missing_spotify_id_as_none(self) -> None: contributor = UpdateContributorRequest(spotify_id=None) assert contributor.spotify_id is None def test_coalesces_blank_spotify_id_to_none(self) -> None: contributor = UpdateContributorRequest(spotify_id=" ") assert contributor.spotify_id is None def test_trims_apple_music_id(self) -> None: contributor = UpdateContributorRequest( apple_music_id=" 123456789 ", ) assert contributor.apple_music_id == "123456789" def test_coalesces_blank_apple_music_id_to_none(self) -> None: contributor = UpdateContributorRequest( apple_music_id=" ", ) assert contributor.apple_music_id is None class TestTrackDataloaderRequest: def test_parses_track_ids(self) -> None: request = TrackDataloaderRequest( tracks=[TrackKey(tuid=101), TrackKey(tuid=202)] ) assert [track.tuid for track in request.tracks] == [101, 202] class TestTrackParticipations: def test_parses_track_payload(self) -> None: payload = TrackParticipations.model_validate( { "track": {"tuid": 101}, "participations": [ { "contributor": {"uuid": "550e8400-e29b-41d4-a716-446655440000"}, "participated_as": "performer", "track": {"tuid": 101}, "track_artist_id": 1001, } ], } ) assert payload.track.tuid == 101 assert payload.participations[0].track_artist_id == 1001