userver: /data/code/userver/libraries/protobuf/tests/json/string_from_json_test.cpp Source File
Loading...
Searching...
No Matches
string_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 StringFromJsonSuccessTestParam {
18 std::string input = {};
19 StringMessageData expected_message = {};
20 ReadOptions options = {};
21};
22
23struct StringFromJsonFailureTestParam {
24 std::string input = {};
25 ReadErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ReadOptions options = {};
28};
29
30void PrintTo(const StringFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format("{{ input = '{}' }}", param.input);
32}
33
34void PrintTo(const StringFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format("{{ input = '{}' }}", param.input);
36}
37
38class StringFromJsonSuccessTest : public ::testing::TestWithParam<StringFromJsonSuccessTestParam> {};
39class StringFromJsonFailureTest : public ::testing::TestWithParam<StringFromJsonFailureTestParam> {};
40
41INSTANTIATE_TEST_SUITE_P(
42 ,
43 StringFromJsonSuccessTest,
44 ::testing::Values(
45 StringFromJsonSuccessTestParam{R"({})", StringMessageData{""}},
46 StringFromJsonSuccessTestParam{R"({"field1":null})", StringMessageData{""}},
47 StringFromJsonSuccessTestParam{R"({"field1":""})", StringMessageData{""}},
48 StringFromJsonSuccessTestParam{R"({"field1":"hello world"})", StringMessageData{"hello world"}}
49 )
50);
51
52INSTANTIATE_TEST_SUITE_P(
53 ,
54 StringFromJsonFailureTest,
55 ::testing::Values(
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"}
60 )
61);
62
63TEST_P(StringFromJsonSuccessTest, Test) {
64 const auto& param = GetParam();
65
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);
69
70 message.set_field1("dump");
71
72 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::StringMessage>(input, param.options)));
73 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
74
75 CheckMessageEqual(message, sample_message);
76 CheckMessageEqual(message, expected_message);
77}
78
79TEST_P(StringFromJsonFailureTest, Test) {
80 const auto& param = GetParam();
81
82 proto_json::messages::StringMessage sample_message;
83 formats::json::Value input = PrepareJsonTestData(param.input);
84
85 EXPECT_READ_ERROR(
86 (void)JsonToMessage<proto_json::messages::StringMessage>(input, param.options),
87 param.expected_errc,
88 param.expected_path
89 );
90 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);
91}
92
93} // namespace protobuf::json::tests
94
95USERVER_NAMESPACE_END