46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
#include "adminive/adapters/drogon.hpp"
|
|
#include "adminive/adapters/nlohmann_json.hpp"
|
|
#include <cassert>
|
|
#include <functional>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
namespace drogon_test {
|
|
struct Config {
|
|
std::string name{"default"};
|
|
};
|
|
}
|
|
namespace adminive {
|
|
template <>
|
|
struct Type_Descriptor<drogon_test::Config> {
|
|
static auto get() {
|
|
using T = drogon_test::Config;
|
|
return object<T>("config", "Config", ADMINIVE_FIELD(T, name).editable());
|
|
}
|
|
};
|
|
}
|
|
int main() {
|
|
drogon_test::Config config;
|
|
drogon::HttpAppFramework app;
|
|
std::vector<std::function<void()>> tasks;
|
|
{
|
|
adminive::Drogon_Resource<drogon_test::Config, nlohmann::json> resource(config, "/config");
|
|
resource.bind(app, [&tasks](std::function<void()> task) {
|
|
tasks.push_back(std::move(task));
|
|
});
|
|
}
|
|
auto request = std::make_shared<drogon::HttpRequest>();
|
|
request->body = R"({"name":"updated"})";
|
|
drogon::HttpResponsePtr response;
|
|
app.handle("/config/data", drogon::Post, request, [&response](const drogon::HttpResponsePtr& value) {
|
|
response = value;
|
|
});
|
|
assert(!response);
|
|
assert(tasks.size() == 1);
|
|
tasks.front()();
|
|
assert(response);
|
|
assert(response->status == drogon::k200OK);
|
|
assert(config.name == "updated");
|
|
return 0;
|
|
}
|