1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17namespace msgs = proto_json::messages;
19struct EnumToJsonSuccessTestParam {
21 std::string expected_json = {};
22 WriteOptions options = {};
25void PrintTo(
const EnumToJsonSuccessTestParam& param, std::ostream* os) {
26 *os << fmt::format(
"{{ input = {{.field1={}}} }}",
static_cast<
int>(param.input.field1));
29class EnumToJsonSuccessTest :
public ::testing::TestWithParam<EnumToJsonSuccessTestParam> {};
31INSTANTIATE_TEST_SUITE_P(
33 EnumToJsonSuccessTest,
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}
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"})"
47 EnumToJsonSuccessTestParam{EnumMessageData{msgs::EnumMessage::TEST_VALUE3}, R"({"field1":"TEST_VALUE3"})"},
48 EnumToJsonSuccessTestParam{
49 EnumMessageData{msgs::EnumMessage::TEST_UNSPECIFIED},
51 WriteOptions{.always_print_fields_with_no_presence =
true, .always_print_enums_as_ints =
true}
53 EnumToJsonSuccessTestParam{
54 EnumMessageData{msgs::EnumMessage::TEST_VALUE1},
56 WriteOptions{.always_print_enums_as_ints =
true}
58 EnumToJsonSuccessTestParam{
59 EnumMessageData{msgs::EnumMessage::TEST_VALUE2},
61 WriteOptions{.always_print_enums_as_ints =
true}
63 EnumToJsonSuccessTestParam{
64 EnumMessageData{msgs::EnumMessage::TEST_VALUE2_ALIAS},
66 WriteOptions{.always_print_enums_as_ints =
true}
68 EnumToJsonSuccessTestParam{
69 EnumMessageData{msgs::EnumMessage::TEST_VALUE3},
71 WriteOptions{.always_print_enums_as_ints =
true}
76TEST_P(EnumToJsonSuccessTest, Test) {
77 const auto& param = GetParam();
79 auto input = PrepareTestData(param.input);
80 formats::json::Value json, expected_json, sample_json;
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)));
86 EXPECT_EQ(json, expected_json);
87 EXPECT_EQ(expected_json, sample_json);