1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct StringFromJsonSuccessTestParam {
18 std::string input = {};
20 ReadOptions options = {};
23struct StringFromJsonFailureTestParam {
24 std::string input = {};
25 ReadErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ReadOptions options = {};
30void PrintTo(
const StringFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format(
"{{ input = '{}' }}", param.input);
34void PrintTo(
const StringFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format(
"{{ input = '{}' }}", param.input);
38class StringFromJsonSuccessTest :
public ::testing::TestWithParam<StringFromJsonSuccessTestParam> {};
39class StringFromJsonFailureTest :
public ::testing::TestWithParam<StringFromJsonFailureTestParam> {};
41INSTANTIATE_TEST_SUITE_P(
43 StringFromJsonSuccessTest,
45 StringFromJsonSuccessTestParam{R"({})", StringMessageData{
""}},
46 StringFromJsonSuccessTestParam{R"({"field1":null})", StringMessageData{
""}},
47 StringFromJsonSuccessTestParam{R"({"field1":""})", StringMessageData{
""}},
48 StringFromJsonSuccessTestParam{R"({"field1":"hello world"})", StringMessageData{
"hello world"}}
52INSTANTIATE_TEST_SUITE_P(
54 StringFromJsonFailureTest,
56 StringFromJsonFailureTestParam{R"({"field1":[]})", ReadErrorCode::kInvalidType,
"field1"},
57 StringFromJsonFailureTestParam{R"({"field1":{}})", ReadErrorCode::kInvalidType,
"field1"},
58 StringFromJsonFailureTestParam{R"({"field1":true})", ReadErrorCode::kInvalidType,
"field1"},
59 StringFromJsonFailureTestParam{R"({"field1":10})", ReadErrorCode::kInvalidType,
"field1"}
63TEST_P(StringFromJsonSuccessTest, Test) {
64 const auto& param = GetParam();
66 proto_json::messages::StringMessage message, expected_message, sample_message;
67 formats::json::Value input = PrepareJsonTestData(param.input);
68 expected_message = PrepareTestData(param.expected_message);
70 message.set_field1(
"dump");
72 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::StringMessage>(input, param.options)));
73 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
75 CheckMessageEqual(message, sample_message);
76 CheckMessageEqual(message, expected_message);
79TEST_P(StringFromJsonFailureTest, Test) {
80 const auto& param = GetParam();
82 proto_json::messages::StringMessage sample_message;
83 formats::json::Value input = PrepareJsonTestData(param.input);
86 (
void)JsonToMessage<proto_json::messages::StringMessage>(input, param.options),
90 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);