1#include <gtest/gtest.h>
5#include <userver/protobuf/json/convert.hpp>
6#include <userver/utest/assert_macros.hpp>
10USERVER_NAMESPACE_BEGIN
14struct MapToJsonSuccessTestParam {
16 std::string expected_json = {};
17 WriteOptions options = {};
20struct MapToJsonFailureTestParam {
22 WriteErrorCode expected_errc = {};
23 std::string expected_path = {};
24 WriteOptions options = {};
27class MapToJsonSuccessTest :
public ::testing::TestWithParam<MapToJsonSuccessTestParam> {};
28class MapToJsonFailureTest :
public ::testing::TestWithParam<MapToJsonFailureTestParam> {};
30INSTANTIATE_TEST_SUITE_P(
34 MapToJsonSuccessTestParam{MapMessageData{}, R"({})"},
35 MapToJsonSuccessTestParam{
37 R"({"field1":{},"field2":{},"field3":{},"field4":{},"field5":{},"field6":{},"field7":{}})",
38 {.always_print_fields_with_no_presence =
true}
40 MapToJsonSuccessTestParam{
42 .field1 = {{1, 2}, {3, 4}, {5, 6}},
43 .field2 = {{10, 1.5}, {20, 1.5}},
44 .field3 = {{100,
true}, {200,
false}},
45 .field4 = {{1000,
"hello"}, {2000,
"world"}},
47 {{
true, proto_json::messages::MapMessage::TEST_ENUM_VALUE1},
48 {
false, proto_json::messages::MapMessage::TEST_ENUM_VALUE0}},
49 .field6 = {{
"aaa", {
true}}, {
"bbb", {
false}}},
50 .field7 = {{
"ccc", {.seconds = 10, .nanos = 999}}}
53 "field1":{"1":2,"3":4,"5":6},
54 "field2":{"10":1.5,"20":1.5},
55 "field3":{"100":true,"200":false},
56 "field4":{"1000":"hello","2000":"world"},
57 "field5":{"true":"TEST_ENUM_VALUE1","false":"TEST_ENUM_VALUE0"},
58 "field6":{"aaa":{"field1":true},"bbb":{}},
59 "field7":{"ccc":"10.000000999s"}
60 })"
62 MapToJsonSuccessTestParam{
65 {{
true, proto_json::messages::MapMessage::TEST_ENUM_VALUE0},
66 {
false, proto_json::messages::MapMessage::TEST_ENUM_VALUE1}}
68 R"({"field5":{"true":0,"false":1}})",
69 {.always_print_enums_as_ints =
true}
74INSTANTIATE_TEST_SUITE_P(
77 ::testing::Values(MapToJsonFailureTestParam{
78 MapMessageData{.field7 = {{
"aaa", {.seconds = 1, .nanos = -1}}}},
79 WriteErrorCode::kInvalidValue,
84TEST_P(MapToJsonSuccessTest, Test) {
85 const auto& param = GetParam();
87 auto input = PrepareTestData(param.input);
88 formats::json::Value json, expected_json, sample_json;
90 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
91 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
92 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
94 EXPECT_EQ(json, expected_json);
95 EXPECT_EQ(expected_json, sample_json);
98TEST_P(MapToJsonFailureTest, Test) {
99 const auto& param = GetParam();
100 auto input = PrepareTestData(param.input);
102 EXPECT_WRITE_ERROR((
void)MessageToJson(input, param.options), param.expected_errc, param.expected_path);
103 UEXPECT_THROW((
void)CreateSampleJson(input, param.options), SampleError);