"""Tests for mysql module.""" import pytest from sqlalchemy import exc from tests.unit import db_utils from users.connectors import mysql, sentry @db_utils.test_schema def test_session_rollback(mocker): """Check session context manager rollbacks transaction in exception.""" mock = mocker.patch.object(mysql, '_db_session') with pytest.raises(exc.SQLAlchemyError): with mysql.db_session(): raise exc.SQLAlchemyError() session = mock.return_value assert session.rollback.called assert session.close.called def test_wrap_errors_fails(context, mocker): """Check wrap errors decorator.""" @mysql.wrap_db_errors def func(): raise exc.SQLAlchemyError() mock = mocker.patch.object(sentry.sentry_client, 'capture_message') with context: response = func() assert response.status == 500 assert mock.called def test_wrap_errors_pass(): """Check wrap errors decorator.""" @mysql.wrap_db_errors def func(): pass response = func() assert response is None @db_utils.test_schema def test_db_read_session_success(mocker): """Test db_read_session when query exec is success.""" mock = mocker.patch.object(mysql, '_db_session') with mysql.db_read_session(): pass session = mock.return_value assert not session.commit.called assert session.close.called @db_utils.test_schema def test_db_read_session_error(mocker): """Test db_read_session when query exec throws error.""" mock = mocker.patch.object(mysql, '_db_session') with pytest.raises(exc.SQLAlchemyError): with mysql.db_read_session(): raise exc.SQLAlchemyError() session = mock.return_value assert not session.rollback.called assert session.close.called