feat: harden shared platform contracts
This commit is contained in:
@@ -3,7 +3,10 @@ from __future__ import annotations
|
||||
import unittest
|
||||
|
||||
from govoplan_core.core.modules import (
|
||||
DocumentationConfigurationDecision,
|
||||
DocumentationConfigurationProviderRegistration,
|
||||
DocumentationCondition,
|
||||
DocumentationSourceDefinition,
|
||||
DocumentationTopic,
|
||||
ModuleManifest,
|
||||
user_workflow_scope_condition_issues,
|
||||
@@ -67,6 +70,52 @@ class DocumentationTopicContractTests(unittest.TestCase):
|
||||
self.assertEqual(user_workflow_scope_condition_issues(user_reference), ())
|
||||
registry_for(scoped, admin_workflow, user_reference).validate()
|
||||
|
||||
def test_documentation_configuration_and_source_extensions_are_validated(self) -> None:
|
||||
resolver = lambda _context, keys: { # noqa: E731
|
||||
key: DocumentationConfigurationDecision(key=key, state="enabled")
|
||||
for key in keys
|
||||
}
|
||||
registry = PlatformRegistry()
|
||||
registry.register(ModuleManifest(
|
||||
id="example",
|
||||
name="Example",
|
||||
version="1.0.0",
|
||||
documentation_configuration_providers=(
|
||||
DocumentationConfigurationProviderRegistration(
|
||||
keys=("example.feature",),
|
||||
resolve=resolver,
|
||||
),
|
||||
),
|
||||
documentation_sources=(
|
||||
DocumentationSourceDefinition(
|
||||
id="example.handbook",
|
||||
kind="repository",
|
||||
label="Example handbook",
|
||||
),
|
||||
),
|
||||
))
|
||||
|
||||
registry.validate()
|
||||
|
||||
duplicate = PlatformRegistry()
|
||||
duplicate.register(ModuleManifest(
|
||||
id="example",
|
||||
name="Example",
|
||||
version="1.0.0",
|
||||
documentation_configuration_providers=(
|
||||
DocumentationConfigurationProviderRegistration(
|
||||
keys=("example.feature",),
|
||||
resolve=resolver,
|
||||
),
|
||||
DocumentationConfigurationProviderRegistration(
|
||||
keys=("example.feature",),
|
||||
resolve=resolver,
|
||||
),
|
||||
),
|
||||
))
|
||||
with self.assertRaisesRegex(RegistryError, "duplicate documentation configuration key"):
|
||||
duplicate.validate()
|
||||
|
||||
|
||||
def registry_for(*topics: DocumentationTopic) -> PlatformRegistry:
|
||||
registry = PlatformRegistry()
|
||||
|
||||
Reference in New Issue
Block a user