@@ -186,7 +186,7 @@ def test_bigquery_magic_with_result_saved_to_variable():
186186
187187 sql = 'SELECT 17 AS num'
188188 result = pandas .DataFrame ([17 ], columns = ['num' ])
189- assert 'myvariable ' not in ip .user_ns
189+ assert 'df ' not in ip .user_ns
190190
191191 run_query_patch = mock .patch (
192192 'google.cloud.bigquery.magics._run_query' , autospec = True )
@@ -263,15 +263,15 @@ def test_bigquery_magic_with_project():
263263
264264@pytest .mark .usefixtures ('ipython_interactive' )
265265@pytest .mark .skipif (pandas is None , reason = 'Requires `pandas`' )
266- def test_bigquery_magic_with_formatting_params ():
266+ def test_bigquery_magic_with_formatting_params_with_string ():
267267 ip = IPython .get_ipython ()
268268 ip .extension_manager .load_extension ('google.cloud.bigquery' )
269269 magics .context .credentials = mock .create_autospec (
270270 google .auth .credentials .Credentials , instance = True )
271271
272272 sql = 'SELECT @num AS num'
273273 result = pandas .DataFrame ([17 ], columns = ['num' ])
274- assert 'myvariable ' not in ip .user_ns
274+ assert 'params_string_df ' not in ip .user_ns
275275
276276 run_query_patch = mock .patch (
277277 'google.cloud.bigquery.magics._run_query' , autospec = True )
@@ -281,11 +281,42 @@ def test_bigquery_magic_with_formatting_params():
281281 with run_query_patch as run_query_mock :
282282 run_query_mock .return_value = query_job_mock
283283
284- ip .run_cell_magic ('bigquery' , 'df --params {"num":17}' , sql )
284+ ip .run_cell_magic ('bigquery' , 'params_string_df --params {"num":17}' , sql )
285285 run_query_mock .assert_called_once_with (mock .ANY , sql .format (num = 17 ), mock .ANY )
286286
287- assert 'df ' in ip .user_ns # verify that variable exists
288- df = ip .user_ns ['df ' ]
287+ assert 'params_string_df ' in ip .user_ns # verify that variable exists
288+ df = ip .user_ns ['params_string_df ' ]
289289 assert len (df ) == len (result ) # verify row count
290290 assert list (df ) == list (result ) # verify column names
291291
292+
293+ @pytest .mark .usefixtures ('ipython_interactive' )
294+ @pytest .mark .skipif (pandas is None , reason = 'Requires `pandas`' )
295+ def test_bigquery_magic_with_formatting_params_with_expanded_dict ():
296+ ip = IPython .get_ipython ()
297+ ip .extension_manager .load_extension ('google.cloud.bigquery' )
298+ magics .context .credentials = mock .create_autospec (
299+ google .auth .credentials .Credentials , instance = True )
300+
301+ sql = 'SELECT @num AS num'
302+ result = pandas .DataFrame ([17 ], columns = ['num' ])
303+ assert 'params_dict_df' not in ip .user_ns
304+
305+ run_query_patch = mock .patch (
306+ 'google.cloud.bigquery.magics._run_query' , autospec = True )
307+ query_job_mock = mock .create_autospec (
308+ google .cloud .bigquery .job .QueryJob , instance = True )
309+ query_job_mock .to_dataframe .return_value = result
310+ with run_query_patch as run_query_mock :
311+ run_query_mock .return_value = query_job_mock
312+
313+ params = {"num" : 17 }
314+ # Insert dictionary into user namespace so that it can be expanded
315+ ip .user_ns ['params' ] = params
316+ ip .run_cell_magic ('bigquery' , 'params_dict_df --params $params' , sql )
317+ run_query_mock .assert_called_once_with (mock .ANY , sql .format (num = 17 ), mock .ANY )
318+
319+ assert 'params_dict_df' in ip .user_ns # verify that variable exists
320+ df = ip .user_ns ['params_dict_df' ]
321+ assert len (df ) == len (result ) # verify row count
322+ assert list (df ) == list (result ) # verify column names
0 commit comments