"""Tests for statement_db model.""" from unittest import mock from pymysql import err import pytest from accounting import config from accounting.models import sql from accounting.models import statement_db def test_get_batch_success(): """Test get batch from stmt_db.""" cursor_mock = mock.MagicMock() expected_query = sql.GET_BATCH.format( table_name=config.MYSQL_TABLE_NAME ) statement_db.get_batch(cursor_mock, 100) cursor_mock.execute.assert_called_with( expected_query, { 'limit': 100, 'offset': 0 } ) def test_get_batch_failed(): """Test get batch from stmt_db failed.""" cursor_mock = mock.MagicMock() cursor_mock.execute.side_effect = err.MySQLError expected_query = sql.GET_BATCH.format( table_name=config.MYSQL_TABLE_NAME ) with pytest.raises(err.MySQLError): statement_db.get_batch(cursor_mock, 100) cursor_mock.execute.assert_called_with( expected_query, { 'limit': 100, 'offset': 0 } ) @pytest.mark.parametrize( 'records, expected_query_params', [ ( [{'isrc': 'TESTISRC', 'tuid': 123, 'internal_conflict': 'null'}], {'isrc': 'TESTISRC', 'tuid': 123, 'internal_conflict': None} ), ( [{'isrc': 'TESTISRC', 'tuid': 'null', 'internal_conflict': 1}], {'isrc': 'TESTISRC', 'tuid': None, 'internal_conflict': 1} ), ] ) def test_update_report(records, expected_query_params): """Test update stmt_db.""" cursor_mock = mock.MagicMock() connection_mock = mock.MagicMock() connection_mock.cursor.return_value.__enter__.return_value = cursor_mock expected_query = sql.UPDATE_REPORT.format( table_name=config.MYSQL_TABLE_NAME) statement_db.update_report(connection_mock, records) cursor_mock.execute.assert_called_with( expected_query, expected_query_params ) connection_mock.commit.assert_called() def test_update_report_failed(): """Test update stmt_db failed.""" cursor_mock = mock.MagicMock() cursor_mock.execute.side_effect = err.MySQLError connection_mock = mock.MagicMock() connection_mock.cursor.return_value.__enter__.return_value = cursor_mock with pytest.raises(err.MySQLError): statement_db.update_report(connection_mock, [{ 'isrc': 'TESTISRC', 'tuid': 123, 'internal_conflict': 'null'}]) connection_mock.commit.assert_not_called() connection_mock.rollback.assert_called()