Skip to content

Commit 6504bef

Browse files
Add payload to delete operation
1 parent cd50797 commit 6504bef

4 files changed

Lines changed: 104 additions & 41 deletions

File tree

src/HTTPRequest.cpp

Lines changed: 84 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -578,29 +578,93 @@ void HTTPRequest::delete_(std::variant<TRequestParameters<std::string>,
578578
std::visit(
579579
[&](auto&& arg)
580580
{
581-
auto req {DeleteRequest::builder(
582-
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
583-
req.url(arg.url.url(), arg.secureCommunication)
584-
.appendHeaders(arg.httpHeaders)
585-
.timeout(timeout)
586-
.userAgent(userAgent)
587-
.outputFile(outputFile)
588-
.execute();
581+
using T = std::decay_t<decltype(arg)>;
582+
if constexpr (std::is_same_v<T, TRequestParameters<std::string>>)
583+
{
584+
auto req {DeleteRequest::builder(
585+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
586+
req.url(arg.url.url(), arg.secureCommunication)
587+
.template postData<const std::string&>(arg.data)
588+
.appendHeaders(arg.httpHeaders)
589+
.timeout(timeout)
590+
.userAgent(userAgent)
591+
.outputFile(outputFile)
592+
.execute();
589593

590-
std::visit(
591-
[&](auto&& arg)
592-
{
593-
using Tb = std::decay_t<decltype(arg)>;
594-
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
594+
std::visit(
595+
[&](auto&& arg)
595596
{
596-
arg.onSuccess(response);
597-
}
598-
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
597+
using Tb = std::decay_t<decltype(arg)>;
598+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
599+
{
600+
arg.onSuccess(response);
601+
}
602+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
603+
{
604+
arg.onSuccess(std::move(response));
605+
}
606+
},
607+
postRequestParameters);
608+
}
609+
else if constexpr (std::is_same_v<T, TRequestParameters<std::string_view>>)
610+
{
611+
auto req {DeleteRequest::builder(
612+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
613+
req.url(arg.url.url(), arg.secureCommunication)
614+
.template postData<std::string_view>(arg.data)
615+
.appendHeaders(arg.httpHeaders)
616+
.timeout(timeout)
617+
.userAgent(userAgent)
618+
.outputFile(outputFile)
619+
.execute();
620+
621+
std::visit(
622+
[&](auto&& arg)
599623
{
600-
arg.onSuccess(std::move(response));
601-
}
602-
},
603-
postRequestParameters);
624+
using Tb = std::decay_t<decltype(arg)>;
625+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
626+
{
627+
arg.onSuccess(response);
628+
}
629+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
630+
{
631+
arg.onSuccess(std::move(response));
632+
}
633+
},
634+
postRequestParameters);
635+
}
636+
else if constexpr (std::is_same_v<T, TRequestParameters<nlohmann::json>>)
637+
{
638+
const std::string data = arg.data.dump();
639+
auto req {DeleteRequest::builder(
640+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
641+
req.url(arg.url.url(), arg.secureCommunication)
642+
.template postData<const std::string&>(data)
643+
.appendHeaders(arg.httpHeaders)
644+
.timeout(timeout)
645+
.userAgent(userAgent)
646+
.outputFile(outputFile)
647+
.execute();
648+
649+
std::visit(
650+
[&](auto&& arg)
651+
{
652+
using Tb = std::decay_t<decltype(arg)>;
653+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
654+
{
655+
arg.onSuccess(response);
656+
}
657+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
658+
{
659+
arg.onSuccess(std::move(response));
660+
}
661+
},
662+
postRequestParameters);
663+
}
664+
else
665+
{
666+
throw std::runtime_error("Invalid type");
667+
}
604668
},
605669
requestParameters);
606670
}

src/urlRequest.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ class GetRequest final : public cURLRequest<GetRequest>
436436
/**
437437
* @brief This class is a wrapper for curl library. It provides a simple interface to perform HTTP DELETE requests.
438438
*/
439-
class DeleteRequest final : public cURLRequest<DeleteRequest>
439+
class DeleteRequest final : public cURLRequest<DeleteRequest>, public PostData<DeleteRequest>
440440
{
441441
public:
442442
/**
@@ -445,6 +445,7 @@ class DeleteRequest final : public cURLRequest<DeleteRequest>
445445
*/
446446
explicit DeleteRequest(std::shared_ptr<IRequestImplementator> requestImplementator)
447447
: cURLRequest<DeleteRequest>(requestImplementator)
448+
, PostData<DeleteRequest>(requestImplementator)
448449
{
449450
requestImplementator->setOptionString(OPT_CUSTOMREQUEST, METHOD_TYPE_MAP.at(METHOD_DELETE));
450451
}

test_tool/actions.hpp

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -309,46 +309,43 @@ class DeleteAction final : public IAction
309309
{
310310
private:
311311
std::string m_url;
312+
nlohmann::json m_data;
312313
std::unordered_set<std::string> m_headers;
313314
SecureCommunication m_secureCommunication;
314315
long m_timeout;
315316

316317
public:
317-
/**
318-
* @brief Constructor of DeleteAction class.
319-
* @param url URL to perform the DELETE request.
320-
* @param headers Headers to send in the request.
321-
* @param secureCommunication Secure communication settings.
322-
* @param timeout Timeout for the request.
323-
*/
324318
explicit DeleteAction(const std::string& url,
319+
const nlohmann::json& data,
325320
const std::unordered_set<std::string>& headers,
326321
const SecureCommunication& secureCommunication,
327322
const long timeout)
328323
: m_url(url)
324+
, m_data(data)
329325
, m_headers(headers)
330326
, m_secureCommunication(secureCommunication)
331327
, m_timeout(timeout)
332328
{
333329
}
334330

335-
/**
336-
* @brief This method is used to perform the DELETE request.
337-
*/
338331
void execute() override
339332
{
340333
HTTPRequest::instance().delete_(
341-
RequestParameters {
342-
.url = HttpURL(m_url), .secureCommunication = m_secureCommunication, .httpHeaders = m_headers},
343-
PostRequestParameters {
334+
RequestParameters{
335+
.url = HttpURL(m_url),
336+
.data = m_data,
337+
.secureCommunication = m_secureCommunication,
338+
.httpHeaders = m_headers
339+
},
340+
PostRequestParameters{
344341
.onSuccess = [](const std::string& msg) { std::cout << msg << std::endl; },
345-
.onError =
346-
[](const std::string& msg, const long responseCode, const std::string& responseBody)
342+
.onError = [](const std::string& msg, const long code, const std::string& body)
347343
{
348-
std::cerr << msg << ": " << responseCode << ". Response body: " << responseBody << std::endl;
344+
std::cerr << msg << ": " << code << ". Response body: " << body << std::endl;
349345
throw std::runtime_error(msg);
350-
}},
351-
ConfigurationParameters {.timeout = m_timeout});
346+
}
347+
},
348+
ConfigurationParameters{.timeout = m_timeout});
352349
}
353350
};
354351

test_tool/factoryAction.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#include "actions.hpp"
1616
#include "cmdArgsParser.hpp"
1717
#include <memory>
18-
18+
#include <iostream>
1919
/**
2020
* @brief This class is used to build an action.
2121
*/
@@ -78,7 +78,8 @@ class FactoryAction final
7878
}
7979
else if (0 == args.type().compare("delete"))
8080
{
81-
return std::make_unique<DeleteAction>(args.url(), headers, secureCommunication, timeout);
81+
return std::make_unique<DeleteAction>(
82+
args.url(), args.postArguments(), headers, secureCommunication, timeout);
8283
}
8384
else
8485
{

0 commit comments

Comments
 (0)