@@ -51,6 +51,46 @@ def add_callbacks(callback=None, errback=None):
5151 future .clear_callbacks = Mock ()
5252 return future
5353
54+ def _create_mock_future (self , result = None , error = None ):
55+ """Create a properly configured mock future that simulates driver behavior."""
56+ future = Mock ()
57+
58+ # Store callbacks
59+ callbacks = []
60+ errbacks = []
61+
62+ def add_callbacks (callback = None , errback = None ):
63+ if callback :
64+ callbacks .append (callback )
65+ if errback :
66+ errbacks .append (errback )
67+
68+ # Delay the callback execution to allow AsyncResultHandler to set up properly
69+ def execute_callback ():
70+ if error :
71+ if errback :
72+ errback (error )
73+ else :
74+ if callback and result is not None :
75+ # For successful results, pass rows
76+ rows = getattr (result , "rows" , [])
77+ callback (rows )
78+
79+ # Schedule callback for next event loop iteration
80+ try :
81+ loop = asyncio .get_running_loop ()
82+ loop .call_soon (execute_callback )
83+ except RuntimeError :
84+ # No event loop, execute immediately
85+ execute_callback ()
86+
87+ future .add_callbacks = add_callbacks
88+ future .has_more_pages = False
89+ future .timeout = None
90+ future .clear_callbacks = Mock ()
91+
92+ return future
93+
5494 @pytest .mark .asyncio
5595 async def test_create_table_already_exists (self , mock_session ):
5696 """Test handling of AlreadyExists errors during schema changes."""
@@ -115,14 +155,10 @@ def execute_async_side_effect(*args, **kwargs):
115155 query = args [0 ] if args else kwargs .get ("query" , "" )
116156 ddl_operations .append (query )
117157
118- # Create a successful future
119- future = Mock ()
120- future .result = Mock (return_value = Mock (one = Mock (return_value = None )))
121- future .add_callbacks = Mock ()
122- future .has_more_pages = False
123- future .timeout = None
124- future .clear_callbacks = Mock ()
125- return future
158+ # Use the same pattern as test_session_edge_cases
159+ result = Mock ()
160+ result .rows = [] # DDL operations return no rows
161+ return self ._create_mock_future (result = result )
126162
127163 mock_session .execute_async .side_effect = execute_async_side_effect
128164
0 commit comments