userver: /data/code/userver/libraries/protobuf/tests/json/oneof_to_json_test.cpp Source File
Loading...
Searching...
No Matches
oneof_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 OneofToJsonSuccessTestParam {
18 OneofMessageData input = {};
19 std::string expected_json = {};
20 WriteOptions options = {};
21};
22
23void PrintTo(const OneofToJsonSuccessTestParam& param, std::ostream* os) {
24 *os << fmt::format(
25 "{{ input = {{.field1={}, .field2={}}} }}",
26 (param.input.field1 ? std::to_string(param.input.field1.value()) : "nullopt"),
27 param.input.field2.value_or("nullopt")
28 );
29}
30
31class OneofToJsonSuccessTest : public ::testing::TestWithParam<OneofToJsonSuccessTestParam> {};
32
33INSTANTIATE_TEST_SUITE_P(
34 ,
35 OneofToJsonSuccessTest,
36 ::testing::Values(
37 OneofToJsonSuccessTestParam{OneofMessageData{}, R"({})"},
38 OneofToJsonSuccessTestParam{OneofMessageData{.field1 = 10}, R"({"field1":10})"},
39 OneofToJsonSuccessTestParam{OneofMessageData{.field2 = "hello"}, R"({"field2":"hello"})"}
40 )
41);
42
43TEST_P(OneofToJsonSuccessTest, Test) {
44 const auto& param = GetParam();
45
46 auto input = PrepareTestData(param.input);
47 formats::json::Value json, expected_json, sample_json;
48
49 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
50 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
51 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
52
53 EXPECT_EQ(json, expected_json);
54 EXPECT_EQ(expected_json, sample_json);
55}
56
57} // namespace protobuf::json::tests
58
59USERVER_NAMESPACE_END