feat(provider-contract): add classified unit contact aspect

This commit is contained in:
Codex
2026-07-24 09:31:34 +03:00
parent f02a1d4125
commit eab47bc1fa
10 changed files with 501 additions and 31 deletions
@@ -22,6 +22,7 @@ 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 { geliosProviderPackageV9 } from "../providers/gelios/v9/index.mjs";
import { geliosProviderPackageV10 } from "../providers/gelios/v10/index.mjs";
import { normalizeDataProductDefinition } from "../../../services/external-data-plane/src/data-product-policy.mjs";
const expectedFields = [
@@ -49,8 +50,11 @@ assert.deepEqual(validateProviderPackage(geliosProviderPackageV6), { ok: true, e
assert.deepEqual(validateProviderPackage(geliosProviderPackageV7), { ok: true, errors: [] });
assert.deepEqual(validateProviderPackage(geliosProviderPackageV8), { ok: true, errors: [] });
assert.deepEqual(validateProviderPackage(geliosProviderPackageV9), { ok: true, errors: [] });
assert.deepEqual(validateProviderPackage(geliosProviderPackageV10), { ok: true, errors: [] });
assert.equal(geliosProviderPackageV9.id, "gelios.provider.v9");
assert.equal(geliosProviderPackageV9.version, "9.0.0");
assert.equal(geliosProviderPackageV10.id, "gelios.provider.v10");
assert.equal(geliosProviderPackageV10.version, "10.0.0");
assert.equal(geliosProviderPackageV8.id, "gelios.provider.v8");
const profileProduct = geliosProviderPackageV8.dataProducts.find((product) => product.id === "fleet.units.profile.current.v1");
@@ -70,6 +74,38 @@ assert.equal(profileMapping.fact.attributes.hardware_type_name.paths[0], "hwType
assert.equal(profileMapping.fact.attributes.trip_detection_type.paths[0], "tripParams.tripDetectionType.name");
assert.equal(profileMapping.fact.attributes.use_odometer.coerce, "boolean");
const contactsProduct = geliosProviderPackageV10.dataProducts.find(
(product) => product.id === "fleet.units.contacts.current.v1",
);
const registeredContactsProduct = JSON.parse(await readFile(new URL(
"../../../services/external-data-plane/definitions/fleet.units.contacts.current.v1.json",
import.meta.url,
), "utf8"));
assert.deepEqual(contactsProduct, registeredContactsProduct);
const contactsMapping = geliosProviderPackageV10.mappingContracts.find(
(mapping) => mapping.id === "gelios.units.to.fleet.units.contacts.current.v1",
);
assert.deepEqual(contactsMapping.fact.attributes.device_imei, {
strategy: "first_non_empty",
paths: ["imei"],
coerce: "string",
omitIfMissing: true,
guardPath: "imeiIsVisible",
guardEquals: true,
});
assert.equal(contactsMapping.fact.attributes.device_phone_primary.guardPath, "phoneIsVisible");
assert.equal(contactsMapping.fact.attributes.device_phone_secondary.guardPath, "phone2IsVisible");
assert.equal(contactsMapping.fact.attributes.provider_creator_login.paths[0], "creator.login");
const incompleteGuard = structuredClone(geliosProviderPackageV10);
delete incompleteGuard.mappingContracts.at(-1).fact.attributes.device_imei.guardEquals;
assert.equal(
validateProviderPackage(incompleteGuard).errors.some(
(error) => error.endsWith("guard_requires_path_and_equals"),
),
true,
);
const telemetryProduct = geliosProviderPackageV7.dataProducts.find((product) => product.id === "fleet.positions.current.v5");
const registeredTelemetryProduct = JSON.parse(await readFile(new URL(
"../../../services/external-data-plane/definitions/fleet.positions.current.v5.json",