1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct NestedFromJsonSuccessTestParam {
18 std::string input = {};
20 ReadOptions options = {};
23struct NestedFromJsonFailureTestParam {
24 std::string input = {};
25 ReadErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ReadOptions options = {};
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,
57 NestedFromJsonFailureTestParam{R"(null)", ReadErrorCode::kInvalidType,
"/"},
58 NestedFromJsonFailureTestParam{R"([])", ReadErrorCode::kInvalidType,
"/"},
59 NestedFromJsonFailureTestParam{R"(true)", ReadErrorCode::kInvalidType,
"/"},
60 NestedFromJsonFailureTestParam{R"(10)", ReadErrorCode::kInvalidType,
"/"},
61 NestedFromJsonFailureTestParam{R"("test")", ReadErrorCode::kInvalidType,
"/"},
62 NestedFromJsonFailureTestParam{R"({"parent":[]})", ReadErrorCode::kInvalidType,
"parent"},
63 NestedFromJsonFailureTestParam{R"({"parent":true})", ReadErrorCode::kInvalidType,
"parent"},
64 NestedFromJsonFailureTestParam{R"({"parent":10})", ReadErrorCode::kInvalidType,
"parent"},
65 NestedFromJsonFailureTestParam{R"({"parent":"test"})", ReadErrorCode::kInvalidType,
"parent"},
66 NestedFromJsonFailureTestParam{
67 R"({"parent":{"field1":2147483648}})",
68 ReadErrorCode::kInvalidValue,
71 NestedFromJsonFailureTestParam{
72 R"({"parent":{"field1":-2147483649}})",
73 ReadErrorCode::kInvalidValue,
79TEST_P(NestedFromJsonSuccessTest, Test) {
80 const auto& param = GetParam();
82 proto_json::messages::NestedMessage message, expected_message, sample_message;
83 formats::json::Value input = PrepareJsonTestData(param.input);
84 expected_message = PrepareTestData(param.expected_message);
86 message.mutable_parent()->set_field1(100001);
88 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::NestedMessage>(input, param.options)));
89 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
91 CheckMessageEqual(message, sample_message);
92 CheckMessageEqual(message, expected_message);
95TEST_P(NestedFromJsonFailureTest, Test) {
96 const auto& param = GetParam();
98 proto_json::messages::NestedMessage sample_message;
99 formats::json::Value input = PrepareJsonTestData(param.input);
102 (
void)JsonToMessage<proto_json::messages::NestedMessage>(input, param.options),
106 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);