Add test for generating embedded wellknown types in outputs.
This commit is contained in:
parent
35548cb43e
commit
c50d9e2fdc
@ -2,7 +2,7 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
// Tests that wrapped return values can be used
|
// Tests that wrapped values can be used directly as return values
|
||||||
|
|
||||||
service Test {
|
service Test {
|
||||||
rpc GetDouble (Input) returns (google.protobuf.DoubleValue);
|
rpc GetDouble (Input) returns (google.protobuf.DoubleValue);
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
// Tests that wrapped values are supported as part of output message
|
||||||
|
service Test {
|
||||||
|
rpc getOutput (Input) returns (Output);
|
||||||
|
}
|
||||||
|
|
||||||
|
message Input {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
message Output {
|
||||||
|
google.protobuf.DoubleValue double_value = 1;
|
||||||
|
google.protobuf.FloatValue float_value = 2;
|
||||||
|
google.protobuf.Int64Value int64_value = 3;
|
||||||
|
google.protobuf.UInt64Value uint64_value = 4;
|
||||||
|
google.protobuf.Int32Value int32_value = 5;
|
||||||
|
google.protobuf.UInt32Value uint32_value = 6;
|
||||||
|
google.protobuf.BoolValue bool_value = 7;
|
||||||
|
google.protobuf.StringValue string_value = 8;
|
||||||
|
google.protobuf.BytesValue bytes_value = 9;
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from betterproto.tests.mocks import MockChannel
|
||||||
|
from betterproto.tests.output_betterproto.googletypes_response_embedded.googletypes_response_embedded import (
|
||||||
|
Output,
|
||||||
|
TestStub,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_service_passes_through_unwrapped_values_embedded_in_response():
|
||||||
|
"""
|
||||||
|
We do not not need to implement value unwrapping for embedded well-known types,
|
||||||
|
as this is already handled by grpclib. This test merely shows that this is the case.
|
||||||
|
"""
|
||||||
|
output = Output(
|
||||||
|
double_value=10.0,
|
||||||
|
float_value=12.0,
|
||||||
|
int64_value=-13,
|
||||||
|
uint64_value=14,
|
||||||
|
int32_value=-15,
|
||||||
|
uint32_value=16,
|
||||||
|
bool_value=True,
|
||||||
|
string_value="string",
|
||||||
|
bytes_value=bytes(0xFF)[0:4],
|
||||||
|
)
|
||||||
|
|
||||||
|
service = TestStub(MockChannel(responses=[output]))
|
||||||
|
response = await service.get_output()
|
||||||
|
|
||||||
|
assert response.double_value == 10.0
|
||||||
|
assert response.float_value == 12.0
|
||||||
|
assert response.int64_value == -13
|
||||||
|
assert response.uint64_value == 14
|
||||||
|
assert response.int32_value == -15
|
||||||
|
assert response.uint32_value == 16
|
||||||
|
assert response.bool_value
|
||||||
|
assert response.string_value == "string"
|
||||||
|
assert response.bytes_value == bytes(0xFF)[0:4]
|
@ -27,7 +27,7 @@ class MockStream:
|
|||||||
self.responses = responses
|
self.responses = responses
|
||||||
|
|
||||||
async def recv_message(self):
|
async def recv_message(self):
|
||||||
return next(self.responses)
|
return self.responses.pop(0)
|
||||||
|
|
||||||
async def send_message(self, *args, **kwargs):
|
async def send_message(self, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
@ -36,4 +36,4 @@ class MockStream:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
async def __aenter__(self):
|
async def __aenter__(self):
|
||||||
return True
|
return self
|
||||||
|
@ -15,7 +15,11 @@ from google.protobuf.descriptor_pool import DescriptorPool
|
|||||||
from google.protobuf.json_format import Parse
|
from google.protobuf.json_format import Parse
|
||||||
|
|
||||||
|
|
||||||
excluded_test_cases = {"googletypes_response", "service"}
|
excluded_test_cases = {
|
||||||
|
"googletypes_response",
|
||||||
|
"googletypes_response_embedded",
|
||||||
|
"service",
|
||||||
|
}
|
||||||
test_case_names = {*get_directories(inputs_path)} - excluded_test_cases
|
test_case_names = {*get_directories(inputs_path)} - excluded_test_cases
|
||||||
|
|
||||||
plugin_output_package = "betterproto.tests.output_betterproto"
|
plugin_output_package = "betterproto.tests.output_betterproto"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user