1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
15namespace protobuf::json::tests {
17struct NestedFromJsonSuccessTestParam {
18 std::string input = {};
23struct NestedFromJsonFailureTestParam {
24 std::string input = {};
26 std::string expected_path = {};
30void PrintTo(
const NestedFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format(
"{{ input = '{}' }}", param.input);
34void PrintTo(
const NestedFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format(
"{{ input = '{}' }}", param.input);
38class NestedFromJsonSuccessTest :
public ::testing::TestWithParam<NestedFromJsonSuccessTestParam> {};
39class NestedFromJsonFailureTest :
public ::testing::TestWithParam<NestedFromJsonFailureTestParam> {};
41INSTANTIATE_TEST_SUITE_P(
43 NestedFromJsonSuccessTest,
45 NestedFromJsonSuccessTestParam{R"({})", NestedMessageData{std::nullopt}},
46 NestedFromJsonSuccessTestParam{R"({"parent":null})", NestedMessageData{std::nullopt}},
47 NestedFromJsonSuccessTestParam{R"({"parent":{}})", NestedMessageData{0}},
48 NestedFromJsonSuccessTestParam{R"({"parent":{"field1":null}})", NestedMessageData{0}},
49 NestedFromJsonSuccessTestParam{R"({"parent":{"field1":123}})", NestedMessageData{123}}
53INSTANTIATE_TEST_SUITE_P(
55 NestedFromJsonFailureTest,
66 NestedFromJsonFailureTestParam{
67 R"({"parent":{"field1":2147483648}})",
71 NestedFromJsonFailureTestParam{
72 R"({"parent":{"field1":-2147483649}})",
79TEST_P(NestedFromJsonSuccessTest, Test) {
80 const auto& param = GetParam();
82 proto_json::messages::NestedMessage message;
83 proto_json::messages::NestedMessage expected_message;
84 proto_json::messages::NestedMessage sample_message;
85 formats::
json::
Value input = PrepareJsonTestData(param.input);
86 expected_message = PrepareTestData(param.expected_message);
88 message.mutable_parent()->set_field1(100001);
90 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::NestedMessage>(input, param.options)));
91 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
93 CheckMessageEqual(message, sample_message);
94 CheckMessageEqual(message, expected_message);
97TEST_P(NestedFromJsonFailureTest, Test) {
98 const auto& param = GetParam();
100 proto_json::messages::NestedMessage sample_message;
101 formats::
json::
Value input = PrepareJsonTestData(param.input);
104 (
void)JsonToMessage<proto_json::messages::NestedMessage>(input, param.options),