feat(k1): complete primary acquisition lifecycle
This commit is contained in:
@@ -39,7 +39,13 @@ after(async () => {
|
||||
await server?.close();
|
||||
});
|
||||
|
||||
function syntheticPlugin({ pluginId, modelId, componentKey, connectionView }) {
|
||||
function syntheticPlugin({
|
||||
pluginId,
|
||||
modelId,
|
||||
componentKey,
|
||||
connectionView,
|
||||
spatialControlsView,
|
||||
}) {
|
||||
return {
|
||||
manifest: {
|
||||
apiVersion: "missioncore.nodedc/v1alpha2",
|
||||
@@ -69,6 +75,7 @@ function syntheticPlugin({ pluginId, modelId, componentKey, connectionView }) {
|
||||
},
|
||||
RuntimeProvider: ({ children }) => children,
|
||||
connectionViews: { [componentKey]: connectionView },
|
||||
...(spatialControlsView ? { SpatialControlsView: spatialControlsView } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -98,6 +105,35 @@ test("each device plugin contributes its own connection pipeline component", ()
|
||||
);
|
||||
});
|
||||
|
||||
test("registry exposes an optional model-scoped spatial controls contribution", () => {
|
||||
const connectionView = () => null;
|
||||
const spatialControlsView = () => null;
|
||||
const registry = createDevicePluginRegistry([
|
||||
syntheticPlugin({
|
||||
pluginId: "synthetic.spatial",
|
||||
modelId: "synthetic.spatial.sensor",
|
||||
componentKey: "spatial.connection",
|
||||
connectionView,
|
||||
spatialControlsView,
|
||||
}),
|
||||
syntheticPlugin({
|
||||
pluginId: "synthetic.connection-only",
|
||||
modelId: "synthetic.connection-only.sensor",
|
||||
componentKey: "connection-only.connection",
|
||||
connectionView,
|
||||
}),
|
||||
]);
|
||||
|
||||
assert.equal(
|
||||
registry.resolveModel("synthetic.spatial.sensor").SpatialControlsView,
|
||||
spatialControlsView,
|
||||
);
|
||||
assert.equal(
|
||||
registry.resolveModel("synthetic.connection-only.sensor").SpatialControlsView,
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
|
||||
test("XGRIDS frontend is physically plugin-owned and split by operator pipeline", () => {
|
||||
if (existsSync(legacyPluginRoot)) {
|
||||
assert.deepEqual(readdirSync(legacyPluginRoot), []);
|
||||
@@ -108,10 +144,22 @@ test("XGRIDS frontend is physically plugin-owned and split by operator pipeline"
|
||||
"styles.css",
|
||||
"components/K1ProvisioningPipeline.tsx",
|
||||
"components/K1AcquisitionPipeline.tsx",
|
||||
"components/K1SpatialControls.tsx",
|
||||
"components/K1Diagnostics.tsx",
|
||||
"projectName.ts",
|
||||
]) {
|
||||
assert.equal(existsSync(join(pluginFrontendRoot, relativePath)), true, relativePath);
|
||||
}
|
||||
|
||||
const spatialControls = readFileSync(
|
||||
join(pluginFrontendRoot, "components/K1SpatialControls.tsx"),
|
||||
"utf8",
|
||||
);
|
||||
assert.match(spatialControls, /shouldRenderSpatialControls\(state\)/);
|
||||
assert.match(spatialControls, /cleanup_pending/);
|
||||
assert.match(spatialControls, /spatialActionFailure/);
|
||||
assert.match(spatialControls, /role="alert"/);
|
||||
assert.match(spatialControls, /Повторить остановку/);
|
||||
});
|
||||
|
||||
test("generic Control Station has one composition import and no K1 implementation knowledge", () => {
|
||||
|
||||
Reference in New Issue
Block a user