@@ -498,6 +498,30 @@ def test_{{ method.name|snake_case }}_from_dict():
498498 test_{{ method.name|snake_case }}(request_type=dict)
499499
500500
501+ {% if not method .client_streaming -%}
502+ def test_{{ method.name|snake_case }}_empty_call():
503+ # This test is a coverage failsafe to make sure that totally empty calls,
504+ # i.e. request == None and no flattened fields passed, work.
505+ client = {{ service.client_name }}(
506+ credentials=credentials.AnonymousCredentials(),
507+ transport='grpc',
508+ )
509+
510+ # Mock the actual call within the gRPC stub, and fake the request.
511+ with mock.patch.object(
512+ type(client.transport.{{ method.name|snake_case }}),
513+ '__call__') as call:
514+ client.{{ method.name|snake_case }}()
515+ call.assert_called()
516+ _, args, _ = call.mock_calls[0]
517+ {% if method .client_streaming %}
518+ assert next(args[0]) == request
519+ {% else %}
520+ assert args[0] == {{ method.input.ident }}()
521+ {% endif %}
522+ {% endif -%}
523+
524+
501525@pytest.mark.asyncio
502526async def test_{{ method.name|snake_case }}_async(transport: str = 'grpc_asyncio', request_type={{ method.input.ident }}):
503527 client = {{ service.async_client_name }}(
@@ -1303,7 +1327,7 @@ def test_{{ method.name|snake_case }}_pager():
13031327 for result in results:
13041328 assert isinstance(result, tuple)
13051329 assert tuple(type(t) for t in result) == (str, {{ method.paged_result_field.type.fields.get('value').ident }})
1306-
1330+
13071331 assert pager.get('a') is None
13081332 assert isinstance(pager.get('h'), {{ method.paged_result_field.type.fields.get('value').ident }})
13091333 {% else %}
@@ -1315,7 +1339,7 @@ def test_{{ method.name|snake_case }}_pager():
13151339 for page_, token in zip(pages, ['abc','def','ghi', '']):
13161340 assert page_.raw_page.next_page_token == token
13171341
1318-
1342+
13191343{% endif %} {# paged methods #}
13201344{% endfor -%} {#- method in methods for rest #}
13211345def test_credentials_transport_error():
@@ -1771,7 +1795,7 @@ def test_{{ service.name|snake_case }}_grpc_transport_client_cert_source_for_mtl
17711795 ("grpc.max_receive_message_length", -1),
17721796 ],
17731797 )
1774-
1798+
17751799 # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
17761800 # is used.
17771801 with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
0 commit comments