优化
This commit is contained in:
@@ -6,12 +6,18 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
namespace drogon_test {
|
||||
struct Config {
|
||||
std::string name{"default"};
|
||||
};
|
||||
struct Status {
|
||||
std::string user;
|
||||
};
|
||||
struct Config {
|
||||
std::string name{"default"};
|
||||
Status status() {
|
||||
if(name == "status-error") {
|
||||
throw std::runtime_error("item status failed");
|
||||
}
|
||||
return Status{name};
|
||||
}
|
||||
};
|
||||
}
|
||||
namespace adminive {
|
||||
template <>
|
||||
@@ -76,6 +82,27 @@ int main() {
|
||||
});
|
||||
ADMINIVE_CHECK(response->status == drogon::k200OK);
|
||||
ADMINIVE_CHECK(Json::parse(response->body).at("data").at("kind") == "form");
|
||||
adminive::Drogon_Bind_Options nonstd_options = options;
|
||||
nonstd_options.context_factory = [](const drogon::HttpRequestPtr&) -> adminive::Request_Context {
|
||||
throw 7;
|
||||
};
|
||||
adminive::Drogon_Resource<drogon_test::Config, Json> nonstd_resource(config, "/context-error");
|
||||
nonstd_resource.bind(app, nonstd_options);
|
||||
adminive::Drogon_Status_Resource<drogon_test::Status, Json> nonstd_status("/status-context-error", [](const adminive::Request_Context&) {
|
||||
return drogon_test::Status{};
|
||||
});
|
||||
nonstd_status.bind(app, nonstd_options);
|
||||
response.reset();
|
||||
app.handle("/context-error/data", drogon::Post, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
response = value;
|
||||
});
|
||||
ADMINIVE_CHECK(response->status == drogon::k500InternalServerError);
|
||||
response.reset();
|
||||
app.handle("/status-context-error/data", drogon::Get, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
response = value;
|
||||
});
|
||||
ADMINIVE_CHECK(response->status == drogon::k500InternalServerError);
|
||||
ADMINIVE_CHECK(tasks.empty());
|
||||
request->body = R"({"name":"updated"})";
|
||||
request->user = "wyc";
|
||||
response.reset();
|
||||
@@ -114,6 +141,7 @@ int main() {
|
||||
});
|
||||
ADMINIVE_CHECK(response->status == drogon::k200OK);
|
||||
adminive::Drogon_Collection_Resource<drogon_test::Config, Json> collection("/configs", {drogon_test::Config{"first"}});
|
||||
collection.register_status<&drogon_test::Config::status>(25);
|
||||
collection.bind(app, options);
|
||||
response.reset();
|
||||
app.handle("/configs/view", drogon::Get, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
@@ -174,6 +202,22 @@ int main() {
|
||||
tasks.erase(tasks.begin());
|
||||
ADMINIVE_CHECK(response->status == drogon::k200OK);
|
||||
ADMINIVE_CHECK(Json::parse(response->body).at("data").at("name") == "changed");
|
||||
request->body = R"({"name":"status-error"})";
|
||||
response.reset();
|
||||
app.handle("/configs/2", drogon::Patch, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
response = value;
|
||||
});
|
||||
tasks.front()();
|
||||
tasks.erase(tasks.begin());
|
||||
ADMINIVE_CHECK(response->status == drogon::k200OK);
|
||||
response.reset();
|
||||
app.handle("/configs/2/status", drogon::Get, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
response = value;
|
||||
});
|
||||
ADMINIVE_CHECK(!response);
|
||||
tasks.front()();
|
||||
tasks.erase(tasks.begin());
|
||||
ADMINIVE_CHECK(response->status == drogon::k500InternalServerError);
|
||||
response.reset();
|
||||
app.handle("/configs/1", drogon::Delete, request, [&response](const drogon::HttpResponsePtr& value) {
|
||||
response = value;
|
||||
|
||||
Reference in New Issue
Block a user