"""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 ReleaseArtistTable from src.logic.consistency_checks import \ _get_missing_product_participations_records from src.logic.consistency_checks import check_product_participations from src.models.metadata import ProductParticipation class TestCheckProductParticipations: """Tests for check_product_participations.""" @pytest.fixture def ar_get_product_participations_mock(self, mocker): """Fixture for art_relations.get_product_participations.""" return mocker.patch( 'src.logic.art_relations.get_product_participations') @pytest.fixture def product_participations_mock( self, ar_get_product_participations_mock, product_id, participant_uuid, participant_name, participant_role ): """Fixture for art_relations.get_product_participations.""" ar_get_product_participations_mock.return_value = [ ProductParticipation( product_id=product_id, participant_id=participant_uuid, participant_name=participant_name, participant_participated_as=participant_role, ) ] return ar_get_product_participations_mock def test_check_product_participations_full_match( self, product_metadata, product_participations_mock ): """Test check_product_participations full match.""" result = check_product_participations(product_metadata) assert result.to_dict() == {} @pytest.fixture def product_missing_participations_mock( self, ar_get_product_participations_mock, product_id, missing_participant_id, participant_name, participant_role, missing_participant_name ): """Fixture for art_relations.get_product_participations.""" ar_get_product_participations_mock.return_value = [ ProductParticipation( product_id=product_id, participant_id=1, participant_name=participant_name, participant_participated_as=participant_role, ), ProductParticipation( product_id=product_id, participant_id=missing_participant_id, participant_name=missing_participant_name, participant_participated_as=participant_role, ), ] return ar_get_product_participations_mock def test_check_product_participations_missing( self, product_metadata, missing_participant_id, product_missing_participations_mock ): """Test check_product_participations missing participation.""" result = check_product_participations(product_metadata) expected_result = InconsistencyReport( inconsistency_type=InconsistencyType.BAD_PRODUCT_PARTICIPATIONS, missing_data=[ MissingRecord( table_name=ReleaseArtistTable.name, primary_key_name=ReleaseArtistTable.primary_key_name, record_id=missing_participant_id ) ] ) assert result == expected_result class TestMissingRecords: """Tests for _get_missing_records.""" def test_missing_product_participations(self): """Test _get_missing_product_participations_records.""" product_id = 1 product_participation = ProductParticipation( product_id=product_id, participant_id=1, participant_name='participant_name', participant_participated_as='participant_role', ) result = _get_missing_product_participations_records( [product_participation]) expected_result = MissingRecord( table_name=ReleaseArtistTable.name, primary_key_name=ReleaseArtistTable.primary_key_name, record_id=product_id ) assert result == [expected_result]