@@ -471,6 +471,30 @@ def test_{{ method.name|snake_case }}_from_dict():
471471 test_{{ method.name|snake_case }}(request_type=dict)
472472
473473
474+ {% if not method .client_streaming -%}
475+ def test_{{ method.name|snake_case }}_empty_call():
476+ # This test is a coverage failsafe to make sure that totally empty calls,
477+ # i.e. request == None and no flattened fields passed, work.
478+ client = {{ service.client_name }}(
479+ credentials=credentials.AnonymousCredentials(),
480+ transport='grpc',
481+ )
482+
483+ # Mock the actual call within the gRPC stub, and fake the request.
484+ with mock.patch.object(
485+ type(client.transport.{{ method.name|snake_case }}),
486+ '__call__') as call:
487+ client.{{ method.name|snake_case }}()
488+ call.assert_called()
489+ _, args, _ = call.mock_calls[0]
490+ {% if method .client_streaming %}
491+ assert next(args[0]) == request
492+ {% else %}
493+ assert args[0] == {{ method.input.ident }}()
494+ {% endif %}
495+ {% endif -%}
496+
497+
474498@pytest.mark.asyncio
475499async def test_{{ method.name|snake_case }}_async(transport: str = 'grpc_asyncio', request_type={{ method.input.ident }}):
476500 client = {{ service.async_client_name }}(
@@ -1276,7 +1300,7 @@ def test_{{ method.name|snake_case }}_pager():
12761300 for result in results:
12771301 assert isinstance(result, tuple)
12781302 assert tuple(type(t) for t in result) == (str, {{ method.paged_result_field.type.fields.get('value').ident }})
1279-
1303+
12801304 assert pager.get('a') is None
12811305 assert isinstance(pager.get('h'), {{ method.paged_result_field.type.fields.get('value').ident }})
12821306 {% else %}
@@ -1288,7 +1312,7 @@ def test_{{ method.name|snake_case }}_pager():
12881312 for page_, token in zip(pages, ['abc','def','ghi', '']):
12891313 assert page_.raw_page.next_page_token == token
12901314
1291-
1315+
12921316{% endif %} {# paged methods #}
12931317{% endfor -%} {#- method in methods for rest #}
12941318def test_credentials_transport_error():
@@ -1500,7 +1524,7 @@ def test_{{ service.name|snake_case }}_grpc_transport_client_cert_source_for_mtl
15001524 ("grpc.max_receive_message_length", -1),
15011525 ],
15021526 )
1503-
1527+
15041528 # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
15051529 # is used.
15061530 with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
0 commit comments