import assert from "node:assert/strict"; import { validateProviderCapabilityCatalog } from "../src/index.mjs"; import { geliosCapabilityCatalogV1, geliosProviderPackageV7 } from "../providers/gelios/index.mjs"; assert.deepEqual(validateProviderCapabilityCatalog(geliosCapabilityCatalogV1), { ok: true, errors: [] }); const expectedUnitRoots = [ "activatedAt", "availableToUsers", "blockTime", "commands", "counters", "createdAt", "creator", "currentUserAccess", "customFields", "driver", "extraInfo", "fuelParams", "hwDecryptKey", "hwManufacturer", "hwType", "id", "imei", "imeiIsVisible", "isBlock", "isFree", "lastMsg", "lastSensorsVal", "maintenancePlan", "name", "phone", "phone2", "phone2IsVisible", "phoneIsVisible", "preSetCommandGroup", "removed", "removedAt", "sensors", "stationaryLat", "stationaryLon", "storageInfo", "tripParams", "unblockTime", "unitType", ]; assert.deepEqual(geliosCapabilityCatalogV1.coverage.sourceRoots, expectedUnitRoots); const expectedIncludeFlags = [ "inclextra", "incltrip", "inclfuel", "inclcntrs", "inclcstmflds", "inclsnsrs", "inclcmmnds", "incldrvrs", "inclstinf", "inclusersav", "incllsv", "inclplan", ]; assert.deepEqual(geliosCapabilityCatalogV1.queryFlags.map(({ id }) => id), expectedIncludeFlags); const unitCapability = geliosProviderPackageV7.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.deepEqual( geliosCapabilityCatalogV1.capabilities.filter(({ status }) => status === "implemented").map(({ id }) => id), ["gelios.units.current.read", "gelios.geozones.current.read"], ); assert.equal( geliosCapabilityCatalogV1.capabilities.filter(({ classification }) => classification === "control").every(({ status }) => status === "disabled"), true, ); const restrictedPublish = structuredClone(geliosCapabilityCatalogV1); restrictedPublish.dataFamilies.find(({ id }) => id === "gelios.unit.device_identifiers").disposition = "publish"; restrictedPublish.dataFamilies.find(({ id }) => id === "gelios.unit.device_identifiers").dataProductIds = ["unsafe.identifiers.current.v1"]; assert.equal(validateProviderCapabilityCatalog(restrictedPublish).ok, false); const missingCoverage = structuredClone(geliosCapabilityCatalogV1); missingCoverage.dataFamilies.find(({ id }) => id === "gelios.unit.identity").sourcePaths = ["name", "unitType.id"]; assert.ok(validateProviderCapabilityCatalog(missingCoverage).errors.includes("coverage.source_root_unaccounted:id")); const enabledControl = structuredClone(geliosCapabilityCatalogV1); enabledControl.capabilities.find(({ id }) => id === "gelios.unit.command.send").status = "catalogued"; assert.equal(validateProviderCapabilityCatalog(enabledControl).ok, false); console.log("Gelios provider capability catalog: ok");