moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
/**
* Ontology + validateEntity tests — ported from
* hive-mind/packages/core/src/mind/ontology.test.ts.
*
* Memory Sync Repair Step 2. Source: hive-mind file at HEAD c363257.
*
* Verbatim port — only the import path is adjusted. Both repos export
* `Ontology` (define/getSchema/hasType/getTypes) and `validateEntity`
* with identical signatures.
*
* NOTE: waggle-os has `tests/ontology.test.ts` at top level with 4
* cases focused exclusively on `validateEntity` outcomes. The hive-mind
* cases are complementary: they exercise the schema-management API
* (define/hasType/getTypes/getSchema round-trip) which the top-level
* test does not cover.
*/
import { describe, it, expect } from 'vitest';
import { Ontology, validateEntity } from '../../src/mind/ontology.js';
describe('Ontology (hive-mind port)', () => {
it('define + getSchema + hasType + getTypes round-trip', () => {
const o = new Ontology();
o.define('person', { required: ['email'], optional: ['nickname'] });
o.define('org', { required: ['name'], optional: [] });
expect(o.hasType('person')).toBe(true);
expect(o.hasType('mystery')).toBe(false);
expect(o.getSchema('person')?.required).toEqual(['email']);
expect(o.getTypes().sort()).toEqual(['org', 'person']);
});
});
describe('validateEntity (hive-mind port)', () => {
const ontology = new Ontology();
ontology.define('person', { required: ['email'], optional: ['nickname'] });
it('returns invalid for unknown entity types', () => {
const result = validateEntity(ontology, { type: 'alien', properties: {} });
expect(result.valid).toBe(false);
expect(result.issues[0]).toMatch(/Unknown entity type: alien/);
});
it('returns valid when required props are present and no unknown props', () => {
const result = validateEntity(ontology, {
type: 'person',
properties: { email: 'a@x', nickname: 'A' },
});
expect(result.valid).toBe(true);
expect(result.issues).toEqual([]);
});
it('flags missing required properties', () => {
const result = validateEntity(ontology, {
type: 'person',
properties: { nickname: 'anon' },
});
expect(result.valid).toBe(false);
expect(result.issues).toContain('Missing required property: email');
});
it('flags unknown properties not in required or optional', () => {
const result = validateEntity(ontology, {
type: 'person',
properties: { email: 'a@x', age: 99 },
});
expect(result.valid).toBe(false);
expect(result.issues).toContain('Unknown property: age');
});
});