Add test for generating embedded wellknown types in outputs.

This commit is contained in:
boukeversteegh 2020-05-24 14:48:39 +02:00
parent 35548cb43e
commit c50d9e2fdc
5 changed files with 71 additions and 4 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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]

View File

@ -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

View File

@ -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"