Files
Adminive/backend/service/tests/real_drogon_adapter_test.cpp
2026-08-08 22:39:18 +08:00

56 lines
1.8 KiB
C++

#include "adminive/adapters/drogon.hpp"
#include "adminive/adapters/nlohmann_json.hpp"
#include "adminive_test.hpp"
#include <string>
namespace real_drogon_test {
struct Status {
std::string state{"ready"};
};
struct Config {
std::string name{"real"};
Status status() {
return {};
}
};
}
namespace adminive {
template <>
struct Type_Descriptor<real_drogon_test::Status> {
static auto get() {
using T = real_drogon_test::Status;
return object<T>("real_drogon_status", ADMINIVE_FIELD(T, state));
}
};
template <>
struct Type_Descriptor<real_drogon_test::Config> {
static auto get() {
using T = real_drogon_test::Config;
return object<T>("real_drogon_config", ADMINIVE_FIELD(T, name).editable().creatable());
}
};
template <>
struct Type_View_Descriptor<real_drogon_test::Config> {
static Table_View table() {
using T = real_drogon_test::Config;
return table_view<T>(column<&T::name>("Name").sort().search());
}
};
}
int main() {
using Json = nlohmann::json;
auto& app = drogon::app();
real_drogon_test::Config config;
adminive::Drogon_Resource<real_drogon_test::Config, Json> resource(config, "/real/config");
resource.bind(app);
adminive::Drogon_Status_Resource<real_drogon_test::Status, Json> status("/real/status", [](const adminive::Request_Context&) {
return real_drogon_test::Status{};
});
status.bind(app);
adminive::Drogon_Collection_Resource<real_drogon_test::Config, Json> collection("/real/configs", {config});
collection.register_status<&real_drogon_test::Config::status>();
collection.bind(app);
ADMINIVE_CHECK(resource.view_schema().at("kind") == "form");
ADMINIVE_CHECK(collection.view_schema().at("kind") == "table");
return 0;
}