userver: /data/code/userver/libraries/protobuf/tests/json/null_value_from_json_test.cpp Source File
Loading...
Searching...
No Matches
null_value_from_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 NullValueFromJsonSuccessTestParam {
18 std::string input = {};
19 NullValueMessageData expected_message = {};
20 ReadOptions options = {};
21};
22
23void PrintTo(const NullValueFromJsonSuccessTestParam& param, std::ostream* os) {
24 *os << fmt::format("{{ input = '{}' }}", param.input);
25}
26
27class NullValueFromJsonSuccessTest : public ::testing::TestWithParam<NullValueFromJsonSuccessTestParam> {};
28
29INSTANTIATE_TEST_SUITE_P(
30 ,
31 NullValueFromJsonSuccessTest,
32 ::testing::Values(
33 NullValueFromJsonSuccessTestParam{R"({})", NullValueMessageData{}},
34 NullValueFromJsonSuccessTestParam{R"({"field1":null})", NullValueMessageData{}},
35 NullValueFromJsonSuccessTestParam{R"({"field2":null})", NullValueMessageData{.field2 = kNullConst}},
36 NullValueFromJsonSuccessTestParam{
37 R"({"field1":null,"field2":null,"field3":[null,null],"field4":{"100":null,"200":null}})",
38 NullValueMessageData{
39 kNullConst,
40 kNullConst,
41 {kNullConst, kNullConst},
42 {{100, kNullConst}, {200, kNullConst}}
43 }
44 }
45 )
46);
47
48TEST_P(NullValueFromJsonSuccessTest, Test) {
49 using Message = proto_json::messages::NullValueMessage;
50 const auto& param = GetParam();
51
52 Message message, expected_message, sample_message;
53 formats::json::Value input = PrepareJsonTestData(param.input);
54 expected_message = PrepareTestData(param.expected_message);
55
56 UASSERT_NO_THROW((message = JsonToMessage<Message>(input, param.options)));
57 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
58
59 CheckMessageEqual(message, sample_message);
60 CheckMessageEqual(message, expected_message);
61}
62
63} // namespace protobuf::json::tests
64
65USERVER_NAMESPACE_END