Files
EVEngine/test/schema_production_integration.cpp

57 lines
2.2 KiB
C++

#include "zeroerr/unittest.h"
#include "definitions/Definitions.h"
#include "policyregistry/PolicyRegistry.h"
#include "schema/SchemaRegistry.h"
namespace {
eve::schema::SchemaDefinition objectSchema(std::string id) {
eve::schema::SchemaDefinition schema;
schema.id = std::move(id);
schema.version = 1;
schema.additionalProperties = false;
eve::schema::FieldDefinition enabled;
enabled.name = "enabled";
enabled.type = eve::schema::ValueType::Boolean;
enabled.required = true;
schema.fields.push_back(std::move(enabled));
return schema;
}
} // namespace
TEST_CASE("schema.productionBoundary.validatesDefinitionsBeforeMutation") {
eve::schema::SchemaRegistry::clear();
auto schemaRegistration = eve::schema::SchemaRegistry::registerVersioned(objectSchema("ability"));
REQUIRE(schemaRegistration.ok());
CHECK_EQ(schemaRegistration.value(), eve::schema::SchemaRegistrationStatus::Registered);
eve::definitions::DefinitionRegistry registry;
auto invalid = registry.insert("ability", "dash", 1, R"({"enabled":"yes"})");
CHECK(!invalid.ok());
CHECK_EQ(registry.size(), 0);
invalid.ignore("expected schema rejection");
auto valid = registry.insert("ability", "dash", 1, R"({"enabled":true})");
REQUIRE(valid.ok());
CHECK_EQ(registry.size(), 1);
}
TEST_CASE("schema.productionBoundary.validatesPolicyMetadataBeforeMutation") {
eve::schema::SchemaRegistry::clear();
auto schemaRegistration = eve::schema::SchemaRegistry::registerVersioned(objectSchema("policy:movement"));
REQUIRE(schemaRegistration.ok());
CHECK_EQ(schemaRegistration.value(), eve::schema::SchemaRegistrationStatus::Registered);
eve::policyregistry::PolicyRegistry registry;
auto invalid = registry.insert("movement", "ground", 1, 0, true, "builtin", "policy:movement", R"({"enabled":1})");
CHECK(!invalid.ok());
CHECK_EQ(registry.size(), 0);
invalid.ignore("expected schema rejection");
auto valid = registry.insert("movement", "ground", 1, 0, true, "builtin", "policy:movement", R"({"enabled":true})");
REQUIRE(valid.ok());
CHECK_EQ(registry.size(), 1);
}