userver: /data/code/userver/libraries/protobuf/tests/json/enum_to_json_test.cpp Source File
Loading...
Searching...
No Matches
enum_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
17namespace msgs = proto_json::messages;
18
19struct EnumToJsonSuccessTestParam {
20 EnumMessageData input = {};
21 std::string expected_json = {};
22 WriteOptions options = {};
23};
24
25void PrintTo(const EnumToJsonSuccessTestParam& param, std::ostream* os) {
26 *os << fmt::format("{{ input = {{.field1={}}} }}", static_cast<int>(param.input.field1));
27}
28
29class EnumToJsonSuccessTest : public ::testing::TestWithParam<EnumToJsonSuccessTestParam> {};
30
31INSTANTIATE_TEST_SUITE_P(
32 ,
33 EnumToJsonSuccessTest,
34 ::testing::Values(
35 EnumToJsonSuccessTestParam{EnumMessageData{msgs::EnumMessage::TEST_UNSPECIFIED}, R"({})"},
36 EnumToJsonSuccessTestParam{
37 EnumMessageData{msgs::EnumMessage::TEST_UNSPECIFIED},
38 R"({"field1":"TEST_UNSPECIFIED"})",
39 WriteOptions{.always_print_fields_with_no_presence = true}
40 },
41 EnumToJsonSuccessTestParam{EnumMessageData{msgs::EnumMessage::TEST_VALUE1}, R"({"field1":"TEST_VALUE1"})"},
42 EnumToJsonSuccessTestParam{EnumMessageData{msgs::EnumMessage::TEST_VALUE2}, R"({"field1":"TEST_VALUE2"})"},
43 EnumToJsonSuccessTestParam{
44 EnumMessageData{msgs::EnumMessage::TEST_VALUE2_ALIAS},
45 R"({"field1":"TEST_VALUE2"})"
46 },
47 EnumToJsonSuccessTestParam{EnumMessageData{msgs::EnumMessage::TEST_VALUE3}, R"({"field1":"TEST_VALUE3"})"},
48 EnumToJsonSuccessTestParam{
49 EnumMessageData{msgs::EnumMessage::TEST_UNSPECIFIED},
50 R"({"field1":0})",
51 WriteOptions{.always_print_fields_with_no_presence = true, .always_print_enums_as_ints = true}
52 },
53 EnumToJsonSuccessTestParam{
54 EnumMessageData{msgs::EnumMessage::TEST_VALUE1},
55 R"({"field1":1})",
56 WriteOptions{.always_print_enums_as_ints = true}
57 },
58 EnumToJsonSuccessTestParam{
59 EnumMessageData{msgs::EnumMessage::TEST_VALUE2},
60 R"({"field1":2})",
61 WriteOptions{.always_print_enums_as_ints = true}
62 },
63 EnumToJsonSuccessTestParam{
64 EnumMessageData{msgs::EnumMessage::TEST_VALUE2_ALIAS},
65 R"({"field1":2})",
66 WriteOptions{.always_print_enums_as_ints = true}
67 },
68 EnumToJsonSuccessTestParam{
69 EnumMessageData{msgs::EnumMessage::TEST_VALUE3},
70 R"({"field1":3})",
71 WriteOptions{.always_print_enums_as_ints = true}
72 }
73 )
74);
75
76TEST_P(EnumToJsonSuccessTest, Test) {
77 const auto& param = GetParam();
78
79 auto input = PrepareTestData(param.input);
80 formats::json::Value json, expected_json, sample_json;
81
82 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
83 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
84 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
85
86 EXPECT_EQ(json, expected_json);
87 EXPECT_EQ(expected_json, sample_json);
88}
89
90} // namespace protobuf::json::tests
91
92USERVER_NAMESPACE_END