userver: /data/code/userver/libraries/protobuf/tests/json/nested_from_json_test.cpp Source File
Loading...
Searching...
No Matches
nested_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 NestedFromJsonSuccessTestParam {
18 std::string input = {};
19 NestedMessageData expected_message = {};
20 ReadOptions options = {};
21};
22
23struct NestedFromJsonFailureTestParam {
24 std::string input = {};
25 ReadErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ReadOptions options = {};
28};
29
30void PrintTo(const NestedFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format("{{ input = '{}' }}", param.input);
32}
33
34void PrintTo(const NestedFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format("{{ input = '{}' }}", param.input);
36}
37
38class NestedFromJsonSuccessTest : public ::testing::TestWithParam<NestedFromJsonSuccessTestParam> {};
39class NestedFromJsonFailureTest : public ::testing::TestWithParam<NestedFromJsonFailureTestParam> {};
40
41INSTANTIATE_TEST_SUITE_P(
42 ,
43 NestedFromJsonSuccessTest,
44 ::testing::Values(
45 NestedFromJsonSuccessTestParam{R"({})", NestedMessageData{std::nullopt}},
46 NestedFromJsonSuccessTestParam{R"({"parent":null})", NestedMessageData{std::nullopt}},
47 NestedFromJsonSuccessTestParam{R"({"parent":{}})", NestedMessageData{0}},
48 NestedFromJsonSuccessTestParam{R"({"parent":{"field1":null}})", NestedMessageData{0}},
49 NestedFromJsonSuccessTestParam{R"({"parent":{"field1":123}})", NestedMessageData{123}}
50 )
51);
52
53INSTANTIATE_TEST_SUITE_P(
54 ,
55 NestedFromJsonFailureTest,
56 ::testing::Values(
57 NestedFromJsonFailureTestParam{R"(null)", ReadErrorCode::kInvalidType, "/"},
58 NestedFromJsonFailureTestParam{R"([])", ReadErrorCode::kInvalidType, "/"},
59 NestedFromJsonFailureTestParam{R"(true)", ReadErrorCode::kInvalidType, "/"},
60 NestedFromJsonFailureTestParam{R"(10)", ReadErrorCode::kInvalidType, "/"},
61 NestedFromJsonFailureTestParam{R"("test")", ReadErrorCode::kInvalidType, "/"},
62 NestedFromJsonFailureTestParam{R"({"parent":[]})", ReadErrorCode::kInvalidType, "parent"},
63 NestedFromJsonFailureTestParam{R"({"parent":true})", ReadErrorCode::kInvalidType, "parent"},
64 NestedFromJsonFailureTestParam{R"({"parent":10})", ReadErrorCode::kInvalidType, "parent"},
65 NestedFromJsonFailureTestParam{R"({"parent":"test"})", ReadErrorCode::kInvalidType, "parent"},
66 NestedFromJsonFailureTestParam{
67 R"({"parent":{"field1":2147483648}})",
68 ReadErrorCode::kInvalidValue,
69 "parent.field1"
70 },
71 NestedFromJsonFailureTestParam{
72 R"({"parent":{"field1":-2147483649}})",
73 ReadErrorCode::kInvalidValue,
74 "parent.field1"
75 }
76 )
77);
78
79TEST_P(NestedFromJsonSuccessTest, Test) {
80 const auto& param = GetParam();
81
82 proto_json::messages::NestedMessage message, expected_message, sample_message;
83 formats::json::Value input = PrepareJsonTestData(param.input);
84 expected_message = PrepareTestData(param.expected_message);
85
86 message.mutable_parent()->set_field1(100001);
87
88 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::NestedMessage>(input, param.options)));
89 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
90
91 CheckMessageEqual(message, sample_message);
92 CheckMessageEqual(message, expected_message);
93}
94
95TEST_P(NestedFromJsonFailureTest, Test) {
96 const auto& param = GetParam();
97
98 proto_json::messages::NestedMessage sample_message;
99 formats::json::Value input = PrepareJsonTestData(param.input);
100
101 EXPECT_READ_ERROR(
102 (void)JsonToMessage<proto_json::messages::NestedMessage>(input, param.options),
103 param.expected_errc,
104 param.expected_path
105 );
106 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);
107}
108
109} // namespace protobuf::json::tests
110
111USERVER_NAMESPACE_END