From 738700e8d81f902b36fab263879e8a08496f8f43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD?= Date: Sun, 24 Aug 2025 08:25:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D0=BB=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/endpoints_handlers/Controller.h | 14 +++++++++----- src/endpoints_handlers/IController.h | 4 ++-- tests/endpoint_handlers/Controller_TEST.cpp | 21 +++++++++++++-------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/endpoints_handlers/Controller.h b/src/endpoints_handlers/Controller.h index 9a80ae4..aad7b75 100644 --- a/src/endpoints_handlers/Controller.h +++ b/src/endpoints_handlers/Controller.h @@ -9,19 +9,23 @@ namespace uad template class Controller : IController { - using HTTPMethodsToExecutors = std::unordered_map>>; +public: + using HTTPMethodsToExecutors = std::unordered_map>>; +private: HTTPMethodsToExecutors executors_; public: Controller() = default; - explicit Controller(HTTPMethodsToExecutors&& executors) {} + explicit Controller(HTTPMethodsToExecutors&& executors): executors_(std::move(executors)) {} - std::optional>> FindExecutor( + std::optional>> FindExecutor( boost::beast::http::verb method - ) const override + ) override { - return std::nullopt; + if (!executors_.count(method)) return std::nullopt; + + return std::make_optional(executors_.at(method)); } }; } diff --git a/src/endpoints_handlers/IController.h b/src/endpoints_handlers/IController.h index fae3893..b67d0c8 100644 --- a/src/endpoints_handlers/IController.h +++ b/src/endpoints_handlers/IController.h @@ -18,9 +18,9 @@ template class IController { public: - virtual std::optional>> FindExecutor( + virtual std::optional>> FindExecutor( boost::beast::http::verb method - ) const = 0; + ) = 0; virtual ~IController() = default; }; } diff --git a/tests/endpoint_handlers/Controller_TEST.cpp b/tests/endpoint_handlers/Controller_TEST.cpp index 7f49394..1448ac0 100644 --- a/tests/endpoint_handlers/Controller_TEST.cpp +++ b/tests/endpoint_handlers/Controller_TEST.cpp @@ -15,6 +15,10 @@ using namespace boost; using namespace std; using namespace uad; +using IControllerMock = Controller, + beast::http::string_body>; + class MockExecutor : public IExecutor, beast::http::string_body> @@ -33,9 +37,7 @@ public: BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_No_Executors) { - Controller, - beast::http::string_body> my_controller; + IControllerMock my_controller; BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::get).has_value()); BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::post).has_value()); @@ -47,13 +49,16 @@ BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_No_Executors) BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_Unordered_Map_HTTP_Methods_To_Executors) { - std::unordered_map, beast::http::string_body>>> executors; + IControllerMock::HTTPMethodsToExecutors executors; - executors[beast::http::verb::get] = make_unique(); + executors[beast::http::verb::get] = make_shared(); + executors[beast::http::verb::post] = make_shared(); + executors[beast::http::verb::put] = make_shared(); + executors[beast::http::verb::delete_] = make_shared(); + executors[beast::http::verb::head] = make_shared(); + executors[beast::http::verb::options] = make_shared(); - Controller, - beast::http::string_body> my_controller(std::move(executors)); + IControllerMock my_controller(std::move(executors)); BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::get).has_value()); BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::post).has_value());