"""snowflake model tests.""" import pytest from src.constants import sql from src.model import snowflake def test_bulk_insert_success(mocker): """Test bulk_insert function for successful execution.""" mock_connection = mocker.patch('src.model.snowflake.get_snowflake_connection') mock_cursor = mocker.Mock() mock_connection.return_value.cursor.return_value = mock_cursor mock_cursor.fetchall.return_value = ['row1', 'row2'] table_name = 'test_table' columns = ['col1', 'col2'] data = [{'col1': 'val1', 'col2': 'val2'}] result = snowflake.bulk_insert(table_name, columns, data) placeholders = ', '.join([f'%({col})s' for col in columns]) column_names = ', '.join(columns) expected_query = sql.INSERT_QUERY_TEMPLATE.format( table_name=table_name, column_names=column_names, placeholders=placeholders ) mock_connection.assert_called_once() mock_cursor.executemany.assert_called_once_with(expected_query, data) mock_cursor.fetchall.assert_called_once() assert result == ['row1', 'row2'] def test_bulk_insert_failure(mocker): """Test bulk_insert function for a failure case.""" mock_connection = mocker.patch('src.model.snowflake.get_snowflake_connection') mock_cursor = mocker.Mock() mock_connection.return_value.cursor.return_value = mock_cursor mock_cursor.executemany.side_effect = Exception('Snowflake error') table_name = 'test_table' columns = ['col1', 'col2'] data = [{'col1': 'val1', 'col2': 'val2'}] with pytest.raises(RuntimeError, match='Failed to execute bulk insert: Snowflake error'): snowflake.bulk_insert(table_name, columns, data) mock_connection.assert_called_once() mock_cursor.executemany.assert_called_once_with( sql.INSERT_QUERY_TEMPLATE.format( table_name=table_name, column_names=', '.join(columns), placeholders=', '.join([f'%({col})s' for col in columns]) ), data )