57 lines
2.2 KiB
C++
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);
|
|
}
|