userver: /data/code/userver/libraries/proto-structs/tests/struct_to_json_test.cpp Source File
Loading...
Searching...
No Matches
struct_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <userver/proto-structs/json.hpp>
4#include <userver/utest/assert_macros.hpp>
5#include <userver/utest/log_capture_fixture.hpp>
6
7#include "messages.pb.h"
8#include "structs.hpp"
9
10USERVER_NAMESPACE_BEGIN
11
12namespace proto_structs::tests {
13
14namespace {
15
16structs::Scalar MakeStruct() {
17 return structs::Scalar{
18 .f1 = true,
19 .f2 = std::numeric_limits<int32_t>::min(),
20 .f3 = std::numeric_limits<uint32_t>::max(),
21 .f4 = std::numeric_limits<int64_t>::min(),
22 .f5 = std::numeric_limits<uint64_t>::max(),
23 .f6 = static_cast<float>(1.5),
24 .f7 = -2.5,
25 .f8 = "test1",
26 .f9 = "test2",
27 .f10 = structs::TestEnum::kValue1,
28 .f11 = 987
29 };
30}
31
32formats::json::Value MakeJson() {
33 auto expected_builder = formats::json::ValueBuilder{formats::common::Type::kObject};
34 expected_builder["f1"] = true;
35 expected_builder["f2"] = std::numeric_limits<int32_t>::min();
36 expected_builder["f3"] = std::numeric_limits<uint32_t>::max();
37 // 64 bits are too large for JSON numbers, so we convert to string
38 expected_builder["f4"] = std::to_string(std::numeric_limits<int64_t>::min());
39 expected_builder["f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
40 expected_builder["f6"] = static_cast<float>(1.5);
41 expected_builder["f7"] = -2.5;
42 expected_builder["f8"] = "test1";
43 expected_builder["f9"] = "dGVzdDI="; // base64 encoded "test2"
44 expected_builder["f10"] = "TEST_ENUM_VALUE1";
45 expected_builder["f11"] = 987;
46 return expected_builder.ExtractValue();
47}
48
49} // namespace
50
51TEST(StructToJson, JsonValue) {
52 formats::json::Value json;
53 UASSERT_NO_THROW(json = StructToJson(MakeStruct(), {}));
54 ASSERT_EQ(json, MakeJson());
55}
56
57TEST(StructToJson, JsonString) {
58 std::string json_string;
59 UASSERT_NO_THROW(json_string = StructToJsonString(MakeStruct(), {}));
60 ASSERT_EQ(formats::json::FromString(json_string), MakeJson());
61}
62
63TEST(StructToJson, Serialize) {
64 formats::json::Value json;
65 UASSERT_NO_THROW(json = formats::json::ValueBuilder{MakeStruct()}.ExtractValue());
66 ASSERT_EQ(json, MakeJson());
67}
68
69using Logging = utest::LogCaptureFixture<>;
70
71TEST_F(Logging, LogStruct) {
72 const auto obj_string = GetLogCapture().ToStringViaLogging(MakeStruct());
73 EXPECT_EQ(obj_string, ToString(MakeJson()));
74}
75
76} // namespace proto_structs::tests
77
78USERVER_NAMESPACE_END