userver: /home/user/userver/libraries/proto-structs/tests/json_to_struct_test.cpp Source File
Loading...
Searching...
No Matches
json_to_struct_test.cpp
1#include <gtest/gtest.h>
2
3#include <userver/proto-structs/json.hpp>
4#include <userver/utest/assert_macros.hpp>
5
6#include "messages.pb.h"
7#include "structs.hpp"
8
9USERVER_NAMESPACE_BEGIN
10
11namespace proto_structs::tests {
12
13namespace {
14
15messages::Scalar MakeMessage() {
16 messages::Scalar msg;
17 msg.set_f1(true);
18 msg.set_f2(std::numeric_limits<int32_t>::min());
19 msg.set_f3(std::numeric_limits<uint32_t>::max());
20 msg.set_f4(std::numeric_limits<int64_t>::min());
21 msg.set_f5(std::numeric_limits<uint64_t>::max());
22 msg.set_f6(static_cast<float>(1.5));
23 msg.set_f7(-2.5);
24 msg.set_f8("test1");
25 msg.set_f9("test2");
26 msg.set_f10(messages::TestEnum::TEST_ENUM_VALUE1);
27 msg.set_f11(987);
28 return msg;
29}
30
31formats::json::Value MakeJson() {
32 auto builder = formats::json::ValueBuilder{formats::common::Type::kObject};
33 builder["f1"] = true;
34 builder["f2"] = std::numeric_limits<int32_t>::min();
35 builder["f3"] = std::numeric_limits<uint32_t>::max();
36 // 64 bits are too large for JSON numbers, so we convert to string
37 builder["f4"] = std::to_string(std::numeric_limits<int64_t>::min());
38 builder["f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
39 builder["f6"] = static_cast<float>(1.5);
40 builder["f7"] = -2.5;
41 builder["f8"] = "test1";
42 builder["f9"] = "dGVzdDI="; // base64 encoded "test2"
43 builder["f10"] = "TEST_ENUM_VALUE1";
44 builder["f11"] = 987;
45 return builder.ExtractValue();
46}
47
48} // namespace
49
50TEST(JsonToStruct, JsonValue) {
51 structs::Scalar result;
52 UASSERT_NO_THROW(result = JsonToStruct<structs::Scalar>(MakeJson(), {}));
53 structs::CheckScalarEqual(result, MakeMessage());
54}
55
56TEST(JsonToStruct, JsonString) {
57 const auto json_string = formats::json::ToString(MakeJson());
58 structs::Scalar result;
59 UASSERT_NO_THROW(result = JsonStringToStruct<structs::Scalar>(json_string, {}));
60 structs::CheckScalarEqual(result, MakeMessage());
61}
62
63TEST(JsonToStruct, Parse) {
64 structs::Scalar result;
65 UASSERT_NO_THROW(result = MakeJson().As<structs::Scalar>());
66 structs::CheckScalarEqual(result, MakeMessage());
67}
68
69} // namespace proto_structs::tests
70
71USERVER_NAMESPACE_END