"""Unit tests for metadata-consistency-checks logic.""" import pytest from src.common.models.metadata import InconsistencyReport from src.common.models.metadata import InconsistencyType from src.common.models.metadata import MissingRecord from src.common.models.metadata import TrackArtistTable from src.common.models.metadata import TrackWriterTable from src.logic.consistency_checks import _get_missing_track_participations_records from src.logic.consistency_checks import check_track_participations from src.models.metadata import TrackParticipation class TestCheckTrackParticipations: """Tests for check_track_participations.""" @pytest.fixture def ar_get_track_participations_mock(self, mocker): """Fixture for art_relations.get_track_participations.""" return mocker.patch('src.logic.art_relations.get_track_participations') @pytest.fixture def track_participations_mock( self, ar_get_track_participations_mock, tuid_1, tuid_2, participant_name, participant_role): """Fixture for art_relations.get_track_participations.""" ar_get_track_participations_mock.return_value = [ TrackParticipation( track_id=int(tuid_1), participant_id=1, participant_name=participant_name, participant_participated_as=participant_role, ), TrackParticipation( track_id=int(tuid_2), participant_id=2, participant_name=participant_name, participant_participated_as=participant_role, ), ] return ar_get_track_participations_mock def test_get_track_participations_diff_full_match( self, product_metadata, track_participations_mock): """Test _get_track_participations_diff full match.""" result = check_track_participations(product_metadata) assert result.to_dict() == {} @pytest.fixture def track_missing_participations_mock( self, ar_get_track_participations_mock, tuid_1, tuid_2, participant_name, participant_role, missing_participant_id, missing_participant_name): """Fixture for art_relations.get_track_participations.""" ar_get_track_participations_mock.return_value = [ TrackParticipation( track_id=1, participant_id=1, participant_name=participant_name, participant_participated_as=participant_role, ), TrackParticipation( track_id=1, participant_id=missing_participant_id, participant_name=missing_participant_name, participant_participated_as=participant_role, ) ] return ar_get_track_participations_mock def test_get_track_participations_diff_missing( self, product_metadata, track_missing_participations_mock, missing_participant_id, missing_participant_name): """Test _get_track_participations_diff missing participation.""" result = check_track_participations(product_metadata) expected_result = InconsistencyReport( inconsistency_type=InconsistencyType.BAD_TRACK_PARTICIPATIONS, missing_data=[ MissingRecord( table_name=TrackArtistTable.name, primary_key_name=TrackArtistTable.primary_key_name, record_id=missing_participant_id ) ] ) assert result == expected_result class TestMissingRecords: """Tests for _get_missing_records.""" def test_missing_track_participations_track_artist(self): """Test _get_missing_track_participations_records track_artist.""" participant_id = 1 track_participation = TrackParticipation( track_id=1, participant_id=participant_id, participant_name='participant_name', participant_participated_as='performer', ) result = _get_missing_track_participations_records([track_participation]) expected_result = MissingRecord( table_name=TrackArtistTable.name, primary_key_name=TrackArtistTable.primary_key_name, record_id=participant_id ) assert result == [expected_result] def test_missing_track_participations_track_writer(self): """Test _get_missing_track_participations_records track_writer.""" participant_id = 1 track_participation = TrackParticipation( track_id=1, participant_id=participant_id, participant_name='participant_name', participant_participated_as='track_writer', ) result = _get_missing_track_participations_records([track_participation]) expected_result = MissingRecord( table_name=TrackWriterTable.name, primary_key_name=TrackWriterTable.primary_key_name, record_id=participant_id ) assert result == [expected_result]