This commit is contained in:
@@ -106,6 +106,7 @@ from govoplan_core.core.module_package_catalog import (
|
||||
sign_module_package_catalog,
|
||||
validate_module_package_catalog,
|
||||
)
|
||||
from govoplan_core.core.information_governance import ModuleInformationGovernance
|
||||
from govoplan_core.core.modules import DocumentationTopic, FrontendModule, FrontendRoute, MigrationRetirementPlan, ModuleCompatibility, ModuleMigrationTask, ModuleMigrationTaskContext, ModuleMigrationTaskResult, ModuleUninstallGuardResult, PublicFrontendRoute
|
||||
from govoplan_core.core.module_guards import drop_table_retirement_provider
|
||||
from govoplan_core.core.modules import MigrationSpec, ModuleInterfaceProvider, ModuleInterfaceRequirement, ModuleManifest, PermissionDefinition, RoleTemplate
|
||||
@@ -119,7 +120,8 @@ from govoplan_core.security.module_permissions import scopes_grant_compatible
|
||||
from govoplan_core.security.permissions import scope_grants
|
||||
from govoplan_core.server.app import create_app
|
||||
from govoplan_core.server.config import GovoplanServerConfig
|
||||
from govoplan_core.server.platform import create_platform_router
|
||||
from govoplan_core.server.platform import _documentation_help_contexts, create_platform_router
|
||||
from govoplan_core.core.views import ViewSurface
|
||||
from govoplan_core.server.registry import available_module_manifests, build_platform_registry
|
||||
from govoplan_core.server.route_validation import RouteCollisionError
|
||||
from govoplan_core.tenancy.scope import Tenant, create_scope_tables
|
||||
@@ -597,6 +599,70 @@ class ModuleSystemTests(unittest.TestCase):
|
||||
[item["path"] for item in public_module["frontend"]["public_routes"]],
|
||||
)
|
||||
|
||||
def test_declared_surfaces_receive_static_documentation_fallbacks(self) -> None:
|
||||
manifest = ModuleManifest(
|
||||
id="example",
|
||||
name="Example",
|
||||
version="test",
|
||||
documentation=(
|
||||
DocumentationTopic(
|
||||
id="example.user",
|
||||
title="Example user guide",
|
||||
summary="User guide.",
|
||||
documentation_types=("user",),
|
||||
order=20,
|
||||
),
|
||||
DocumentationTopic(
|
||||
id="example.admin",
|
||||
title="Example administrator guide",
|
||||
summary="Administrator guide.",
|
||||
documentation_types=("admin",),
|
||||
order=10,
|
||||
),
|
||||
),
|
||||
frontend=FrontendModule(
|
||||
module_id="example",
|
||||
routes=(
|
||||
FrontendRoute(
|
||||
path="/example",
|
||||
component="ExamplePage",
|
||||
surface_id="example.workspace",
|
||||
),
|
||||
),
|
||||
settings_routes=(
|
||||
FrontendRoute(
|
||||
path="/admin?section=example",
|
||||
component="ExampleAdmin",
|
||||
surface_id="example.admin.settings",
|
||||
),
|
||||
),
|
||||
view_surfaces=(
|
||||
ViewSurface(
|
||||
id="example.workspace",
|
||||
module_id="example",
|
||||
kind="route",
|
||||
label="Example workspace",
|
||||
),
|
||||
ViewSurface(
|
||||
id="example.admin.settings",
|
||||
module_id="example",
|
||||
kind="section",
|
||||
label="Example settings",
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
contexts = {
|
||||
item["id"]: item for item in _documentation_help_contexts(manifest)
|
||||
}
|
||||
|
||||
self.assertEqual("example.user", contexts["example.workspace"]["topic_id"])
|
||||
self.assertEqual(
|
||||
"example.admin",
|
||||
contexts["example.admin.settings"]["topic_id"],
|
||||
)
|
||||
|
||||
def test_registry_rejects_duplicate_public_frontend_routes(self) -> None:
|
||||
registry = PlatformRegistry()
|
||||
for module_id in ("first", "second"):
|
||||
@@ -3300,6 +3366,7 @@ finally:
|
||||
"recovery_notes": "Restore rehearsal completed for the release candidate.",
|
||||
"provides_interfaces": [{"name": "files.spaces", "version": "1.2.0"}],
|
||||
"requires_interfaces": [{"name": "access.directory", "version_min": "1.0.0", "optional": True}],
|
||||
"information_governance": ModuleInformationGovernance().to_dict(),
|
||||
"artifact_integrity": {
|
||||
"python": {
|
||||
"ref": "govoplan-files==0.1.4",
|
||||
@@ -3345,6 +3412,12 @@ finally:
|
||||
[{"name": "access.directory", "optional": True, "version_min": "1.0.0"}],
|
||||
catalog[0]["requires_interfaces"],
|
||||
)
|
||||
self.assertEqual(
|
||||
"contract_only",
|
||||
catalog[0]["information_governance"]["dimensions"]["retention"][
|
||||
"adoption"
|
||||
],
|
||||
)
|
||||
self.assertEqual("0" * 64, catalog[0]["artifact_integrity"]["python"]["sha256"])
|
||||
|
||||
validation = validate_module_package_catalog(catalog_path)
|
||||
|
||||
Reference in New Issue
Block a user