@x12i/memorix-descriptors 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +2 -2
  2. package/dist/catalog/ensure-catalogs.d.ts.map +1 -1
  3. package/dist/catalog/ensure-catalogs.js +9 -1
  4. package/dist/catalog/ensure-catalogs.js.map +1 -1
  5. package/dist/catalog/ids.d.ts +3 -0
  6. package/dist/catalog/ids.d.ts.map +1 -1
  7. package/dist/catalog/ids.js +6 -0
  8. package/dist/catalog/ids.js.map +1 -1
  9. package/dist/index.d.ts +3 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/migration/object-type-specs.d.ts.map +1 -1
  14. package/dist/migration/object-type-specs.js +5 -0
  15. package/dist/migration/object-type-specs.js.map +1 -1
  16. package/dist/types/abstraction-index.d.ts +2 -0
  17. package/dist/types/abstraction-index.d.ts.map +1 -0
  18. package/dist/types/abstraction-index.js +2 -0
  19. package/dist/types/abstraction-index.js.map +1 -0
  20. package/dist/types/abstraction.d.ts +84 -0
  21. package/dist/types/abstraction.d.ts.map +1 -0
  22. package/dist/types/abstraction.js +2 -0
  23. package/dist/types/abstraction.js.map +1 -0
  24. package/dist/validation/abstract-validation.d.ts +6 -0
  25. package/dist/validation/abstract-validation.d.ts.map +1 -0
  26. package/dist/validation/abstract-validation.js +192 -0
  27. package/dist/validation/abstract-validation.js.map +1 -0
  28. package/package.json +15 -4
  29. package/dist/tests/canonical-metadata.test.d.ts +0 -2
  30. package/dist/tests/canonical-metadata.test.d.ts.map +0 -1
  31. package/dist/tests/canonical-metadata.test.js +0 -197
  32. package/dist/tests/canonical-metadata.test.js.map +0 -1
  33. package/dist/tests/descriptor-lookup.test.d.ts +0 -2
  34. package/dist/tests/descriptor-lookup.test.d.ts.map +0 -1
  35. package/dist/tests/descriptor-lookup.test.js +0 -44
  36. package/dist/tests/descriptor-lookup.test.js.map +0 -1
  37. package/dist/tests/execute-mutation.test.d.ts +0 -2
  38. package/dist/tests/execute-mutation.test.d.ts.map +0 -1
  39. package/dist/tests/execute-mutation.test.js +0 -57
  40. package/dist/tests/execute-mutation.test.js.map +0 -1
  41. package/dist/tests/identity-cardinality.test.d.ts +0 -2
  42. package/dist/tests/identity-cardinality.test.d.ts.map +0 -1
  43. package/dist/tests/identity-cardinality.test.js +0 -41
  44. package/dist/tests/identity-cardinality.test.js.map +0 -1
  45. package/dist/tests/integrity.test.d.ts +0 -2
  46. package/dist/tests/integrity.test.d.ts.map +0 -1
  47. package/dist/tests/integrity.test.js +0 -49
  48. package/dist/tests/integrity.test.js.map +0 -1
  49. package/dist/tests/live/catalox.live.test.d.ts +0 -2
  50. package/dist/tests/live/catalox.live.test.d.ts.map +0 -1
  51. package/dist/tests/live/catalox.live.test.js +0 -111
  52. package/dist/tests/live/catalox.live.test.js.map +0 -1
  53. package/dist/tests/mutations.test.d.ts +0 -2
  54. package/dist/tests/mutations.test.d.ts.map +0 -1
  55. package/dist/tests/mutations.test.js +0 -99
  56. package/dist/tests/mutations.test.js.map +0 -1
  57. package/dist/tests/reconcile-drafts.test.d.ts +0 -2
  58. package/dist/tests/reconcile-drafts.test.d.ts.map +0 -1
  59. package/dist/tests/reconcile-drafts.test.js +0 -69
  60. package/dist/tests/reconcile-drafts.test.js.map +0 -1
  61. package/dist/tests/reconcile-unified.test.d.ts +0 -2
  62. package/dist/tests/reconcile-unified.test.d.ts.map +0 -1
  63. package/dist/tests/reconcile-unified.test.js +0 -223
  64. package/dist/tests/reconcile-unified.test.js.map +0 -1
  65. package/dist/tests/retrieval-free-subpaths.test.d.ts +0 -2
  66. package/dist/tests/retrieval-free-subpaths.test.d.ts.map +0 -1
  67. package/dist/tests/retrieval-free-subpaths.test.js +0 -27
  68. package/dist/tests/retrieval-free-subpaths.test.js.map +0 -1
  69. package/dist/tests/seeds.test.d.ts +0 -2
  70. package/dist/tests/seeds.test.d.ts.map +0 -1
  71. package/dist/tests/seeds.test.js +0 -59
  72. package/dist/tests/seeds.test.js.map +0 -1
  73. package/dist/tests/slice-inventory.test.d.ts +0 -2
  74. package/dist/tests/slice-inventory.test.d.ts.map +0 -1
  75. package/dist/tests/slice-inventory.test.js +0 -104
  76. package/dist/tests/slice-inventory.test.js.map +0 -1
  77. package/dist/tests/source-aware.test.d.ts +0 -2
  78. package/dist/tests/source-aware.test.d.ts.map +0 -1
  79. package/dist/tests/source-aware.test.js +0 -227
  80. package/dist/tests/source-aware.test.js.map +0 -1
  81. package/dist/tests/unified-inventory.test.d.ts +0 -2
  82. package/dist/tests/unified-inventory.test.d.ts.map +0 -1
  83. package/dist/tests/unified-inventory.test.js +0 -59
  84. package/dist/tests/unified-inventory.test.js.map +0 -1
  85. package/dist/tests/validation.test.d.ts +0 -2
  86. package/dist/tests/validation.test.d.ts.map +0 -1
  87. package/dist/tests/validation.test.js +0 -55
  88. package/dist/tests/validation.test.js.map +0 -1
  89. package/dist/tests/write-descriptor.test.d.ts +0 -2
  90. package/dist/tests/write-descriptor.test.d.ts.map +0 -1
  91. package/dist/tests/write-descriptor.test.js +0 -75
  92. package/dist/tests/write-descriptor.test.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=canonical-metadata.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonical-metadata.test.d.ts","sourceRoot":"","sources":["../../src/tests/canonical-metadata.test.ts"],"names":[],"mappings":""}
@@ -1,197 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { MEMORIX_COMPLETION_MAPPINGS_CATALOG, MEMORIX_INVENTORY_POLICIES_CATALOG, MEMORIX_INVENTORY_POLICY_ITEM_ID, MEMORIX_ITEM_DESCRIPTORS_CATALOG, MEMORIX_LIST_DESCRIPTORS_CATALOG, MEMORIX_OBJECT_TYPE_DESCRIPTORS_CATALOG, } from "../catalog/ids.js";
3
- import { buildCanonicalDescriptorSet } from "../migration/generate-descriptors.js";
4
- import { validateCanonicalMemorixCataloxMetadata } from "../validation/canonical-metadata-validation.js";
5
- import { validateMemorixCompletionMappingV2, validateMemorixInventoryPolicyV1, validateMemorixItemDescriptorV2, validateMemorixListDescriptorV2, validateMemorixObjectTypeDescriptorV2, } from "../validation/canonical-v2-validation.js";
6
- import { DescriptorValidationError } from "../validation/errors.js";
7
- import { findContaminationInDescriptorData } from "../validation/canonical-contamination.js";
8
- import { COMPLETION_MAPPING_SCHEMA_V2, OBJECT_TYPE_DESCRIPTOR_SCHEMA_V2, } from "../types/canonical-v2.js";
9
- function canonicalSnapshotFromGenerated() {
10
- const generated = buildCanonicalDescriptorSet();
11
- return {
12
- appId: "memorix",
13
- catalogs: {
14
- [MEMORIX_OBJECT_TYPE_DESCRIPTORS_CATALOG]: Object.entries(generated.objectTypes).map(([id, data]) => ({ id, data })),
15
- [MEMORIX_LIST_DESCRIPTORS_CATALOG]: Object.entries(generated.lists).map(([id, data]) => ({
16
- id,
17
- data,
18
- })),
19
- [MEMORIX_ITEM_DESCRIPTORS_CATALOG]: Object.entries(generated.items).map(([id, data]) => ({
20
- id,
21
- data,
22
- })),
23
- [MEMORIX_COMPLETION_MAPPINGS_CATALOG]: Object.entries(generated.completionMappings).map(([id, data]) => ({ id, data })),
24
- [MEMORIX_INVENTORY_POLICIES_CATALOG]: [
25
- { id: MEMORIX_INVENTORY_POLICY_ITEM_ID, data: generated.inventoryPolicy },
26
- ],
27
- },
28
- };
29
- }
30
- describe("canonical v2 validators", () => {
31
- it("accepts strict object type descriptor schema", () => {
32
- const generated = buildCanonicalDescriptorSet();
33
- expect(() => validateMemorixObjectTypeDescriptorV2(generated.objectTypes.assets)).not.toThrow();
34
- expect(generated.objectTypes.assets).toMatchObject({
35
- schemaVersion: OBJECT_TYPE_DESCRIPTOR_SCHEMA_V2,
36
- objectType: "assets",
37
- });
38
- });
39
- it("rejects entityName", () => {
40
- const generated = buildCanonicalDescriptorSet();
41
- const raw = { ...generated.objectTypes.assets, entityName: "assets" };
42
- expect(() => validateMemorixObjectTypeDescriptorV2(raw)).toThrow(DescriptorValidationError);
43
- });
44
- it("rejects entity field on list descriptors", () => {
45
- const generated = buildCanonicalDescriptorSet();
46
- const objectTypes = Object.fromEntries(Object.entries(generated.objectTypes).map(([id, data]) => [
47
- id,
48
- validateMemorixObjectTypeDescriptorV2(data),
49
- ]));
50
- expect(() => validateMemorixListDescriptorV2({ ...generated.lists["assets-main-list"], entity: "assets", kind: "entity" }, objectTypes)).toThrow(DescriptorValidationError);
51
- });
52
- it("rejects entityType on completion mappings", () => {
53
- const generated = buildCanonicalDescriptorSet();
54
- const objectTypes = Object.fromEntries(Object.entries(generated.objectTypes).map(([id, data]) => [
55
- id,
56
- validateMemorixObjectTypeDescriptorV2(data),
57
- ]));
58
- expect(() => validateMemorixCompletionMappingV2({
59
- schemaVersion: COMPLETION_MAPPING_SCHEMA_V2,
60
- id: "example",
61
- name: "Example",
62
- entityType: "vulnerabilities",
63
- target: "event",
64
- targetCollection: "vulnerabilities-snapshots",
65
- targetSelector: { sourceCollection: "vulnerabilities-information", idField: "vulnerabilityId" },
66
- source: { databaseName: "source-db", collection: "vulnerabilities-information" },
67
- match: { targetPath: "entityId", sourcePath: "vulnerabilityId" },
68
- writeRoot: "data",
69
- fields: [],
70
- }, objectTypes)).toThrow(DescriptorValidationError);
71
- });
72
- it("rejects targetEntity in relations", () => {
73
- const generated = buildCanonicalDescriptorSet();
74
- const raw = {
75
- ...generated.objectTypes.assets,
76
- relations: {
77
- linked: {
78
- targetEntity: "subnets",
79
- type: "oneToMany",
80
- source: { contentType: "snapshots", path: "data.linked" },
81
- target: { contentType: "snapshots", path: "entityId" },
82
- },
83
- },
84
- };
85
- expect(() => validateMemorixObjectTypeDescriptorV2(raw)).toThrow(DescriptorValidationError);
86
- });
87
- it("rejects v1 schemaVersion", () => {
88
- const hits = findContaminationInDescriptorData({
89
- schemaVersion: "memorix.entity-descriptor.v1",
90
- id: "assets",
91
- });
92
- expect(hits.some((hit) => hit.path === "schemaVersion")).toBe(true);
93
- });
94
- it("rejects runtime JSON contamination", () => {
95
- const hits = findContaminationInDescriptorData({
96
- schemaVersion: OBJECT_TYPE_DESCRIPTOR_SCHEMA_V2,
97
- framework: "narratives-ui-framework",
98
- canvas: { nodes: [] },
99
- });
100
- expect(hits.length).toBeGreaterThan(0);
101
- });
102
- it("validates inventory policy v1", () => {
103
- const generated = buildCanonicalDescriptorSet();
104
- expect(() => validateMemorixInventoryPolicyV1(generated.inventoryPolicy)).not.toThrow();
105
- });
106
- it("validates item descriptor v2", () => {
107
- const generated = buildCanonicalDescriptorSet();
108
- const objectTypes = Object.fromEntries(Object.entries(generated.objectTypes).map(([id, data]) => [
109
- id,
110
- validateMemorixObjectTypeDescriptorV2(data),
111
- ]));
112
- expect(() => validateMemorixItemDescriptorV2(generated.items["asset-detail-item"], objectTypes)).not.toThrow();
113
- });
114
- });
115
- describe("validateCanonicalMemorixCataloxMetadata", () => {
116
- it("passes generated canonical descriptor set", () => {
117
- const report = validateCanonicalMemorixCataloxMetadata(canonicalSnapshotFromGenerated());
118
- expect(report.ok).toBe(true);
119
- expect(report.errors).toHaveLength(0);
120
- });
121
- it("fails when legacy catalog is present in final state", () => {
122
- const snapshot = canonicalSnapshotFromGenerated();
123
- snapshot.catalogs["memorix-entity-descriptors"] = [
124
- { id: "assets", data: { entityName: "assets" } },
125
- ];
126
- const report = validateCanonicalMemorixCataloxMetadata(snapshot);
127
- expect(report.ok).toBe(false);
128
- expect(report.errors.some((error) => error.code === "LEGACY_CATALOG_PRESENT")).toBe(true);
129
- });
130
- it("fails for variabilities-groups legacy ids", () => {
131
- const snapshot = canonicalSnapshotFromGenerated();
132
- snapshot.catalogs[MEMORIX_OBJECT_TYPE_DESCRIPTORS_CATALOG].push({
133
- id: "variabilities-groups",
134
- data: { objectType: "variabilities-groups" },
135
- });
136
- const report = validateCanonicalMemorixCataloxMetadata(snapshot);
137
- expect(report.ok).toBe(false);
138
- expect(report.errors.some((error) => error.code === "FORBIDDEN_LEGACY_ITEM_ID")).toBe(true);
139
- });
140
- it("includes vulnerabilities-groups and critical-vulnerabilities-slice in generated set", () => {
141
- const generated = buildCanonicalDescriptorSet();
142
- expect(generated.objectTypes["vulnerabilities-groups"]).toBeDefined();
143
- expect(generated.lists["critical-vulnerabilities-slice"]).toMatchObject({
144
- kind: "slice",
145
- id: "critical-vulnerabilities-slice",
146
- });
147
- expect(generated.lists["critical-vulnerabilities-list"]).toBeUndefined();
148
- });
149
- });
150
- describe("collection name parsing integration", () => {
151
- it("maps topology-cidr-graphs-snapshots to object type and content type", async () => {
152
- const { parseObjectTypeFromCollection } = await import("../migration/mongo-inventory.js");
153
- expect(parseObjectTypeFromCollection("topology-cidr-graphs-snapshots")).toEqual({
154
- objectType: "topology-cidr-graphs",
155
- contentType: "snapshots",
156
- });
157
- });
158
- });
159
- describe("migration plan", () => {
160
- it("creates plan with canonical upserts and legacy deletes", async () => {
161
- const { buildMemorixCataloxMetadataFixPlan } = await import("../migration/plan.js");
162
- const catalox = {
163
- ensureCatalog: async () => undefined,
164
- listCatalogItems: async (catalogId) => ({
165
- listOutcome: "ok",
166
- items: catalogId === "memorix-entity-descriptors"
167
- ? [{ itemId: "variabilities-groups", data: { entityName: "variabilities-groups" } }]
168
- : catalogId === "memorix-list-descriptors"
169
- ? [{ itemId: "critical-vulnerabilities-list", data: { kind: "entity", entity: "vulnerabilities" } }]
170
- : [],
171
- nextCursor: undefined,
172
- }),
173
- getCatalogItem: async () => ({ outcome: "not_found" }),
174
- upsertNativeCatalogItem: async () => undefined,
175
- deleteNativeCatalogItem: async () => undefined,
176
- };
177
- const prevMongoUri = process.env.MONGO_URI;
178
- delete process.env.MONGO_URI;
179
- let plan;
180
- try {
181
- plan = await buildMemorixCataloxMetadataFixPlan(catalox, {
182
- knowledgeCatalogPolicy: "leave-untouched",
183
- });
184
- }
185
- finally {
186
- if (prevMongoUri !== undefined)
187
- process.env.MONGO_URI = prevMongoUri;
188
- }
189
- expect(plan.createCatalogs.some((c) => c.catalogId === "memorix-object-type-descriptors")).toBe(true);
190
- expect(plan.deleteCatalogs).toContain("memorix-entity-descriptors");
191
- expect(plan.deleteItems.some((item) => item.itemId === "variabilities-groups")).toBe(true);
192
- expect(plan.deleteItems.some((item) => item.itemId === "critical-vulnerabilities-list")).toBe(true);
193
- expect(plan.upsertItems.some((item) => item.itemId === "vulnerabilities-groups")).toBe(true);
194
- expect(plan.upsertItems.some((item) => item.itemId === "critical-vulnerabilities-slice")).toBe(true);
195
- });
196
- });
197
- //# sourceMappingURL=canonical-metadata.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonical-metadata.test.js","sourceRoot":"","sources":["../../src/tests/canonical-metadata.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=descriptor-lookup.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"descriptor-lookup.test.d.ts","sourceRoot":"","sources":["../../src/tests/descriptor-lookup.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { MEMORIX_CATALOG_IDS, catalogIdForSnapshotSection, isMemorixDescriptorCatalogId, snapshotSectionForCatalogId, } from "../catalog/ids.js";
3
- import { getDescriptorFromSnapshot, getEntityDescriptorFromSnapshot, getItemDescriptorFromSnapshot, getListDescriptorFromSnapshot, listDescriptorIdsFromSnapshot, } from "../store/descriptor-lookup.js";
4
- import { sampleSnapshot } from "./fixtures.js";
5
- describe("MEMORIX_CATALOG_IDS", () => {
6
- it("maps snapshot sections to runtime Catalox catalog ids", () => {
7
- expect(MEMORIX_CATALOG_IDS.entityDescriptors).toBe("memorix-object-type-descriptors");
8
- expect(MEMORIX_CATALOG_IDS.listDescriptors).toBe("memorix-list-descriptors");
9
- expect(MEMORIX_CATALOG_IDS.itemDescriptors).toBe("memorix-item-descriptors");
10
- });
11
- it("round-trips snapshot section and catalog id", () => {
12
- for (const section of ["entityDescriptors", "listDescriptors", "itemDescriptors"]) {
13
- const catalogId = catalogIdForSnapshotSection(section);
14
- expect(snapshotSectionForCatalogId(catalogId)).toBe(section);
15
- expect(isMemorixDescriptorCatalogId(catalogId)).toBe(true);
16
- }
17
- });
18
- it("rejects unknown catalog ids", () => {
19
- expect(isMemorixDescriptorCatalogId("memorix-object-type-descriptors")).toBe(true);
20
- expect(isMemorixDescriptorCatalogId("memorix-entity-descriptors")).toBe(false);
21
- expect(isMemorixDescriptorCatalogId("unknown")).toBe(false);
22
- });
23
- });
24
- describe("descriptor snapshot lookup", () => {
25
- const snapshot = sampleSnapshot();
26
- it("gets items by catalog id", () => {
27
- expect(getDescriptorFromSnapshot(snapshot, MEMORIX_CATALOG_IDS.entityDescriptors, "assets")).toMatchObject({ entityName: "assets" });
28
- expect(getDescriptorFromSnapshot(snapshot, MEMORIX_CATALOG_IDS.listDescriptors, "assets-main-list")).toMatchObject({ id: "assets-main-list" });
29
- expect(getDescriptorFromSnapshot(snapshot, MEMORIX_CATALOG_IDS.itemDescriptors, "asset-detail-item")).toMatchObject({ id: "asset-detail-item" });
30
- expect(getDescriptorFromSnapshot(snapshot, MEMORIX_CATALOG_IDS.entityDescriptors, "missing")).toBeNull();
31
- });
32
- it("gets typed entity, list, and item descriptors", () => {
33
- expect(getEntityDescriptorFromSnapshot(snapshot, "assets")?.entityName).toBe("assets");
34
- expect(getListDescriptorFromSnapshot(snapshot, "assets-main-list")?.id).toBe("assets-main-list");
35
- expect(getItemDescriptorFromSnapshot(snapshot, "asset-detail-item")?.entity).toBe("assets");
36
- expect(getEntityDescriptorFromSnapshot(snapshot, "missing")).toBeNull();
37
- });
38
- it("lists descriptor ids per snapshot section", () => {
39
- expect(listDescriptorIdsFromSnapshot(snapshot, "entityDescriptors")).toEqual(["assets"]);
40
- expect(listDescriptorIdsFromSnapshot(snapshot, "listDescriptors")).toEqual(["assets-main-list"]);
41
- expect(listDescriptorIdsFromSnapshot(snapshot, "itemDescriptors")).toEqual(["asset-detail-item"]);
42
- });
43
- });
44
- //# sourceMappingURL=descriptor-lookup.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"descriptor-lookup.test.js","sourceRoot":"","sources":["../../src/tests/descriptor-lookup.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=execute-mutation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-mutation.test.d.ts","sourceRoot":"","sources":["../../src/tests/execute-mutation.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { executeDescriptorMutation } from "../admin/execute-mutation.js";
3
- import { sampleSnapshot } from "./fixtures.js";
4
- function mockAdmin(snapshot = sampleSnapshot()) {
5
- return {
6
- registerEntityDescriptor: async (input, options) => ({
7
- ok: true,
8
- graphValid: true,
9
- dryRun: Boolean(options?.dryRun),
10
- warnings: [],
11
- errors: [],
12
- cataloxWrites: [],
13
- integrity: {
14
- valid: true,
15
- counts: {
16
- entityDescriptors: 0,
17
- listDescriptors: 0,
18
- itemDescriptors: 0,
19
- completionMappings: 0,
20
- },
21
- errors: [],
22
- warnings: [],
23
- orphans: { collections: [], danglingReferences: [] },
24
- },
25
- data: { entityName: input.entityName },
26
- }),
27
- };
28
- }
29
- describe("executeDescriptorMutation", () => {
30
- it("dispatches known operations to admin methods", async () => {
31
- const admin = mockAdmin();
32
- const result = await executeDescriptorMutation(admin, {
33
- operation: "registerEntityDescriptor",
34
- input: {
35
- entityName: "impact-stories",
36
- target: "knowledge",
37
- collectionPrefix: "impact-stories",
38
- canonicalContentType: {
39
- key: "narratives",
40
- postfix: "narratives",
41
- },
42
- },
43
- options: { dryRun: true },
44
- });
45
- expect(result.ok).toBe(true);
46
- });
47
- it("returns UNKNOWN_OPERATION for unsupported operations", async () => {
48
- const admin = mockAdmin();
49
- const result = await executeDescriptorMutation(admin, {
50
- operation: "not-a-real-operation",
51
- input: {},
52
- });
53
- expect(result.ok).toBe(false);
54
- expect(result.errors[0]?.code).toBe("UNKNOWN_OPERATION");
55
- });
56
- });
57
- //# sourceMappingURL=execute-mutation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-mutation.test.js","sourceRoot":"","sources":["../../src/tests/execute-mutation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,SAAS,SAAS,CAAC,QAAQ,GAAG,cAAc,EAAE;IAC5C,OAAO;QACL,wBAAwB,EAAE,KAAK,EAC7B,KAA6B,EAC7B,OAA8B,EAC9B,EAAE,CAAC,CAAC;YACJ,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;YAChC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE;oBACN,iBAAiB,EAAE,CAAC;oBACpB,eAAe,EAAE,CAAC;oBAClB,eAAe,EAAE,CAAC;oBAClB,kBAAkB,EAAE,CAAC;iBACtB;gBACD,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE;aACrD;YACD,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACvC,CAAC;KACkC,CAAC;AACzC,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE;YACpD,SAAS,EAAE,0BAA0B;YACrC,KAAK,EAAE;gBACL,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,WAAW;gBACnB,gBAAgB,EAAE,gBAAgB;gBAClC,oBAAoB,EAAE;oBACpB,GAAG,EAAE,YAAY;oBACjB,OAAO,EAAE,YAAY;iBACtB;aACF;YACD,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE;YACpD,SAAS,EAAE,sBAAsB;YACjC,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=identity-cardinality.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-cardinality.test.d.ts","sourceRoot":"","sources":["../../src/tests/identity-cardinality.test.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { resolveEntityIdentityField } from "../catalog/ids.js";
3
- import { resolveContentTypeCardinality } from "../collections/content-type-defaults.js";
4
- import { buildObjectTypeDescriptor } from "../migration/generate-descriptors.js";
5
- import { CANONICAL_OBJECT_TYPE_SPECS } from "../migration/object-type-specs.js";
6
- describe("resolveEntityIdentityField", () => {
7
- it("returns target default when identityField omitted", () => {
8
- expect(resolveEntityIdentityField({ target: "entity" })).toBe("entityId");
9
- expect(resolveEntityIdentityField({ target: "event" })).toBe("eventId");
10
- expect(resolveEntityIdentityField({ target: "knowledge" })).toBe("knowledgeId");
11
- });
12
- it("returns explicit identityField when set", () => {
13
- expect(resolveEntityIdentityField({
14
- target: "entity",
15
- identityField: "subnetId",
16
- })).toBe("subnetId");
17
- });
18
- });
19
- describe("resolveContentTypeCardinality", () => {
20
- it("defaults snapshots and core to 1:1", () => {
21
- expect(resolveContentTypeCardinality({ postfix: "snapshots" }, "snapshots")).toBe("1:1");
22
- expect(resolveContentTypeCardinality({ postfix: "core" }, "core")).toBe("1:1");
23
- });
24
- it("defaults other postfixes to 1:n", () => {
25
- expect(resolveContentTypeCardinality({ postfix: "scoped" }, "scoped")).toBe("1:n");
26
- expect(resolveContentTypeCardinality({ postfix: "enrichment" }, "enrichment")).toBe("1:n");
27
- });
28
- it("respects explicit cardinality on descriptor", () => {
29
- expect(resolveContentTypeCardinality({ postfix: "scoped", cardinality: "1:1" }, "scoped")).toBe("1:1");
30
- });
31
- });
32
- describe("buildObjectTypeDescriptor", () => {
33
- it("sets identityField and cardinality for subnets", () => {
34
- const spec = CANONICAL_OBJECT_TYPE_SPECS.find((s) => s.objectType === "subnets");
35
- const descriptor = buildObjectTypeDescriptor(spec);
36
- expect(descriptor.identityField).toBe("subnetId");
37
- expect(descriptor.contentTypes.snapshots?.cardinality).toBe("1:1");
38
- expect(descriptor.contentTypes.scoped?.cardinality).toBe("1:n");
39
- });
40
- });
41
- //# sourceMappingURL=identity-cardinality.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-cardinality.test.js","sourceRoot":"","sources":["../../src/tests/identity-cardinality.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEhF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CACJ,0BAA0B,CAAC;YACzB,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,UAAU;SAC1B,CAAC,CACH,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CACJ,6BAA6B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,CACrE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,MAAM,CAAC,6BAA6B,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CACJ,6BAA6B,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAC/D,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,MAAM,CACJ,6BAA6B,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,YAAY,CAAC,CACvE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CACJ,6BAA6B,CAC3B,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EACzC,QAAQ,CACT,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAE,CAAC;QAClF,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAGhD,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=integrity.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrity.test.d.ts","sourceRoot":"","sources":["../../src/tests/integrity.test.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { validateDescriptorSnapshot } from "../integrity/validate.js";
3
- import { assetsEntityFixture, sampleSnapshot } from "./fixtures.js";
4
- describe("validateDescriptorSnapshot", () => {
5
- it("accepts a connected minimal graph", () => {
6
- const report = validateDescriptorSnapshot(sampleSnapshot());
7
- expect(report.valid).toBe(true);
8
- expect(report.errors).toHaveLength(0);
9
- });
10
- it("flags missing default list descriptor", () => {
11
- const snapshot = sampleSnapshot();
12
- snapshot.entityDescriptors.assets = {
13
- ...assetsEntityFixture,
14
- defaultListDescriptorId: "missing-list",
15
- };
16
- const report = validateDescriptorSnapshot(snapshot);
17
- expect(report.valid).toBe(false);
18
- expect(report.errors.some((e) => e.code === "MISSING_DEFAULT_LIST")).toBe(true);
19
- });
20
- it("flags non-human-readable list fields", () => {
21
- const snapshot = sampleSnapshot();
22
- snapshot.listDescriptors["assets-main-list"] = {
23
- ...snapshot.listDescriptors["assets-main-list"],
24
- fields: ["hostName"],
25
- };
26
- const report = validateDescriptorSnapshot(snapshot);
27
- expect(report.valid).toBe(false);
28
- expect(report.errors.some((e) => e.code === "NON_HUMAN_READABLE_LIST_FIELD" ||
29
- e.code === "INVALID_LIST_DESCRIPTOR")).toBe(true);
30
- });
31
- it("flags unknown relation target", () => {
32
- const snapshot = sampleSnapshot();
33
- snapshot.entityDescriptors.assets = {
34
- ...assetsEntityFixture,
35
- relations: {
36
- toMissing: {
37
- targetEntity: "not-real",
38
- type: "oneToMany",
39
- source: { contentType: "snapshots", path: "data.id" },
40
- target: { contentType: "snapshots", path: "data.id" },
41
- },
42
- },
43
- };
44
- const report = validateDescriptorSnapshot(snapshot);
45
- expect(report.valid).toBe(false);
46
- expect(report.orphans.danglingReferences.length).toBeGreaterThan(0);
47
- });
48
- });
49
- //# sourceMappingURL=integrity.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrity.test.js","sourceRoot":"","sources":["../../src/tests/integrity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,0BAA0B,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG;YAClC,GAAG,mBAAmB;YACtB,uBAAuB,EAAE,cAAc;SACxC,CAAC;QACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAAC,GAAG;YAC7C,GAAG,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAAE;YAChD,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB,CAAC;QACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CACJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,+BAA+B;YAC1C,CAAC,CAAC,IAAI,KAAK,yBAAyB,CACvC,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG;YAClC,GAAG,mBAAmB;YACtB,SAAS,EAAE;gBACT,SAAS,EAAE;oBACT,YAAY,EAAE,UAAU;oBACxB,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrD,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;iBACtD;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=catalox.live.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalox.live.test.d.ts","sourceRoot":"","sources":["../../../src/tests/live/catalox.live.test.ts"],"names":[],"mappings":""}
@@ -1,111 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { MEMORIX_OBJECT_TYPE_DESCRIPTORS_CATALOG, MEMORIX_ITEM_DESCRIPTORS_CATALOG, MEMORIX_LIST_DESCRIPTORS_CATALOG, } from "../../catalog/ids.js";
3
- import { createLiveAdmin, isLiveTestsEnabled, liveSkipReason, smokeEntityName, } from "../helpers/live.js";
4
- import { createMemorixDescriptorAdminFromEnv } from "../../admin/create-admin.js";
5
- const live = isLiveTestsEnabled();
6
- const skipReason = liveSkipReason() ?? undefined;
7
- describe.runIf(live)("live catalox / memorix-descriptors", () => {
8
- it("loads admin and validates deployed descriptor graph", async () => {
9
- const admin = await createLiveAdmin();
10
- const report = await admin.validateMemorixDescriptors();
11
- expect(report.counts.entityDescriptors).toBeGreaterThan(0);
12
- expect(report.counts.listDescriptors).toBeGreaterThan(0);
13
- expect(report.counts.itemDescriptors).toBeGreaterThan(0);
14
- if (!report.valid) {
15
- console.warn("Integrity warnings/errors (graph may have known legacy issues):", JSON.stringify({ errorCount: report.errors.length, warningCount: report.warnings.length }, null, 2));
16
- }
17
- expect(report.counts.entityDescriptors).toBeGreaterThanOrEqual(3);
18
- }, 120_000);
19
- it("loads smoke entity descriptor from Catalox", async () => {
20
- const admin = await createLiveAdmin();
21
- const entityName = smokeEntityName();
22
- const snapshot = await admin.loadSnapshot();
23
- const entity = snapshot.entityDescriptors[entityName];
24
- expect(entity, `entity descriptor "${entityName}"`).toBeDefined();
25
- expect(entity?.defaultListDescriptorId).toBeTruthy();
26
- expect(entity?.defaultItemDescriptorId).toBeTruthy();
27
- const listId = String(entity?.defaultListDescriptorId);
28
- const itemId = String(entity?.defaultItemDescriptorId);
29
- expect(snapshot.listDescriptors[listId]).toBeDefined();
30
- expect(snapshot.itemDescriptors[itemId]).toBeDefined();
31
- }, 60_000);
32
- it("lists catalog items for entity, list, and item descriptors", async () => {
33
- const admin = await createLiveAdmin();
34
- const entityPage = await admin.catalox.listCatalogItems(MEMORIX_OBJECT_TYPE_DESCRIPTORS_CATALOG, { limit: 50 });
35
- expect(entityPage.listOutcome).not.toBe("mapping_blocked");
36
- expect(entityPage.items.length).toBeGreaterThan(0);
37
- const listPage = await admin.catalox.listCatalogItems(MEMORIX_LIST_DESCRIPTORS_CATALOG, { limit: 50 });
38
- expect(listPage.items.length).toBeGreaterThan(0);
39
- const itemPage = await admin.catalox.listCatalogItems(MEMORIX_ITEM_DESCRIPTORS_CATALOG, { limit: 50 });
40
- expect(itemPage.items.length).toBeGreaterThan(0);
41
- }, 60_000);
42
- it("builds descriptor graph with default-list edges", async () => {
43
- const admin = await createLiveAdmin();
44
- const graph = await admin.getDescriptorGraph();
45
- const entityName = smokeEntityName();
46
- expect(graph.nodes.some((n) => n.id === entityName && n.kind === "entity")).toBe(true);
47
- expect(graph.edges.some((e) => e.from === entityName && e.kind === "default-list")).toBe(true);
48
- }, 60_000);
49
- it("resolves collection name for smoke entity canonical content type", async () => {
50
- const admin = await createLiveAdmin();
51
- const entityName = smokeEntityName();
52
- const snapshot = await admin.loadSnapshot();
53
- const entity = snapshot.entityDescriptors[entityName];
54
- const canonical = String(entity.defaults?.canonicalContentType ??
55
- "snapshots");
56
- const collection = await admin.resolveCollection(entityName, canonical);
57
- expect(collection).toBeTruthy();
58
- expect(collection).toMatch(/^[a-z0-9-]+$/);
59
- }, 60_000);
60
- it("dry-run addProperty on smoke entity does not write", async () => {
61
- const admin = await createLiveAdmin();
62
- const entityName = smokeEntityName();
63
- const snapshot = await admin.loadSnapshot();
64
- const entity = snapshot.entityDescriptors[entityName];
65
- const canonical = String(entity.defaults?.canonicalContentType ??
66
- Object.keys(entity.contentTypes)[0] ??
67
- "snapshots");
68
- const propKey = `_live-test-prop-${Date.now()}`;
69
- const result = await admin.addProperty(entityName, propKey, {
70
- label: "Live Test Property",
71
- source: { contentType: canonical, path: "data._live_test" },
72
- humanReadable: true,
73
- }, { dryRun: true, addToDefaultList: false, addToDefaultItem: false });
74
- expect(result.dryRun).toBe(true);
75
- expect(result.cataloxWrites.length).toBeGreaterThan(0);
76
- expect(result.errors.some((e) => ["ENTITY_NOT_FOUND", "VALIDATION_FAILED", "UNKNOWN_CONTENT_TYPE"].includes(e.code))).toBe(false);
77
- }, 60_000);
78
- it("reconcileDescriptorsWithMongo returns inventory when xronox is configured", async () => {
79
- if (!process.env.MONGO_URI?.trim()) {
80
- console.warn("Skipping reconcile — MONGO_URI not set in .env");
81
- return;
82
- }
83
- const admin = await createMemorixDescriptorAdminFromEnv();
84
- try {
85
- const result = await admin.reconcileDescriptorsWithMongo();
86
- expect(result.inventory.rows).toBeDefined();
87
- expect(result.issues).toBeDefined();
88
- expect(Array.isArray(result.suggestions)).toBe(true);
89
- expect(result.inventory.generatedAt).toBeTruthy();
90
- }
91
- catch (err) {
92
- const message = err instanceof Error ? err.message : String(err);
93
- if (message.includes("data tier") ||
94
- message.includes("xronox") ||
95
- message.includes("Xronox")) {
96
- console.warn("Skipping reconcile assertion — Xronox not configured:", message);
97
- return;
98
- }
99
- throw err;
100
- }
101
- }, 180_000);
102
- });
103
- describe("live test gate", () => {
104
- it.skipIf(live)("skipped — live tests disabled", () => {
105
- expect(skipReason).toBeTruthy();
106
- });
107
- it.runIf(!live)("documents how to enable live tests", () => {
108
- expect(liveSkipReason()).toMatch(/FIRESTORE_LIVE_TESTS/);
109
- });
110
- });
111
- //# sourceMappingURL=catalox.live.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalox.live.test.js","sourceRoot":"","sources":["../../../src/tests/live/catalox.live.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mutations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutations.test.d.ts","sourceRoot":"","sources":["../../src/tests/mutations.test.ts"],"names":[],"mappings":""}