Skip to content

Commit 62d1611

Browse files
committed
wip
1 parent fbd8387 commit 62d1611

3 files changed

Lines changed: 121 additions & 3 deletions

File tree

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,13 @@ def test__setup_request_id():
424424
def __contains__(self, key):
425425
return hasattr(self, key)
426426

427+
class MockProtoRequest:
428+
def __init__(self, **kwargs):
429+
for k, v in kwargs.items():
430+
setattr(self, k, v)
431+
def HasField(self, key):
432+
return hasattr(self, key)
433+
427434
# Test with proto3 optional field not in request
428435
request = MockRequest()
429436
{{ service.client_name }}._setup_request_id(request, "request_id", True)
@@ -444,6 +451,27 @@ def test__setup_request_id():
444451
{{ service.client_name }}._setup_request_id(request, "request_id", False)
445452
assert request.request_id == "already_set"
446453

454+
# Test with proto3 optional field not in request (MockProtoRequest)
455+
request = MockProtoRequest()
456+
{{ service.client_name }}._setup_request_id(request, "request_id", True)
457+
assert re.match(r"{{ test_macros.get_uuid4_re() }}", request.request_id)
458+
459+
# Test with proto3 optional field already in request (MockProtoRequest)
460+
request = MockProtoRequest(request_id="already_set")
461+
{{ service.client_name }}._setup_request_id(request, "request_id", True)
462+
assert request.request_id == "already_set"
463+
464+
# Test with ValueError
465+
class MockValueErrorRequest:
466+
def HasField(self, key):
467+
raise ValueError("Mismatched field")
468+
def __contains__(self, key):
469+
return hasattr(self, key)
470+
471+
request = MockValueErrorRequest()
472+
{{ service.client_name }}._setup_request_id(request, "request_id", True)
473+
assert re.match(r"{{ test_macros.get_uuid4_re() }}", request.request_id)
474+
447475
# Test with dict and proto3 optional field not in request
448476
request = {}
449477
{{ service.client_name }}._setup_request_id(request, "request_id", True)
@@ -463,8 +491,8 @@ def test__setup_request_id():
463491
request = {"request_id": "already_set"}
464492
{{ service.client_name }}._setup_request_id(request, "request_id", False)
465493
assert request["request_id"] == "already_set"
466-
{% endif %}
467494

495+
{% endif %}
468496
@pytest.mark.parametrize("client_class,transport_name", [
469497
{% if 'grpc' in opts.transport %}
470498
({{ service.client_name }}, "grpc"),

packages/gapic-generator/tests/integration/goldens/storagebatchoperations/google/cloud/storagebatchoperations_v1/services/storage_batch_operations/client.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,9 +480,23 @@ def _setup_request_id(request, field_name: str, is_proto3_optional: bool):
480480
field_name (str): The name of the field to populate.
481481
is_proto3_optional (bool): Whether the field is proto3 optional.
482482
"""
483+
if isinstance(request, dict):
484+
if is_proto3_optional:
485+
if field_name not in request:
486+
request[field_name] = str(uuid.uuid4())
487+
elif not request.get(field_name):
488+
request[field_name] = str(uuid.uuid4())
489+
return
490+
483491
if is_proto3_optional:
484-
if field_name not in request:
485-
setattr(request, field_name, str(uuid.uuid4()))
492+
try:
493+
# Pure protobuf messages
494+
if not request.HasField(field_name):
495+
setattr(request, field_name, str(uuid.uuid4()))
496+
except (AttributeError, ValueError):
497+
# Proto-plus messages or other objects
498+
if field_name not in request:
499+
setattr(request, field_name, str(uuid.uuid4()))
486500
else:
487501
if not getattr(request, field_name):
488502
setattr(request, field_name, str(uuid.uuid4()))

packages/gapic-generator/tests/integration/goldens/storagebatchoperations/tests/unit/gapic/storagebatchoperations_v1/test_storage_batch_operations.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,82 @@ def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code):
334334
client._add_cred_info_for_auth_errors(error)
335335
assert error.details == []
336336

337+
def test__setup_request_id():
338+
class MockRequest:
339+
def __init__(self, **kwargs):
340+
for k, v in kwargs.items():
341+
setattr(self, k, v)
342+
def __contains__(self, key):
343+
return hasattr(self, key)
344+
345+
class MockProtoRequest:
346+
def __init__(self, **kwargs):
347+
for k, v in kwargs.items():
348+
setattr(self, k, v)
349+
def HasField(self, key):
350+
return hasattr(self, key)
351+
352+
# Test with proto3 optional field not in request
353+
request = MockRequest()
354+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
355+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request.request_id)
356+
357+
# Test with proto3 optional field already in request
358+
request = MockRequest(request_id="already_set")
359+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
360+
assert request.request_id == "already_set"
361+
362+
# Test with non-proto3 optional field empty
363+
request = MockRequest(request_id="")
364+
StorageBatchOperationsClient._setup_request_id(request, "request_id", False)
365+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request.request_id)
366+
367+
# Test with non-proto3 optional field already set
368+
request = MockRequest(request_id="already_set")
369+
StorageBatchOperationsClient._setup_request_id(request, "request_id", False)
370+
assert request.request_id == "already_set"
371+
372+
# Test with proto3 optional field not in request (MockProtoRequest)
373+
request = MockProtoRequest()
374+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
375+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request.request_id)
376+
377+
# Test with proto3 optional field already in request (MockProtoRequest)
378+
request = MockProtoRequest(request_id="already_set")
379+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
380+
assert request.request_id == "already_set"
381+
382+
# Test with ValueError
383+
class MockValueErrorRequest:
384+
def HasField(self, key):
385+
raise ValueError("Mismatched field")
386+
def __contains__(self, key):
387+
return hasattr(self, key)
388+
389+
request = MockValueErrorRequest()
390+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
391+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request.request_id)
392+
393+
# Test with dict and proto3 optional field not in request
394+
request = {}
395+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
396+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request["request_id"])
397+
398+
# Test with dict and proto3 optional field already in request
399+
request = {"request_id": "already_set"}
400+
StorageBatchOperationsClient._setup_request_id(request, "request_id", True)
401+
assert request["request_id"] == "already_set"
402+
403+
# Test with dict and non-proto3 optional field empty
404+
request = {"request_id": ""}
405+
StorageBatchOperationsClient._setup_request_id(request, "request_id", False)
406+
assert re.match(r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}", request["request_id"])
407+
408+
# Test with dict and non-proto3 optional field already set
409+
request = {"request_id": "already_set"}
410+
StorageBatchOperationsClient._setup_request_id(request, "request_id", False)
411+
assert request["request_id"] == "already_set"
412+
337413
@pytest.mark.parametrize("client_class,transport_name", [
338414
(StorageBatchOperationsClient, "grpc"),
339415
(StorageBatchOperationsAsyncClient, "grpc_asyncio"),

0 commit comments

Comments
 (0)