1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct NullValueFromJsonSuccessTestParam {
18 std::string input = {};
20 ReadOptions options = {};
23void PrintTo(
const NullValueFromJsonSuccessTestParam& param, std::ostream* os) {
24 *os << fmt::format(
"{{ input = '{}' }}", param.input);
27class NullValueFromJsonSuccessTest :
public ::testing::TestWithParam<NullValueFromJsonSuccessTestParam> {};
29INSTANTIATE_TEST_SUITE_P(
31 NullValueFromJsonSuccessTest,
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}})",
41 {kNullConst, kNullConst},
42 {{100, kNullConst}, {200, kNullConst}}
48TEST_P(NullValueFromJsonSuccessTest, Test) {
49 using Message = proto_json::messages::NullValueMessage;
50 const auto& param = GetParam();
52 Message message, expected_message, sample_message;
53 formats::json::Value input = PrepareJsonTestData(param.input);
54 expected_message = PrepareTestData(param.expected_message);
56 UASSERT_NO_THROW((message = JsonToMessage<Message>(input, param.options)));
57 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
59 CheckMessageEqual(message, sample_message);
60 CheckMessageEqual(message, expected_message);