"""Tests for sound recording participation Neo4j queries.""" from unittest.mock import MagicMock import pytest from contributor.queries.neo4j.sound_recording_participations import ( get_by_label_participant_uuid, ) @pytest.fixture def label_participant_uuid(): return "550e8400-e29b-41d4-a716-446655440000" @pytest.fixture def participations_record(label_participant_uuid): record = MagicMock() record.__getitem__ = lambda self, key: { "contributor": {"uuid": label_participant_uuid}, "participations": [ { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": {"id": "0457b5bb-b032-464d-a232-7cf8100a057a"}, "role": { "apple_role_name": "Recording Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-1"}, "ddex_role_name": "RecordingEngineer", "name": "Recording Engineer", }, "sequence_number": 1, }, { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": {"id": "891e83b4-0502-4230-8fa9-733ee70949ea"}, "role": { "apple_role_name": "Mixing Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-2"}, "ddex_role_name": "MixingEngineer", "name": "Mixing Engineer", }, "sequence_number": 2, }, ], }[key] record.get = lambda key, default=None: { "contributor": {"uuid": label_participant_uuid}, "participations": [ { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": {"id": "0457b5bb-b032-464d-a232-7cf8100a057a"}, "role": { "apple_role_name": "Recording Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-1"}, "ddex_role_name": "RecordingEngineer", "name": "Recording Engineer", }, "sequence_number": 1, }, { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": {"id": "891e83b4-0502-4230-8fa9-733ee70949ea"}, "role": { "apple_role_name": "Mixing Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-2"}, "ddex_role_name": "MixingEngineer", "name": "Mixing Engineer", }, "sequence_number": 2, }, ], }.get(key, default) return record @pytest.fixture def session(participations_record): session = MagicMock() result = MagicMock() result.single.return_value = participations_record session.run.return_value = result return session @pytest.fixture def empty_session(): session = MagicMock() result = MagicMock() result.single.return_value = None session.run.return_value = result return session @pytest.fixture def no_participations_record(label_participant_uuid): """LP exists but has no sound recording participations (OPTIONAL MATCH returns nulls).""" record = MagicMock() record.__getitem__ = lambda self, key: { "contributor": {"uuid": label_participant_uuid}, "participations": [None], }[key] record.get = lambda key, default=None: { "contributor": {"uuid": label_participant_uuid}, "participations": [None], }.get(key, default) return record class TestGetByLabelParticipantUuid: def test_returns_participations(self, session, label_participant_uuid) -> None: result = get_by_label_participant_uuid( session, uuid=label_participant_uuid, profile_ids=[7123], ) assert result == { "contributor": {"uuid": label_participant_uuid}, "participations": [ { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": { "id": "0457b5bb-b032-464d-a232-7cf8100a057a" }, "role": { "apple_role_name": "Recording Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-1"}, "ddex_role_name": "RecordingEngineer", "name": "Recording Engineer", }, "sequence_number": 1, }, { "contributor": {"uuid": label_participant_uuid}, "label_sound_recording": { "id": "891e83b4-0502-4230-8fa9-733ee70949ea" }, "role": { "apple_role_name": "Mixing Engineer", "category": {"name": "Studio Personnel", "uuid": "uuid-2"}, "ddex_role_name": "MixingEngineer", "name": "Mixing Engineer", }, "sequence_number": 2, }, ], } def test_returns_participations_as_admin( self, session, label_participant_uuid ) -> None: result = get_by_label_participant_uuid( session, uuid=label_participant_uuid, profile_ids=[], is_admin=True, ) assert result is not None assert len(result["participations"]) == 2 def test_returns_none_when_not_found(self, empty_session) -> None: assert ( get_by_label_participant_uuid( empty_session, uuid="no-match", profile_ids=[7123] ) is None ) def test_filters_null_participations_from_optional_match( self, no_participations_record, label_participant_uuid ) -> None: session = MagicMock() result = MagicMock() result.single.return_value = no_participations_record session.run.return_value = result srp = get_by_label_participant_uuid( session, uuid=label_participant_uuid, profile_ids=[7123], ) assert srp is not None assert srp["participations"] == []