1#include <gtest/gtest.h>
3#include <userver/proto-structs/json.hpp>
4#include <userver/utest/assert_macros.hpp>
6#include "messages.pb.h"
11namespace proto_structs::tests {
13TEST(JsonToStruct, JsonValue) {
14 messages::Scalar expected;
15 expected.set_f1(
true);
16 expected.set_f2(std::numeric_limits<int32_t>::min());
17 expected.set_f3(std::numeric_limits<uint32_t>::max());
18 expected.set_f4(std::numeric_limits<int64_t>::min());
19 expected.set_f5(std::numeric_limits<uint64_t>::max());
20 expected.set_f6(
static_cast<
float>(1.5));
21 expected.set_f7(-2.5);
22 expected.set_f8(
"test1");
23 expected.set_f9(
"test2");
24 expected.set_f10(messages::TestEnum::TEST_ENUM_VALUE1);
25 expected.set_f11(987);
27 auto builder = formats::json::ValueBuilder{formats::common::Type::kObject};
29 builder[
"f2"] = std::numeric_limits<int32_t>::min();
30 builder[
"f3"] = std::numeric_limits<uint32_t>::max();
32 builder[
"f4"] = std::to_string(std::numeric_limits<int64_t>::min());
33 builder[
"f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
34 builder[
"f6"] =
static_cast<
float>(1.5);
36 builder[
"f8"] =
"test1";
37 builder[
"f9"] =
"dGVzdDI=";
38 builder[
"f10"] =
"TEST_ENUM_VALUE1";
42 UASSERT_NO_THROW(result = JsonToStruct<structs::
Scalar>(builder.ExtractValue(), {}));
43 structs::CheckScalarEqual(result, expected);
46TEST(JsonToStruct, JsonString) {
47 messages::Scalar expected;
48 expected.set_f1(
true);
49 expected.set_f2(std::numeric_limits<int32_t>::min());
50 expected.set_f3(std::numeric_limits<uint32_t>::max());
51 expected.set_f4(std::numeric_limits<int64_t>::min());
52 expected.set_f5(std::numeric_limits<uint64_t>::max());
53 expected.set_f6(
static_cast<
float>(1.5));
54 expected.set_f7(-2.5);
55 expected.set_f8(
"test1");
56 expected.set_f9(
"test2");
57 expected.set_f10(messages::TestEnum::TEST_ENUM_VALUE1);
58 expected.set_f11(987);
60 auto builder = formats::json::ValueBuilder{formats::common::Type::kObject};
62 builder[
"f2"] = std::numeric_limits<int32_t>::min();
63 builder[
"f3"] = std::numeric_limits<uint32_t>::max();
65 builder[
"f4"] = std::to_string(std::numeric_limits<int64_t>::min());
66 builder[
"f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
67 builder[
"f6"] =
static_cast<
float>(1.5);
69 builder[
"f8"] =
"test1";
70 builder[
"f9"] =
"dGVzdDI=";
71 builder[
"f10"] =
"TEST_ENUM_VALUE1";
73 const auto json_string = formats::json::ToString(builder.ExtractValue());
76 UASSERT_NO_THROW(result = JsonStringToStruct<structs::
Scalar>(json_string, {}));
77 structs::CheckScalarEqual(result, expected);