"""Unit testcases for db connector.""" from unittest.mock import MagicMock, patch import pymysql from adjustments_json_import.connectors.db import ( bulk_insert_query, execute_query, mysql_connection, ) @patch('adjustments_json_import.connectors.db.pymysql.connect') def test_mysql_connection(mock_connect): """Test mysql_connection function.""" mock_connection = MagicMock() mock_connect.return_value = mock_connection host = 'localhost' user = 'test_user' password = 'test_password' database = 'test_db' with mysql_connection(host, user, password, database): mock_connect.assert_called_once_with( host=host, user=user, passwd=password, db=database, connect_timeout=5, port=3306, cursorclass=pymysql.cursors.DictCursor, autocommit=False, ) mock_connect.return_value.close.assert_called() def test_execute_query(): """Test execute_query function.""" mock_mysql_conn = MagicMock() cursor_mock = MagicMock() mock_mysql_conn.cursor.return_value.__enter__.return_value = cursor_mock query = 'select * from table' args = {'years': [2023]} execute_query(query, args, mock_mysql_conn) cursor_mock.fetchall.assert_called_once() cursor_mock.execute.assert_called_once_with(query, args=args) def test_bulk_insert_query(): """Test bulk_insert_query function.""" mock_mysql_conn = MagicMock() cursor_mock = MagicMock() mock_mysql_conn.cursor.return_value.__enter__.return_value = cursor_mock query = 'insert into table(id, name) values %(id)s, %(name)s' args = [{'id': 1, 'name': 'Test 1'}, {'id': 2, 'name': 'Test 2'}] bulk_insert_query(query, args, mock_mysql_conn) cursor_mock.executemany.assert_called_once_with(query, args) mock_mysql_conn.commit.assert_called_once()