"""Tests for artist_info MySQL queries.""" from contextlib import nullcontext from pytest_mock import MockerFixture from contributor.queries.mysql.artist_info import ArtistInfo, get class TestGetArtistInfo: def test_returns_artist_info_dict_when_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.scalar_one_or_none.return_value = ArtistInfo( artist_id=929075, name="Drug Church", vendor_id=24888, ) result = get(session=session, name="Drug Church", vendor_id=24888) session.execute.assert_called_once() execute_result.scalar_one_or_none.assert_called_once_with() assert result == { "artist_id": 929075, "name": "Drug Church", "vendor_id": 24888, } stmt = session.execute.call_args.args[0] where_clause = stmt.whereclause assert "name" in str(where_clause) assert "vendor_id" in str(where_clause) def test_returns_none_when_not_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.scalar_one_or_none.return_value = None result = get(session=session, name="Drug Church", vendor_id=24888) session.execute.assert_called_once() execute_result.scalar_one_or_none.assert_called_once_with() assert result is None def test_uses_wrapped_session_when_not_passed(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.scalar_one_or_none.return_value = ArtistInfo( artist_id=836398, name="Knocked Loose", vendor_id=24888, ) ar_db_session_mock = mocker.patch( "contributor.connectors.mysql.ar_db_session", return_value=nullcontext(session), ) result = get(name="Knocked Loose", vendor_id=24888) ar_db_session_mock.assert_called_once_with() assert result == { "artist_id": 836398, "name": "Knocked Loose", "vendor_id": 24888, }