"""Tests for S3 util functions.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from feed_sender.util import mysql def mock_session_factory(): """Produce mock session object.""" mock_session = MagicMock() mock_session.commit.return_value = 'commit' mock_session.rollback.return_value = None mock_session.close.return_value = 'close' mock_session.execute.return_value = None return mock_session def mock_session_factory_for_query_exception(): """Produce mock session object.""" mock_session = MagicMock() mock_session.commit.side_effect = Exception('holyshxx something fails') mock_session.commit.return_value = None mock_session.rollback.return_value = None mock_session.close.return_value = None mock_session.execute.return_value = None return mock_session @patch('feed_sender.util.mysql.sessionmaker') @patch('feed_sender.util.mysql.create_engine') @patch('feed_sender.util.mysql.sentry') def test_execute_with_error( mock_sentry, mock_create_engine, mock_sessionmaker): """Test mysql_query method.""" mock_sentry_obj = MagicMock() mock_sentry_obj.captureException.return_value = None mock_session = mock_session_factory_for_query_exception() mock_create_engine.return_value = None mock_sessionmaker.return_value = mock_session_factory_for_query_exception mock_sentry.get_client.return_value = mock_sentry_obj with pytest.raises(Exception): mysql.execute('this is a test', field1='value1') assert mock_session.commit.called assert mock_session.rollback.called assert mock_session.close.called assert mock_sentry_obj.captureException.called @patch('feed_sender.util.mysql._session_factory') def test_execute(mock_session_factory): """Test mysql_query method.""" mock_session = mock_session_factory() mock_session_factory.return_value = mock_session mysql.execute('this is a test', field1='value1') assert mock_session.commit.called assert mock_session.close.called @patch('feed_sender.util.mysql._session_factory') @patch('feed_sender.util.mysql.sentry') def test_fetchall_no_result(mock_sentry, mock_session_factory): """Test fetchall no result.""" mock_results = MagicMock() mock_session = MagicMock() mock_session.commit.return_value = 'commit' mock_session.rollback.return_value = None mock_session.close.return_value = 'close' mock_session.execute.return_value = mock_results mock_results.mappings.return_value.fetchmany.return_value = None mock_session_factory.return_value = mock_session mock_sentry_obj = MagicMock() mock_sentry_obj.captureException.return_value = None mock_sentry.get_client.return_value = mock_sentry_obj actual = mysql.fetchall('this is a test') for row in actual: assert not row