"""Tests for rename_art_relations_contributor_records.""" import pytest from pytest_mock import MockerFixture from contributor.queries.mysql import rename_art_relations_contributor_records @pytest.fixture def session(mocker: MockerFixture): return mocker.Mock() @pytest.fixture def vendor_id(): return 24888 @pytest.fixture def current_name(): return "Drug Church" @pytest.fixture def new_name(): return "DRUG CHURCH" class TestRenameArtRelationsContributorRecords: def test_calls_all_rename_methods( self, mocker: MockerFixture, session, vendor_id, current_name, new_name ) -> None: mocker.patch("contributor.queries.mysql.artist_info.get", return_value=None) rename_release = mocker.patch( "contributor.queries.mysql.release_artist.rename_release_artists" ) rename_track = mocker.patch( "contributor.queries.mysql.track_artist.rename_track_artists" ) rename_writer = mocker.patch( "contributor.queries.mysql.track_writer.rename_track_writers" ) rename_art_relations_contributor_records( session=session, name=new_name, vendor_id=vendor_id, current_name=current_name, ) expected_kwargs = dict( session=session, current_artist_name=current_name, vendor_id=vendor_id, new_artist_name=new_name, ) rename_release.assert_called_once_with(**expected_kwargs) rename_track.assert_called_once_with(**expected_kwargs) rename_writer.assert_called_once_with(**expected_kwargs) def test_does_not_raise_when_existing_artist_info_is_none( self, mocker: MockerFixture, session, vendor_id, current_name, new_name ) -> None: mocker.patch( "contributor.queries.mysql.artist_info.get", side_effect=[None, {"artist_id": 1}], ) mocker.patch("contributor.queries.mysql.release_artist.rename_release_artists") mocker.patch("contributor.queries.mysql.track_artist.rename_track_artists") mocker.patch("contributor.queries.mysql.track_writer.rename_track_writers") rename_art_relations_contributor_records( session=session, name=new_name, vendor_id=vendor_id, current_name=current_name, ) def test_does_not_raise_when_new_artist_info_is_none( self, mocker: MockerFixture, session, vendor_id, current_name, new_name ) -> None: mocker.patch( "contributor.queries.mysql.artist_info.get", side_effect=[{"artist_id": 1}, None], ) mocker.patch("contributor.queries.mysql.release_artist.rename_release_artists") mocker.patch("contributor.queries.mysql.track_artist.rename_track_artists") mocker.patch("contributor.queries.mysql.track_writer.rename_track_writers") rename_art_relations_contributor_records( session=session, name=new_name, vendor_id=vendor_id, current_name=current_name, ) def test_returns_without_calling_rename_methods_when_artist_ids_do_not_differ( self, mocker: MockerFixture, session, vendor_id, current_name, new_name ) -> None: mocker.patch( "contributor.queries.mysql.artist_info.get", return_value={"artist_id": 42}, ) rename_release = mocker.patch( "contributor.queries.mysql.release_artist.rename_release_artists" ) rename_track = mocker.patch( "contributor.queries.mysql.track_artist.rename_track_artists" ) rename_writer = mocker.patch( "contributor.queries.mysql.track_writer.rename_track_writers" ) rename_art_relations_contributor_records( session=session, name=new_name, vendor_id=vendor_id, current_name=current_name, ) rename_release.assert_not_called() rename_track.assert_not_called() rename_writer.assert_not_called() def test_calls_rename_methods_when_artist_ids_differ( self, mocker: MockerFixture, session, vendor_id, current_name, new_name ) -> None: mocker.patch( "contributor.queries.mysql.artist_info.get", side_effect=[ {"artist_id": 1}, {"artist_id": 2}, ], ) rename_release = mocker.patch( "contributor.queries.mysql.release_artist.rename_release_artists" ) rename_track = mocker.patch( "contributor.queries.mysql.track_artist.rename_track_artists" ) rename_writer = mocker.patch( "contributor.queries.mysql.track_writer.rename_track_writers" ) rename_art_relations_contributor_records( session=session, name=new_name, vendor_id=vendor_id, current_name=current_name, ) rename_release.assert_called_once() rename_track.assert_called_once() rename_writer.assert_called_once()