Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def setup_request_id(
setattr(request, field_name, str(uuid.uuid4()))
except (AttributeError, ValueError):
# Proto-plus messages or other objects
if not getattr(request, field_name, None):
if getattr(request, field_name, None) is None:
setattr(request, field_name, str(uuid.uuid4()))
else:
if not getattr(request, field_name, None):
Expand Down
12 changes: 5 additions & 7 deletions packages/google-api-core/tests/unit/gapic/test_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)

def __contains__(self, key):
return hasattr(self, key)


class MockProtoRequest:
def __init__(self, **kwargs):
Expand All @@ -44,9 +41,6 @@ class MockValueErrorRequest:
def HasField(self, key):
raise ValueError("Mismatched field")

def __contains__(self, key):
return hasattr(self, key)


# --- Parameterized Test ---

Expand All @@ -59,6 +53,7 @@ def __contains__(self, key):
# MockRequest cases
(MockRequest(), True, "uuid"),
(MockRequest(request_id="already_set"), True, "already_set"),
(MockRequest(request_id=""), True, ""),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

While adding a test case for MockRequest with an explicit empty string when is_proto3_optional=True is great, we should also add a corresponding test case for MockProtoRequest to ensure standard protobuf messages (which implement HasField) are also covered and behave correctly under this scenario. Please consider adding (MockProtoRequest(request_id=""), True, "") and the corresponding ID "proto3_optional_explicit_empty_proto" to the ids list.

(MockRequest(request_id=""), False, "uuid"),
(MockRequest(request_id="already_set"), False, "already_set"),
# MockProtoRequest cases
Expand All @@ -70,6 +65,7 @@ def __contains__(self, key):
({}, True, "uuid"),
({"request_id": None}, True, "uuid"),
({"request_id": "already_set"}, True, "already_set"),
({"request_id": ""}, True, ""),
({"request_id": ""}, False, "uuid"),
({"request_id": None}, False, "uuid"),
({"request_id": "already_set"}, False, "already_set"),
Expand All @@ -79,6 +75,7 @@ def __contains__(self, key):
ids=[
"proto3_optional_not_in_request",
"proto3_optional_already_in_request",
"proto3_optional_explicit_empty",
"non_proto3_optional_empty",
"non_proto3_optional_already_set",
"proto3_optional_not_in_request_proto",
Expand All @@ -87,6 +84,7 @@ def __contains__(self, key):
"dict_proto3_optional_not_in_request",
"dict_proto3_optional_value_none",
"dict_proto3_optional_already_in_request",
"dict_proto3_optional_explicit_empty",
"dict_non_proto3_optional_empty",
"dict_non_proto3_optional_value_none",
"dict_non_proto3_optional_already_set",
Expand All @@ -110,6 +108,6 @@ def test_setup_request_id(request_obj, is_proto3_optional, expected):
)

if expected == "uuid":
assert re.match(UUID_REGEX, value)
assert re.fullmatch(UUID_REGEX, value)
else:
assert value == expected
Loading