mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
@@ -17,10 +17,14 @@
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#include "util/Taggable.hpp"
|
||||
#include "util/build/Build.hpp"
|
||||
#include "util/config/Config.hpp"
|
||||
#include "web/ng/MockConnection.hpp"
|
||||
#include "web/ng/Request.hpp"
|
||||
#include "web/ng/Response.hpp"
|
||||
|
||||
#include <boost/beast/core/flat_buffer.hpp>
|
||||
#include <boost/beast/http/field.hpp>
|
||||
#include <boost/beast/http/message.hpp>
|
||||
#include <boost/beast/http/status.hpp>
|
||||
@@ -29,6 +33,7 @@
|
||||
#include <boost/json/object.hpp>
|
||||
#include <boost/json/serialize.hpp>
|
||||
#include <fmt/core.h>
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <string>
|
||||
@@ -41,21 +46,23 @@ struct ResponseDeathTest : testing::Test {};
|
||||
|
||||
TEST_F(ResponseDeathTest, intoHttpResponseWithoutHttpData)
|
||||
{
|
||||
Request const request{"some messsage", Request::HttpHeaders{}};
|
||||
web::ng::Response response{boost::beast::http::status::ok, "message", request};
|
||||
Request::HttpHeaders const headers{};
|
||||
Request const request{"some message", headers};
|
||||
Response response{boost::beast::http::status::ok, "message", request};
|
||||
EXPECT_DEATH(std::move(response).intoHttpResponse(), "");
|
||||
}
|
||||
|
||||
TEST_F(ResponseDeathTest, asConstBufferWithHttpData)
|
||||
{
|
||||
Request const request{http::request<http::string_body>{http::verb::get, "/", 11}};
|
||||
web::ng::Response const response{boost::beast::http::status::ok, "message", request};
|
||||
Response const response{boost::beast::http::status::ok, "message", request};
|
||||
EXPECT_DEATH(response.asWsResponse(), "");
|
||||
}
|
||||
|
||||
struct ResponseTest : testing::Test {
|
||||
int const httpVersion_ = 11;
|
||||
http::status const responseStatus_ = http::status::ok;
|
||||
Request::HttpHeaders const headers_;
|
||||
};
|
||||
|
||||
TEST_F(ResponseTest, intoHttpResponse)
|
||||
@@ -63,7 +70,7 @@ TEST_F(ResponseTest, intoHttpResponse)
|
||||
Request const request{http::request<http::string_body>{http::verb::post, "/", httpVersion_, "some message"}};
|
||||
std::string const responseMessage = "response message";
|
||||
|
||||
web::ng::Response response{responseStatus_, responseMessage, request};
|
||||
Response response{responseStatus_, responseMessage, request};
|
||||
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
EXPECT_EQ(httpResponse.result(), responseStatus_);
|
||||
@@ -83,7 +90,7 @@ TEST_F(ResponseTest, intoHttpResponseJson)
|
||||
Request const request{http::request<http::string_body>{http::verb::post, "/", httpVersion_, "some message"}};
|
||||
boost::json::object const responseMessage{{"key", "value"}};
|
||||
|
||||
web::ng::Response response{responseStatus_, responseMessage, request};
|
||||
Response response{responseStatus_, responseMessage, request};
|
||||
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
EXPECT_EQ(httpResponse.result(), responseStatus_);
|
||||
@@ -100,9 +107,9 @@ TEST_F(ResponseTest, intoHttpResponseJson)
|
||||
|
||||
TEST_F(ResponseTest, asConstBuffer)
|
||||
{
|
||||
Request const request("some request", Request::HttpHeaders{});
|
||||
Request const request("some request", headers_);
|
||||
std::string const responseMessage = "response message";
|
||||
web::ng::Response const response{responseStatus_, responseMessage, request};
|
||||
Response const response{responseStatus_, responseMessage, request};
|
||||
|
||||
auto const buffer = response.asWsResponse();
|
||||
EXPECT_EQ(buffer.size(), responseMessage.size());
|
||||
@@ -113,9 +120,9 @@ TEST_F(ResponseTest, asConstBuffer)
|
||||
|
||||
TEST_F(ResponseTest, asConstBufferJson)
|
||||
{
|
||||
Request const request("some request", Request::HttpHeaders{});
|
||||
Request const request("some request", headers_);
|
||||
boost::json::object const responseMessage{{"key", "value"}};
|
||||
web::ng::Response const response{responseStatus_, responseMessage, request};
|
||||
Response const response{responseStatus_, responseMessage, request};
|
||||
|
||||
auto const buffer = response.asWsResponse();
|
||||
EXPECT_EQ(buffer.size(), boost::json::serialize(responseMessage).size());
|
||||
@@ -123,3 +130,88 @@ TEST_F(ResponseTest, asConstBufferJson)
|
||||
std::string const messageFromBuffer{static_cast<char const*>(buffer.data()), buffer.size()};
|
||||
EXPECT_EQ(messageFromBuffer, boost::json::serialize(responseMessage));
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, createFromStringAndConnection)
|
||||
{
|
||||
util::TagDecoratorFactory tagDecoratorFactory{util::Config{}};
|
||||
StrictMockConnection connection{"some ip", boost::beast::flat_buffer{}, tagDecoratorFactory};
|
||||
std::string const responseMessage = "response message";
|
||||
|
||||
EXPECT_CALL(connection, wasUpgraded()).WillOnce(testing::Return(false));
|
||||
Response response{responseStatus_, responseMessage, connection};
|
||||
|
||||
EXPECT_EQ(response.message(), responseMessage);
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
EXPECT_EQ(httpResponse.result(), responseStatus_);
|
||||
auto const it = httpResponse.find(http::field::content_type);
|
||||
ASSERT_NE(it, httpResponse.end());
|
||||
EXPECT_EQ(it->value(), "text/html");
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, createFromJsonAndConnection)
|
||||
{
|
||||
util::TagDecoratorFactory tagDecoratorFactory{util::Config{}};
|
||||
StrictMockConnection connection{"some ip", boost::beast::flat_buffer{}, tagDecoratorFactory};
|
||||
boost::json::object const responseMessage{{"key", "value"}};
|
||||
|
||||
EXPECT_CALL(connection, wasUpgraded()).WillOnce(testing::Return(false));
|
||||
Response response{responseStatus_, responseMessage, connection};
|
||||
|
||||
EXPECT_EQ(response.message(), boost::json::serialize(responseMessage));
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
EXPECT_EQ(httpResponse.result(), responseStatus_);
|
||||
auto const it = httpResponse.find(http::field::content_type);
|
||||
ASSERT_NE(it, httpResponse.end());
|
||||
EXPECT_EQ(it->value(), "application/json");
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, setMessageString_HttpResponse)
|
||||
{
|
||||
Request const request{http::request<http::string_body>{http::verb::post, "/", httpVersion_, "some request"}};
|
||||
Response response{boost::beast::http::status::ok, "message", request};
|
||||
|
||||
std::string const newMessage = "new message";
|
||||
response.setMessage(newMessage);
|
||||
|
||||
EXPECT_EQ(response.message(), newMessage);
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
auto it = httpResponse.find(http::field::content_type);
|
||||
ASSERT_NE(it, httpResponse.end());
|
||||
EXPECT_EQ(it->value(), "text/html");
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, setMessageString_WsResponse)
|
||||
{
|
||||
Request const request{"some request", headers_};
|
||||
Response response{boost::beast::http::status::ok, "message", request};
|
||||
|
||||
std::string const newMessage = "new message";
|
||||
response.setMessage(newMessage);
|
||||
|
||||
EXPECT_EQ(response.message(), newMessage);
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, setMessageJson_HttpResponse)
|
||||
{
|
||||
Request const request{http::request<http::string_body>{http::verb::post, "/", httpVersion_, "some request"}};
|
||||
Response response{boost::beast::http::status::ok, "message", request};
|
||||
|
||||
boost::json::object const newMessage{{"key", "value"}};
|
||||
response.setMessage(newMessage);
|
||||
|
||||
auto const httpResponse = std::move(response).intoHttpResponse();
|
||||
auto it = httpResponse.find(http::field::content_type);
|
||||
ASSERT_NE(it, httpResponse.end());
|
||||
EXPECT_EQ(it->value(), "application/json");
|
||||
}
|
||||
|
||||
TEST_F(ResponseTest, setMessageJson_WsResponse)
|
||||
{
|
||||
Request const request{"some request", headers_};
|
||||
Response response{boost::beast::http::status::ok, "message", request};
|
||||
|
||||
boost::json::object const newMessage{{"key", "value"}};
|
||||
response.setMessage(newMessage);
|
||||
|
||||
EXPECT_EQ(response.message(), boost::json::serialize(newMessage));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user