Skip to content

Commit 94f9a8d

Browse files
authored
fix: Unit test for nested fields in url path (#1387)
* fix: Unit test for nested fields in url path This fixes googleapis/gapic-generator-python#1386
1 parent 96b49fd commit 94f9a8d

4 files changed

Lines changed: 44 additions & 4 deletions

File tree

packages/gapic-generator/gapic/ads-templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ def test_{{ method.name|snake_case }}_rest(request_type):
10011001
{% for field in method.body_fields.values() %}
10021002
{% if not field.oneof or field.proto3_optional %}
10031003
{# ignore oneof fields that might conflict with sample_request #}
1004-
request_init["{{ field.name }}"] = {{ field.mock_value_original_type }}
1004+
request_init["{{ field.name }}"] = {{ field.merged_mock_value(method.http_options[0].sample_request(method).get(field.name)) }}
10051005
{% endif %}
10061006
{% endfor %}
10071007
request = request_type(request_init)
@@ -1293,7 +1293,7 @@ def test_{{ method_name }}_rest_bad_request(transport: str = 'rest', request_typ
12931293
{% for field in method.body_fields.values() %}
12941294
{% if not field.oneof or field.proto3_optional %}
12951295
{# ignore oneof fields that might conflict with sample_request #}
1296-
request_init["{{ field.name }}"] = {{ field.mock_value_original_type }}
1296+
request_init["{{ field.name }}"] = {{ field.merged_mock_value(method.http_options[0].sample_request(method).get(field.name)) }}
12971297
{% endif %}
12981298
{% endfor %}
12991299
request = request_type(request_init)

packages/gapic-generator/gapic/schema/wrappers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"""
2929

3030
import collections
31+
import copy
3132
import dataclasses
3233
import json
3334
import keyword
@@ -151,6 +152,13 @@ def recursive_mock_original_type(field):
151152

152153
return recursive_mock_original_type(self)
153154

155+
def merged_mock_value(self, other_mock: Dict[Any, Any]):
156+
mock = self.mock_value_original_type
157+
if isinstance(mock, dict) and isinstance(other_mock, dict):
158+
mock = copy.deepcopy(mock)
159+
mock.update(other_mock)
160+
return mock
161+
154162
@utils.cached_property
155163
def mock_value(self) -> str:
156164
visited_fields: Set["Field"] = set()

packages/gapic-generator/gapic/templates/tests/unit/gapic/%name_%version/%sub/test_macros.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -852,7 +852,7 @@ def test_{{ method_name }}_rest(request_type):
852852
{% for field in method.body_fields.values() %}
853853
{% if not field.oneof or field.proto3_optional %}
854854
{# ignore oneof fields that might conflict with sample_request #}
855-
request_init["{{ field.name }}"] = {{ field.mock_value_original_type }}
855+
request_init["{{ field.name }}"] = {{ field.merged_mock_value(method.http_options[0].sample_request(method).get(field.name)) }}
856856
{% endif %}
857857
{% endfor %}
858858
request = request_type(request_init)
@@ -1158,7 +1158,7 @@ def test_{{ method_name }}_rest_bad_request(transport: str = 'rest', request_typ
11581158
{% for field in method.body_fields.values() %}
11591159
{% if not field.oneof or field.proto3_optional %}
11601160
{# ignore oneof fields that might conflict with sample_request #}
1161-
request_init["{{ field.name }}"] = {{ field.mock_value_original_type }}
1161+
request_init["{{ field.name }}"] = {{ field.merged_mock_value(method.http_options[0].sample_request(method).get(field.name)) }}
11621162
{% endif %}
11631163
{% endfor %}
11641164
request = request_type(request_init)

packages/gapic-generator/tests/unit/schema/wrappers/test_field.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,38 @@ def test_mock_value_original_type_message():
404404
assert entry_field.mock_value_original_type == {}
405405

406406

407+
def test_merged_mock_value_message():
408+
subfields = collections.OrderedDict((
409+
('foo', make_field(name='foo', type='TYPE_INT32')),
410+
('bar', make_field(name='bar', type='TYPE_STRING'))
411+
))
412+
413+
message = wrappers.MessageType(
414+
fields=subfields,
415+
message_pb=descriptor_pb2.DescriptorProto(name="Message", field=[
416+
i.field_pb for i in subfields.values()
417+
]),
418+
meta=metadata.Metadata(address=metadata.Address(
419+
module="bogus",
420+
name="Message",
421+
)),
422+
nested_enums={},
423+
nested_messages={},
424+
)
425+
426+
field = make_field(
427+
type="TYPE_MESSAGE",
428+
type_name="bogus.Message",
429+
message=message,
430+
)
431+
432+
mock = field.merged_mock_value({"foo": 777, "another": "another_value"})
433+
assert mock == {"foo": 777, "bar": "bar_value", "another": "another_value"}
434+
435+
mock = field.merged_mock_value(None)
436+
assert mock == {"bar": "bar_value", "foo": 324}
437+
438+
407439
def test_mock_value_original_type_enum():
408440
mollusc_field = make_field(
409441
name="class",

0 commit comments

Comments
 (0)