feat(data-plane): add bounded Gelios telemetry contract
This commit is contained in:
@@ -65,6 +65,40 @@ assert.throws(
|
||||
}, definition),
|
||||
(error) => error?.status === 422 && error?.code === "data_product_field_type_invalid",
|
||||
);
|
||||
|
||||
const telemetryDefinition = normalizeDataProductDefinition({
|
||||
id: "test.telemetry.current.v1",
|
||||
version: "1.0.0",
|
||||
ontologyRevision: "ontology.test.telemetry.v1",
|
||||
deliveryMode: "snapshot+patch",
|
||||
semanticTypes: ["map.moving_object"],
|
||||
fields: ["sensor_readings"],
|
||||
fieldContracts: {
|
||||
sensor_readings: { type: "telemetry_readings", required: false },
|
||||
},
|
||||
history: { mode: "none", retentionDays: 1 },
|
||||
});
|
||||
const validReadings = [{
|
||||
id: "battery.voltage",
|
||||
label: "Battery voltage",
|
||||
value: 51.7,
|
||||
unit: "V",
|
||||
observedAt: "2026-07-22T08:00:00.000Z",
|
||||
}];
|
||||
assert.doesNotThrow(() => assertPublishMatchesDefinition({ facts: [{
|
||||
sourceId: "unit-telemetry",
|
||||
semanticType: "map.moving_object",
|
||||
observedAt: "2026-07-22T08:00:00.000Z",
|
||||
attributes: { sensor_readings: validReadings },
|
||||
}] }, telemetryDefinition));
|
||||
assert.throws(
|
||||
() => assertPublishMatchesDefinition({ facts: [{
|
||||
sourceId: "unit-telemetry",
|
||||
semanticType: "map.moving_object",
|
||||
attributes: { sensor_readings: [{ ...validReadings[0], value: { raw: 51.7 } }] },
|
||||
}] }, telemetryDefinition),
|
||||
(error) => error?.status === 422 && error?.code === "data_product_field_type_invalid",
|
||||
);
|
||||
assert.throws(
|
||||
() => assertPublishMatchesDefinition({
|
||||
facts: [{ ...fact, attributes: { ...fact.attributes, speed_kph: -1 } }],
|
||||
|
||||
@@ -95,6 +95,15 @@ assert.equal(Object.isFrozen(strict.fieldContracts), true);
|
||||
assert.equal(Object.isFrozen(strict.fieldContracts.signal_state), true);
|
||||
assert.equal(Object.isFrozen(strict.fieldContracts.signal_state.enum), true);
|
||||
|
||||
const telemetry = normalizeDataProductDefinition({
|
||||
...input,
|
||||
fields: ["sensor_readings"],
|
||||
fieldContracts: {
|
||||
sensor_readings: { type: "telemetry_readings", required: false },
|
||||
},
|
||||
});
|
||||
assert.equal(telemetry.fieldContracts.sensor_readings.type, "telemetry_readings");
|
||||
|
||||
assert.throws(
|
||||
() => normalizeDataProductDefinition({
|
||||
...input,
|
||||
|
||||
@@ -11,6 +11,7 @@ assert.deepEqual(bundled.map((definition) => definition.id), [
|
||||
"fleet.positions.current.v2",
|
||||
"fleet.positions.current.v3",
|
||||
"fleet.positions.current.v4",
|
||||
"fleet.positions.current.v5",
|
||||
"map.zones.current.v1",
|
||||
"map.zones.current.v2",
|
||||
]);
|
||||
@@ -47,19 +48,23 @@ assert.deepEqual(bundled[3].fieldContracts.movement_state, {
|
||||
required: true,
|
||||
enum: ["moving", "stopped"],
|
||||
});
|
||||
assert.equal(bundled[4].version, "1.0.0");
|
||||
assert.equal(bundled[4].ontologyRevision, "ontology.map.zone.v1");
|
||||
assert.deepEqual(bundled[4].semanticTypes, ["map.zone"]);
|
||||
assert.deepEqual(bundled[4].fieldContracts.geometry, { type: "geometry", required: true });
|
||||
assert.equal(bundled[4].fields.includes("dataset_authority"), false);
|
||||
assert.equal(bundled[5].version, "2.0.0");
|
||||
assert.equal(bundled[4].version, "5.0.0");
|
||||
assert.equal(bundled[4].ontologyRevision, "ontology.map.moving_object.v3");
|
||||
assert.equal(bundled[4].fieldContracts.sensor_readings.type, "telemetry_readings");
|
||||
assert.equal(bundled[5].version, "1.0.0");
|
||||
assert.equal(bundled[5].ontologyRevision, "ontology.map.zone.v1");
|
||||
assert.deepEqual(bundled[5].semanticTypes, ["map.zone"]);
|
||||
assert.deepEqual(bundled[5].fieldContracts.geometry, { type: "geometry", required: true });
|
||||
assert.deepEqual(bundled[5].fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
|
||||
assert.equal(bundled[5].fields.includes("dataset_authority"), false);
|
||||
assert.equal(bundled[6].version, "2.0.0");
|
||||
assert.equal(bundled[6].ontologyRevision, "ontology.map.zone.v1");
|
||||
assert.deepEqual(bundled[6].semanticTypes, ["map.zone"]);
|
||||
assert.deepEqual(bundled[6].fieldContracts.geometry, { type: "geometry", required: true });
|
||||
assert.deepEqual(bundled[6].fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
|
||||
assert.equal(Object.keys(bundled[3].fieldContracts).length, bundled[3].fields.length);
|
||||
assert.equal(Object.keys(bundled[4].fieldContracts).length, bundled[4].fields.length);
|
||||
assert.equal(Object.keys(bundled[5].fieldContracts).length, bundled[5].fields.length);
|
||||
assert.equal(Object.keys(bundled[6].fieldContracts).length, bundled[6].fields.length);
|
||||
|
||||
const directory = await mkdtemp(join(tmpdir(), "nodedc-edp-definitions-"));
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user