diff --git a/src/endpoints_handlers/Controller.h b/src/endpoints_handlers/Controller.h index 619a381..9a80ae4 100644 --- a/src/endpoints_handlers/Controller.h +++ b/src/endpoints_handlers/Controller.h @@ -9,7 +9,14 @@ namespace uad template class Controller : IController { + using HTTPMethodsToExecutors = std::unordered_map>>; + + HTTPMethodsToExecutors executors_; public: + Controller() = default; + + explicit Controller(HTTPMethodsToExecutors&& executors) {} + std::optional>> FindExecutor( boost::beast::http::verb method ) const override diff --git a/tests/endpoint_handlers/Controller_TEST.cpp b/tests/endpoint_handlers/Controller_TEST.cpp index bede0b3..7f49394 100644 --- a/tests/endpoint_handlers/Controller_TEST.cpp +++ b/tests/endpoint_handlers/Controller_TEST.cpp @@ -15,11 +15,27 @@ using namespace boost; using namespace std; using namespace uad; +class MockExecutor : public IExecutor, + beast::http::string_body> +{ +public: + beast::http::response operator ()( + beast::http::request>>&& req + ) override + { + boost::beast::http::response res{ + boost::beast::http::status::not_found, req.version()}; + + return res; + } +}; + BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_No_Executors) { Controller, - beast::http::response> my_controller; + std::allocator, + beast::http::string_body> my_controller; BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::get).has_value()); BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::post).has_value()); @@ -28,3 +44,21 @@ BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_No_Executors) BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::head).has_value()); BOOST_CHECK(!my_controller.FindExecutor(beast::http::verb::options).has_value()); } + +BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_Unordered_Map_HTTP_Methods_To_Executors) +{ + std::unordered_map, beast::http::string_body>>> executors; + + executors[beast::http::verb::get] = make_unique(); + + Controller, + beast::http::string_body> 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()); + BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::put).has_value()); + BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::delete_).has_value()); + BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::head).has_value()); + BOOST_CHECK(my_controller.FindExecutor(beast::http::verb::options).has_value()); +}