userver: /data/code/userver/libraries/protobuf/tests/json/nested_to_json_test.cpp Source File
Loading...
Searching...
No Matches
nested_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <ostream>
4#include <string>
5
6#include <fmt/format.h>
7
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
10
11#include "utils.hpp"
12
13USERVER_NAMESPACE_BEGIN
14
15namespace protobuf::json::tests {
16
17struct NestedToJsonSuccessTestParam {
18 NestedMessageData input = {};
19 std::string expected_json = {};
20 WriteOptions options = {};
21};
22
23void PrintTo(const NestedToJsonSuccessTestParam& param, std::ostream* os) {
24 *os << fmt::format(
25 "{{ input = {{.field1={}}} }}",
26 param.input.field1 ? std::to_string(param.input.field1.value()) : "nullopt"
27 );
28}
29
30class NestedToJsonSuccessTest : public ::testing::TestWithParam<NestedToJsonSuccessTestParam> {};
31
32INSTANTIATE_TEST_SUITE_P(
33 ,
34 NestedToJsonSuccessTest,
35 ::testing::Values(
36 NestedToJsonSuccessTestParam{NestedMessageData{std::nullopt}, R"({})"},
37 NestedToJsonSuccessTestParam{
38 NestedMessageData{std::nullopt},
39 R"({})",
40 WriteOptions{.always_print_fields_with_no_presence = true}
41 },
42 NestedToJsonSuccessTestParam{NestedMessageData{0}, R"({"parent":{}})"},
43 NestedToJsonSuccessTestParam{
44 NestedMessageData{0},
45 R"({"parent":{"field1":0}})",
46 WriteOptions{.always_print_fields_with_no_presence = true}
47 },
48 NestedToJsonSuccessTestParam{NestedMessageData{123}, R"({"parent":{"field1":123}})"}
49 )
50);
51
52TEST_P(NestedToJsonSuccessTest, Test) {
53 const auto& param = GetParam();
54
55 auto input = PrepareTestData(param.input);
56 formats::json::Value json, expected_json, sample_json;
57
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)));
61
62 EXPECT_EQ(json, expected_json);
63 EXPECT_EQ(expected_json, sample_json);
64}
65
66} // namespace protobuf::json::tests
67
68USERVER_NAMESPACE_END