1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct NestedToJsonSuccessTestParam {
19 std::string expected_json = {};
20 WriteOptions options = {};
23void PrintTo(
const NestedToJsonSuccessTestParam& param, std::ostream* os) {
25 "{{ input = {{.field1={}}} }}",
26 param.input.field1 ? std::to_string(param.input.field1.value()) :
"nullopt"
30class NestedToJsonSuccessTest :
public ::testing::TestWithParam<NestedToJsonSuccessTestParam> {};
32INSTANTIATE_TEST_SUITE_P(
34 NestedToJsonSuccessTest,
36 NestedToJsonSuccessTestParam{NestedMessageData{std::nullopt}, R"({})"},
37 NestedToJsonSuccessTestParam{
38 NestedMessageData{std::nullopt},
40 WriteOptions{.always_print_fields_with_no_presence =
true}
42 NestedToJsonSuccessTestParam{NestedMessageData{0}, R"({"parent":{}})"},
43 NestedToJsonSuccessTestParam{
45 R"({"parent":{"field1":0}})",
46 WriteOptions{.always_print_fields_with_no_presence =
true}
48 NestedToJsonSuccessTestParam{NestedMessageData{123}, R"({"parent":{"field1":123}})"}
52TEST_P(NestedToJsonSuccessTest, Test) {
53 const auto& param = GetParam();
55 auto input = PrepareTestData(param.input);
56 formats::json::Value json, expected_json, sample_json;
58 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
59 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
60 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
62 EXPECT_EQ(json, expected_json);
63 EXPECT_EQ(expected_json, sample_json);