2323 from mock import AsyncMock
2424import urllib
2525
26+ import freezegun
2627import pytest # type: ignore
2728
2829from google .auth import _helpers
@@ -212,26 +213,26 @@ def verify_request_params(request, params):
212213
213214
214215@pytest .mark .asyncio
215- @mock .patch ("google.auth._helpers.utcnow" , return_value = datetime .datetime .min )
216- async def test_jwt_grant (utcnow ):
216+ async def test_jwt_grant ():
217217 request = make_request (
218218 {"access_token" : "token" , "expires_in" : 500 , "extra" : "data" }
219219 )
220220
221- token , expiry , extra_data = await _client .jwt_grant (
222- request , "http://example.com" , "assertion_value"
223- )
221+ with freezegun .freeze_time ("2020-01-01 00:00:00" ):
222+ token , expiry , extra_data = await _client .jwt_grant (
223+ request , "http://example.com" , "assertion_value"
224+ )
224225
225- # Check request call
226- verify_request_params (
227- request ,
228- {"grant_type" : sync_client ._JWT_GRANT_TYPE , "assertion" : "assertion_value" },
229- )
226+ # Check request call
227+ verify_request_params (
228+ request ,
229+ {"grant_type" : sync_client ._JWT_GRANT_TYPE , "assertion" : "assertion_value" },
230+ )
230231
231- # Check result
232- assert token == "token"
233- assert expiry == utcnow ( ) + datetime .timedelta (seconds = 500 )
234- assert extra_data ["extra" ] == "data"
232+ # Check result
233+ assert token == "token"
234+ assert expiry == datetime . datetime ( 2020 , 1 , 1 ) + datetime .timedelta (seconds = 500 )
235+ assert extra_data ["extra" ] == "data"
235236
236237
237238@pytest .mark .asyncio
@@ -292,8 +293,7 @@ async def test_id_token_jwt_grant_no_access_token():
292293
293294
294295@pytest .mark .asyncio
295- @mock .patch ("google.auth._helpers.utcnow" , return_value = datetime .datetime .min )
296- async def test_refresh_grant (unused_utcnow ):
296+ async def test_refresh_grant ():
297297 request = make_request (
298298 {
299299 "access_token" : "token" ,
@@ -303,37 +303,37 @@ async def test_refresh_grant(unused_utcnow):
303303 }
304304 )
305305
306- token , refresh_token , expiry , extra_data = await _client .refresh_grant (
307- request ,
308- "http://example.com" ,
309- "refresh_token" ,
310- "client_id" ,
311- "client_secret" ,
312- rapt_token = "rapt_token" ,
313- )
306+ with freezegun .freeze_time ("2020-01-01 00:00:00" ):
307+ token , refresh_token , expiry , extra_data = await _client .refresh_grant (
308+ request ,
309+ "http://example.com" ,
310+ "refresh_token" ,
311+ "client_id" ,
312+ "client_secret" ,
313+ rapt_token = "rapt_token" ,
314+ )
314315
315- # Check request call
316- verify_request_params (
317- request ,
318- {
319- "grant_type" : sync_client ._REFRESH_GRANT_TYPE ,
320- "refresh_token" : "refresh_token" ,
321- "client_id" : "client_id" ,
322- "client_secret" : "client_secret" ,
323- "rapt" : "rapt_token" ,
324- },
325- )
316+ # Check request call
317+ verify_request_params (
318+ request ,
319+ {
320+ "grant_type" : sync_client ._REFRESH_GRANT_TYPE ,
321+ "refresh_token" : "refresh_token" ,
322+ "client_id" : "client_id" ,
323+ "client_secret" : "client_secret" ,
324+ "rapt" : "rapt_token" ,
325+ },
326+ )
326327
327- # Check result
328- assert token == "token"
329- assert refresh_token == "new_refresh_token"
330- assert expiry == datetime .datetime . min + datetime .timedelta (seconds = 500 )
331- assert extra_data ["extra" ] == "data"
328+ # Check result
329+ assert token == "token"
330+ assert refresh_token == "new_refresh_token"
331+ assert expiry == datetime .datetime ( 2020 , 1 , 1 ) + datetime .timedelta (seconds = 500 )
332+ assert extra_data ["extra" ] == "data"
332333
333334
334335@pytest .mark .asyncio
335- @mock .patch ("google.auth._helpers.utcnow" , return_value = datetime .datetime .min )
336- async def test_refresh_grant_with_scopes (unused_utcnow ):
336+ async def test_refresh_grant_with_scopes ():
337337 request = make_request (
338338 {
339339 "access_token" : "token" ,
@@ -344,32 +344,33 @@ async def test_refresh_grant_with_scopes(unused_utcnow):
344344 }
345345 )
346346
347- token , refresh_token , expiry , extra_data = await _client .refresh_grant (
348- request ,
349- "http://example.com" ,
350- "refresh_token" ,
351- "client_id" ,
352- "client_secret" ,
353- test_client .SCOPES_AS_LIST ,
354- )
347+ with freezegun .freeze_time ("2020-01-01 00:00:00" ):
348+ token , refresh_token , expiry , extra_data = await _client .refresh_grant (
349+ request ,
350+ "http://example.com" ,
351+ "refresh_token" ,
352+ "client_id" ,
353+ "client_secret" ,
354+ test_client .SCOPES_AS_LIST ,
355+ )
355356
356- # Check request call.
357- verify_request_params (
358- request ,
359- {
360- "grant_type" : sync_client ._REFRESH_GRANT_TYPE ,
361- "refresh_token" : "refresh_token" ,
362- "client_id" : "client_id" ,
363- "client_secret" : "client_secret" ,
364- "scope" : test_client .SCOPES_AS_STRING ,
365- },
366- )
357+ # Check request call.
358+ verify_request_params (
359+ request ,
360+ {
361+ "grant_type" : sync_client ._REFRESH_GRANT_TYPE ,
362+ "refresh_token" : "refresh_token" ,
363+ "client_id" : "client_id" ,
364+ "client_secret" : "client_secret" ,
365+ "scope" : test_client .SCOPES_AS_STRING ,
366+ },
367+ )
367368
368- # Check result.
369- assert token == "token"
370- assert refresh_token == "new_refresh_token"
371- assert expiry == datetime .datetime . min + datetime .timedelta (seconds = 500 )
372- assert extra_data ["extra" ] == "data"
369+ # Check result.
370+ assert token == "token"
371+ assert refresh_token == "new_refresh_token"
372+ assert expiry == datetime .datetime ( 2020 , 1 , 1 ) + datetime .timedelta (seconds = 500 )
373+ assert extra_data ["extra" ] == "data"
373374
374375
375376@pytest .mark .asyncio
@@ -390,11 +391,19 @@ async def test_refresh_grant_no_access_token():
390391 assert not excinfo .value .retryable
391392
392393
394+ def create_async_mock ():
395+ m = mock .Mock ()
396+ async def async_response (* args , ** kwargs ):
397+ return mock .Mock ()
398+ m .side_effect = async_response
399+ return m
400+
401+
393402@pytest .mark .asyncio
394403@mock .patch ("google.oauth2._client._parse_expiry" , return_value = None )
395404@mock .patch .object (_client , "_token_endpoint_request" , autospec = True )
396405async def test_jwt_grant_retry_default (mock_token_endpoint_request , mock_expiry ):
397- _ = await _client .jwt_grant (mock . Mock (), mock .Mock (), mock .Mock ())
406+ _ = await _client .jwt_grant (create_async_mock (), mock .Mock (), mock .Mock ())
398407 mock_token_endpoint_request .assert_called_with (
399408 mock .ANY , mock .ANY , mock .ANY , can_retry = True
400409 )
@@ -408,7 +417,7 @@ async def test_jwt_grant_retry_with_retry(
408417 mock_token_endpoint_request , mock_expiry , can_retry
409418):
410419 _ = await _client .jwt_grant (
411- AsyncMock (), mock .Mock (), mock .Mock (), can_retry = can_retry
420+ create_async_mock (), mock .Mock (), mock .Mock (), can_retry = can_retry
412421 )
413422 mock_token_endpoint_request .assert_called_with (
414423 mock .ANY , mock .ANY , mock .ANY , can_retry = can_retry
@@ -421,7 +430,7 @@ async def test_jwt_grant_retry_with_retry(
421430async def test_id_token_jwt_grant_retry_default (
422431 mock_token_endpoint_request , mock_jwt_decode
423432):
424- _ = await _client .id_token_jwt_grant (mock . Mock (), mock .Mock (), mock .Mock ())
433+ _ = await _client .id_token_jwt_grant (create_async_mock (), mock .Mock (), mock .Mock ())
425434 mock_token_endpoint_request .assert_called_with (
426435 mock .ANY , mock .ANY , mock .ANY , can_retry = True
427436 )
@@ -435,7 +444,7 @@ async def test_id_token_jwt_grant_retry_with_retry(
435444 mock_token_endpoint_request , mock_jwt_decode , can_retry
436445):
437446 _ = await _client .id_token_jwt_grant (
438- AsyncMock (), AsyncMock (), AsyncMock (), can_retry = can_retry
447+ create_async_mock (), AsyncMock (), AsyncMock (), can_retry = can_retry
439448 )
440449 mock_token_endpoint_request .assert_called_with (
441450 mock .ANY , mock .ANY , mock .ANY , can_retry = can_retry
0 commit comments