88 lines
4.7 KiB
C++
88 lines
4.7 KiB
C++
#include "gallery.hpp"
|
|
#include "adminive_test.hpp"
|
|
#include <string>
|
|
#include <thread>
|
|
namespace {
|
|
using adminive::example::Json;
|
|
Json body_json(const httplib::Result& result) {
|
|
ADMINIVE_CHECK(result);
|
|
return Json::parse(result->body);
|
|
}
|
|
void check_status(const httplib::Result& result, int status) {
|
|
ADMINIVE_CHECK(result);
|
|
ADMINIVE_CHECK(result->status == status);
|
|
}
|
|
}
|
|
int main() {
|
|
adminive::example::Component_Gallery gallery;
|
|
httplib::Server server;
|
|
gallery.bind(server);
|
|
const int port = server.bind_to_any_port("127.0.0.1");
|
|
ADMINIVE_CHECK(port > 0);
|
|
std::thread thread([&] {
|
|
ADMINIVE_CHECK(server.listen_after_bind());
|
|
});
|
|
httplib::Client client("127.0.0.1", port);
|
|
const Json docs = body_json(client.Get("/admin/gallery/docs")).at("data");
|
|
ADMINIVE_CHECK(docs.at("cases").size() == 14);
|
|
ADMINIVE_CHECK(docs.at("capabilities").at("adapters").size() > 5);
|
|
ADMINIVE_CHECK(docs.at("examples").at("form_create_view").at("mode") == "create");
|
|
std::size_t creatable_fields = 0;
|
|
for(const auto& field : docs.at("examples").at("descriptor").at("fields")) {
|
|
if(field.at("creatable").get<bool>()) {
|
|
++creatable_fields;
|
|
}
|
|
}
|
|
ADMINIVE_CHECK(creatable_fields > 5);
|
|
Json field_policies = Json::object();
|
|
for(const auto& field : docs.at("examples").at("field_policies")) {
|
|
field_policies[field.at("name").get<std::string>()] = field;
|
|
}
|
|
ADMINIVE_CHECK(field_policies.at("backend_only").at("writable") == true);
|
|
ADMINIVE_CHECK(field_policies.at("backend_only").at("editable") == false);
|
|
ADMINIVE_CHECK(field_policies.at("backend_only").at("creatable") == false);
|
|
ADMINIVE_CHECK(field_policies.at("hidden_backend").at("writable") == true);
|
|
ADMINIVE_CHECK(field_policies.at("hidden_backend").at("readable") == false);
|
|
ADMINIVE_CHECK(field_policies.at("no_default_text").at("include_default") == false);
|
|
ADMINIVE_CHECK(docs.at("examples").at("data").contains("backend_only"));
|
|
ADMINIVE_CHECK(!docs.at("examples").at("data").contains("hidden_backend"));
|
|
for(const auto& field : docs.at("examples").at("descriptor").at("fields")) {
|
|
if(field.at("name") == "no_default_text") {
|
|
ADMINIVE_CHECK(!field.contains("default"));
|
|
}
|
|
}
|
|
ADMINIVE_CHECK(!docs.at("examples").at("adapter_data").contains("secret"));
|
|
ADMINIVE_CHECK(docs.at("examples").at("reflection_descriptor").at("fields").size() == 2);
|
|
ADMINIVE_CHECK(docs.at("examples").at("collection_list_view").at("mode") == "list");
|
|
const Json manifest = body_json(client.Get("/admin/gallery/frontend/manifest")).at("data");
|
|
ADMINIVE_CHECK(manifest.at("slots").size() == 3);
|
|
ADMINIVE_CHECK(manifest.at("slots").at("alpha").at("component_kind") == "amis_schema");
|
|
const Json managed = body_json(client.Get("/admin/gallery/managed")).at("data");
|
|
ADMINIVE_CHECK(managed.at("lock_count").get<std::size_t>() > 0);
|
|
const Json boundaries = body_json(client.Get("/admin/gallery/boundaries")).at("data");
|
|
ADMINIVE_CHECK(boundaries.size() == 11);
|
|
ADMINIVE_CHECK(boundaries.at(4).at("id") == "manifest-duplicate-slot");
|
|
ADMINIVE_CHECK(boundaries.at(4).at("rejected") == true);
|
|
check_status(client.Get("/admin/gallery/lab/invalid-filter"), 400);
|
|
const Json item_status = body_json(client.Get("/admin/gallery/items/1/status")).at("data");
|
|
ADMINIVE_CHECK(item_status.at("state").at("value") == "enabled");
|
|
httplib::Headers headers{{"X-Adminive-User", "gallery-test"}, {"X-Request-Id", "request-1"}};
|
|
const auto success = client.Post("/admin/gallery/transaction/success", headers, R"({"name":"success"})", "application/json");
|
|
check_status(success, 200);
|
|
ADMINIVE_CHECK(body_json(success).at("demo").at("events") == Json::array({"prepare", "commit"}));
|
|
const auto prepare = client.Post("/admin/gallery/transaction/prepare-reject", headers, R"({"name":"prepare"})", "application/json");
|
|
check_status(prepare, 500);
|
|
ADMINIVE_CHECK(body_json(prepare).at("demo").at("events") == Json::array({"prepare", "rollback"}));
|
|
const auto commit = client.Post("/admin/gallery/transaction/commit-fail", headers, R"({"name":"commit"})", "application/json");
|
|
check_status(commit, 500);
|
|
const Json commit_json = body_json(commit);
|
|
ADMINIVE_CHECK(commit_json.at("demo").at("events") == Json::array({"prepare", "commit", "rollback"}));
|
|
ADMINIVE_CHECK(commit_json.at("demo").at("context").at("user") == "gallery-test");
|
|
const auto rollback = client.Post("/admin/gallery/transaction/rollback-fail", headers, R"({"name":"rollback"})", "application/json");
|
|
check_status(rollback, 500);
|
|
ADMINIVE_CHECK(body_json(rollback).at("msg").get<std::string>().find("rollback failed") != std::string::npos);
|
|
server.stop();
|
|
thread.join();
|
|
return 0;
|
|
}
|