1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct BoolFromJsonSuccessTestParam {
18 std::string input = {};
20 ReadOptions options = {};
23struct BoolFromJsonFailureTestParam {
24 std::string input = {};
25 ReadErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ReadOptions options = {};
33 bool skip_native_check =
false;
36void PrintTo(
const BoolFromJsonSuccessTestParam& param, std::ostream* os) {
37 *os << fmt::format(
"{{ input = '{}' }}", param.input);
40void PrintTo(
const BoolFromJsonFailureTestParam& param, std::ostream* os) {
41 *os << fmt::format(
"{{ input = '{}' }}", param.input);
44class BoolFromJsonSuccessTest :
public ::testing::TestWithParam<BoolFromJsonSuccessTestParam> {};
45class BoolFromJsonFailureTest :
public ::testing::TestWithParam<BoolFromJsonFailureTestParam> {};
47INSTANTIATE_TEST_SUITE_P(
49 BoolFromJsonSuccessTest,
51 BoolFromJsonSuccessTestParam{R"({})", BoolMessageData{
false}},
52 BoolFromJsonSuccessTestParam{R"({"field1":null})", BoolMessageData{
false}},
53 BoolFromJsonSuccessTestParam{R"({"field1":false})", BoolMessageData{
false}},
54 BoolFromJsonSuccessTestParam{R"({"field1":true})", BoolMessageData{
true}}
58INSTANTIATE_TEST_SUITE_P(
60 BoolFromJsonFailureTest,
62 BoolFromJsonFailureTestParam{R"({"field1":[]})", ReadErrorCode::kInvalidType,
"field1"},
63 BoolFromJsonFailureTestParam{R"({"field1":{}})", ReadErrorCode::kInvalidType,
"field1"},
64 BoolFromJsonFailureTestParam{R"({"field1":"false"})", ReadErrorCode::kInvalidType,
"field1", {},
true},
65 BoolFromJsonFailureTestParam{R"({"field1":"true"})", ReadErrorCode::kInvalidType,
"field1", {},
true},
66 BoolFromJsonFailureTestParam{R"({"field1":0})", ReadErrorCode::kInvalidType,
"field1"},
67 BoolFromJsonFailureTestParam{R"({"field1":1})", ReadErrorCode::kInvalidType,
"field1"}
71TEST_P(BoolFromJsonSuccessTest, Test) {
72 const auto& param = GetParam();
74 proto_json::messages::BoolMessage message, expected_message, sample_message;
75 formats::json::Value input = PrepareJsonTestData(param.input);
76 expected_message = PrepareTestData(param.expected_message);
78 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::BoolMessage>(input, param.options)));
79 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
81 CheckMessageEqual(message, sample_message);
82 CheckMessageEqual(message, expected_message);
85TEST_P(BoolFromJsonFailureTest, Test) {
86 const auto& param = GetParam();
88 proto_json::messages::BoolMessage sample_message;
89 formats::json::Value input = PrepareJsonTestData(param.input);
92 (
void)JsonToMessage<proto_json::messages::BoolMessage>(input, param.options),
97 if (!param.skip_native_check) {
98 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);