feat(provider): add Gelios unit profile product
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { validateProviderCapabilityCatalog } from "../src/index.mjs";
|
||||
import { geliosCapabilityCatalogV1, geliosProviderPackageV7 } from "../providers/gelios/index.mjs";
|
||||
import {
|
||||
geliosCapabilityCatalogV1,
|
||||
geliosCapabilityCatalogV2,
|
||||
geliosProviderPackageV8,
|
||||
} from "../providers/gelios/index.mjs";
|
||||
|
||||
assert.deepEqual(validateProviderCapabilityCatalog(geliosCapabilityCatalogV1), { ok: true, errors: [] });
|
||||
assert.deepEqual(validateProviderCapabilityCatalog(geliosCapabilityCatalogV2), { ok: true, errors: [] });
|
||||
|
||||
const expectedUnitRoots = [
|
||||
"activatedAt", "availableToUsers", "blockTime", "commands", "counters", "createdAt",
|
||||
@@ -20,10 +25,10 @@ const expectedIncludeFlags = [
|
||||
];
|
||||
assert.deepEqual(geliosCapabilityCatalogV1.queryFlags.map(({ id }) => id), expectedIncludeFlags);
|
||||
|
||||
const unitCapability = geliosProviderPackageV7.capabilities.find(({ id }) => id === "gelios.units.current.read");
|
||||
const unitCapability = geliosProviderPackageV8.capabilities.find(({ id }) => id === "gelios.units.current.read");
|
||||
assert.ok(unitCapability);
|
||||
for (const enabledFlag of Object.keys(unitCapability.request.query)) {
|
||||
assert.ok(expectedIncludeFlags.includes(enabledFlag), `v7 query flag is missing from the capability catalog: ${enabledFlag}`);
|
||||
assert.ok(expectedIncludeFlags.includes(enabledFlag), `provider query flag is missing from the capability catalog: ${enabledFlag}`);
|
||||
}
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -34,6 +39,21 @@ assert.equal(
|
||||
geliosCapabilityCatalogV1.capabilities.filter(({ classification }) => classification === "control").every(({ status }) => status === "disabled"),
|
||||
true,
|
||||
);
|
||||
assert.deepEqual(
|
||||
["gelios.unit.identity", "gelios.unit.equipment", "gelios.unit.trip_settings"].map((id) => {
|
||||
const family = geliosCapabilityCatalogV2.dataFamilies.find((item) => item.id === id);
|
||||
return { id, status: family.status, dataProductIds: family.dataProductIds };
|
||||
}),
|
||||
[
|
||||
{ id: "gelios.unit.identity", status: "implemented", dataProductIds: ["fleet.units.profile.current.v1"] },
|
||||
{ id: "gelios.unit.equipment", status: "implemented", dataProductIds: ["fleet.units.profile.current.v1"] },
|
||||
{ id: "gelios.unit.trip_settings", status: "implemented", dataProductIds: ["fleet.units.profile.current.v1"] },
|
||||
],
|
||||
);
|
||||
assert.equal(
|
||||
geliosCapabilityCatalogV2.dataFamilies.find(({ id }) => id === "gelios.unit.sensor_definitions").status,
|
||||
"planned",
|
||||
);
|
||||
|
||||
const restrictedPublish = structuredClone(geliosCapabilityCatalogV1);
|
||||
restrictedPublish.dataFamilies.find(({ id }) => id === "gelios.unit.device_identifiers").disposition = "publish";
|
||||
|
||||
@@ -20,6 +20,7 @@ import { geliosProviderPackageV4 } from "../providers/gelios/v4/index.mjs";
|
||||
import { geliosProviderPackageV5 } from "../providers/gelios/v5/index.mjs";
|
||||
import { geliosProviderPackageV6 } from "../providers/gelios/v6/index.mjs";
|
||||
import { geliosProviderPackageV7 } from "../providers/gelios/v7/index.mjs";
|
||||
import { geliosProviderPackageV8 } from "../providers/gelios/v8/index.mjs";
|
||||
import { normalizeDataProductDefinition } from "../../../services/external-data-plane/src/data-product-policy.mjs";
|
||||
|
||||
const expectedFields = [
|
||||
@@ -45,6 +46,24 @@ assert.deepEqual(validateProviderPackage(geliosProviderPackageV4), { ok: true, e
|
||||
assert.deepEqual(validateProviderPackage(geliosProviderPackageV5), { ok: true, errors: [] });
|
||||
assert.deepEqual(validateProviderPackage(geliosProviderPackageV6), { ok: true, errors: [] });
|
||||
assert.deepEqual(validateProviderPackage(geliosProviderPackageV7), { ok: true, errors: [] });
|
||||
assert.deepEqual(validateProviderPackage(geliosProviderPackageV8), { ok: true, errors: [] });
|
||||
|
||||
const profileProduct = geliosProviderPackageV8.dataProducts.find((product) => product.id === "fleet.units.profile.current.v1");
|
||||
const registeredProfileProduct = JSON.parse(await readFile(new URL(
|
||||
"../../../services/external-data-plane/definitions/fleet.units.profile.current.v1.json",
|
||||
import.meta.url,
|
||||
), "utf8"));
|
||||
assert.deepEqual(profileProduct, registeredProfileProduct);
|
||||
assert.deepEqual(profileProduct.semanticTypes, ["map.moving_object"]);
|
||||
assert.equal(profileProduct.history.mode, "none");
|
||||
const profileCollection = geliosProviderPackageV8.collectionProfiles.find((profile) => profile.id === "gelios.units.profile.cold.v1");
|
||||
assert.equal(profileCollection.schedule.intervalMs, 6 * 60 * 60 * 1000);
|
||||
assert.deepEqual(profileCollection.capabilityIds, ["gelios.units.current.read"]);
|
||||
const profileMapping = geliosProviderPackageV8.mappingContracts.find((mapping) => mapping.id === "gelios.units.to.fleet.units.profile.current.v1");
|
||||
assert.equal(profileMapping.fact.sourceId.prefix, "gelios-unit-");
|
||||
assert.equal(profileMapping.fact.attributes.hardware_type_name.paths[0], "hwType.name");
|
||||
assert.equal(profileMapping.fact.attributes.trip_detection_type.paths[0], "tripParams.tripDetectionType.name");
|
||||
assert.equal(profileMapping.fact.attributes.use_odometer.coerce, "boolean");
|
||||
|
||||
const telemetryProduct = geliosProviderPackageV7.dataProducts.find((product) => product.id === "fleet.positions.current.v5");
|
||||
const registeredTelemetryProduct = JSON.parse(await readFile(new URL(
|
||||
|
||||
Reference in New Issue
Block a user