11{% extends "_base.py.j2" %}
22
33{% block content %}
4- from unittest import mock
4+ import mock
55
66import grpc
77import math
@@ -13,6 +13,7 @@ from google import auth
1313from google.auth import credentials
1414from google.oauth2 import service_account
1515from {{ (api.naming.module_namespace + (api.naming.versioned_module_name,) + service.meta.address.subpackage)|join(".") }}.services.{{ service.name|snake_case }} import {{ service.client_name }}
16+ from {{ (api.naming.module_namespace + (api.naming.versioned_module_name,) + service.meta.address.subpackage)|join(".") }}.services.{{ service.name|snake_case }} import {{ service.async_client_name }}
1617from {{ (api.naming.module_namespace + (api.naming.versioned_module_name,) + service.meta.address.subpackage)|join(".") }}.services.{{ service.name|snake_case }} import transports
1718from google.api_core import client_options
1819from google.api_core import grpc_helpers
@@ -411,6 +412,98 @@ def test_{{ method.name|snake_case }}_pages():
411412 pages = list(client.{{ method.name|snake_case }}(request={}).pages)
412413 for page, token in zip(pages, ['abc','def','ghi', '']):
413414 assert page.raw_page.next_page_token == token
415+
416+ @pytest.mark.asyncio
417+ async def test_{{ method.name|snake_case }}_async_pager():
418+ client = {{ service.async_client_name }}(
419+ credentials=credentials.AnonymousCredentials,
420+ )
421+
422+ # Mock the actual call within the gRPC stub, and fake the request.
423+ with mock.patch.object(
424+ type(client._transport.{{ method.name|snake_case }}),
425+ '__call__', new_callable=mock.AsyncMock) as call:
426+ # Set the response to a series of pages.
427+ call.side_effect = (
428+ {{ method.output.ident }}(
429+ {{ method.paged_result_field.name }}=[
430+ {{ method.paged_result_field.message.ident }}(),
431+ {{ method.paged_result_field.message.ident }}(),
432+ {{ method.paged_result_field.message.ident }}(),
433+ ],
434+ next_page_token='abc',
435+ ),
436+ {{ method.output.ident }}(
437+ {{ method.paged_result_field.name }}=[],
438+ next_page_token='def',
439+ ),
440+ {{ method.output.ident }}(
441+ {{ method.paged_result_field.name }}=[
442+ {{ method.paged_result_field.message.ident }}(),
443+ ],
444+ next_page_token='ghi',
445+ ),
446+ {{ method.output.ident }}(
447+ {{ method.paged_result_field.name }}=[
448+ {{ method.paged_result_field.message.ident }}(),
449+ {{ method.paged_result_field.message.ident }}(),
450+ ],
451+ ),
452+ RuntimeError,
453+ )
454+ async_pager = await client.{{ method.name|snake_case }}(request={},)
455+ assert async_pager.next_page_token == 'abc'
456+ responses = []
457+ async for response in async_pager:
458+ responses.append(response)
459+
460+ assert len(responses) == 6
461+ assert all(isinstance(i, {{ method.paged_result_field.message.ident }})
462+ for i in responses)
463+
464+ @pytest.mark.asyncio
465+ async def test_{{ method.name|snake_case }}_async_pages():
466+ client = {{ service.async_client_name }}(
467+ credentials=credentials.AnonymousCredentials,
468+ )
469+
470+ # Mock the actual call within the gRPC stub, and fake the request.
471+ with mock.patch.object(
472+ type(client._transport.{{ method.name|snake_case }}),
473+ '__call__', new_callable=mock.AsyncMock) as call:
474+ # Set the response to a series of pages.
475+ call.side_effect = (
476+ {{ method.output.ident }}(
477+ {{ method.paged_result_field.name }}=[
478+ {{ method.paged_result_field.message.ident }}(),
479+ {{ method.paged_result_field.message.ident }}(),
480+ {{ method.paged_result_field.message.ident }}(),
481+ ],
482+ next_page_token='abc',
483+ ),
484+ {{ method.output.ident }}(
485+ {{ method.paged_result_field.name }}=[],
486+ next_page_token='def',
487+ ),
488+ {{ method.output.ident }}(
489+ {{ method.paged_result_field.name }}=[
490+ {{ method.paged_result_field.message.ident }}(),
491+ ],
492+ next_page_token='ghi',
493+ ),
494+ {{ method.output.ident }}(
495+ {{ method.paged_result_field.name }}=[
496+ {{ method.paged_result_field.message.ident }}(),
497+ {{ method.paged_result_field.message.ident }}(),
498+ ],
499+ ),
500+ RuntimeError,
501+ )
502+ pages = []
503+ async for page in (await client.{{ method.name|snake_case }}(request={})).pages:
504+ pages.append(page)
505+ for page, token in zip(pages, ['abc','def','ghi', '']):
506+ assert page.raw_page.next_page_token == token
414507{% elif method .lro and "next_page_token" in method .lro .response_type .fields .keys () %}
415508def test_{{ method.name|snake_case }}_raw_page_lro():
416509 response = {{ method.lro.response_type.ident }}()
0 commit comments