/** * VFS Where Clause Diagnostic * * The real issue: brain.find({ where: { 'metadata.path': '/' } }) returns 0 results * even though the root entity exists! */ import { describe, it, expect, beforeAll, afterAll } from 'vitest' import { Brainy } from '../../src/brainy.js' import * as fs from 'fs' import * as path from 'path' describe('VFS Where Clause Diagnostic', () => { const testDir = path.join(process.cwd(), 'test-where-clause') let brain: Brainy beforeAll(async () => { // Clean up if (fs.existsSync(testDir)) { fs.rmSync(testDir, { recursive: true, force: true }) } fs.mkdirSync(testDir, { recursive: true }) brain = new Brainy({ storage: { type: 'filesystem', path: testDir } }) await brain.init() }) afterAll(() => { if (fs.existsSync(testDir)) { fs.rmSync(testDir, { recursive: true, force: true }) } }) it('should find root entity using where clause', async () => { const vfs = brain.vfs await vfs.init() // Method 1: Where clause (FIXED in v4.3.3!) console.log('\nšŸ“‹ Method 1: Where clause (CORRECT field names)') const whereResult = await brain.find({ where: { path: '/', // āœ… Fixed: Use flat field name vfsType: 'directory' // āœ… Fixed: Use flat field name }, limit: 10 }) console.log(` Found ${whereResult.length} entities`) // Method 2: Find all and filter (what actually works) console.log('\nšŸ“‹ Method 2: Find all + filter') const allEntities = await brain.find({ limit: 100 }) console.log(` Total entities: ${allEntities.length}`) const filtered = allEntities.filter(e => e.metadata?.path === '/' && e.metadata?.vfsType === 'directory' ) console.log(` Filtered to roots: ${filtered.length}`) if (filtered.length > 0) { console.log(` Root entity:`) console.log(` ID: ${filtered[0].id}`) console.log(` Type: ${filtered[0].type}`) console.log(` Metadata.path: ${filtered[0].metadata?.path}`) console.log(` Metadata.vfsType: ${filtered[0].metadata?.vfsType}`) } // Method 3: Type-based search console.log('\nšŸ“‹ Method 3: Type query (collection)') const typeResult = await brain.find({ type: 'collection', limit: 10 }) console.log(` Found ${typeResult.length} collection entities`) // FIXED (v4.3.3): Where clause now works with correct field names! expect(whereResult.length).toBe(1) // āœ… WHERE CLAUSE WORKS NOW! expect(filtered.length).toBe(1) // āœ… MANUAL FILTER ALSO WORKS }) it('should find regular VFS files using where clause', async () => { const vfs = brain.vfs await vfs.mkdir('/test', { recursive: true }) await vfs.writeFile('/test/hello.txt', 'Hello World') // Try to find the file using where clause (FIXED field names) console.log('\nšŸ“‹ Finding /test/hello.txt') const whereResult = await brain.find({ where: { path: '/test/hello.txt', // āœ… Fixed: Use flat field name vfsType: 'file' // āœ… Fixed: Use flat field name }, limit: 10 }) console.log(` Where clause: ${whereResult.length} results`) const allEntities = await brain.find({ limit: 100 }) const filtered = allEntities.filter(e => e.metadata?.path === '/test/hello.txt' ) console.log(` Manual filter: ${filtered.length} results`) if (filtered.length > 0) { console.log(` File metadata:`) console.log(` Path: ${filtered[0].metadata?.path}`) console.log(` VfsType: ${filtered[0].metadata?.vfsType}`) console.log(` Name: ${filtered[0].metadata?.name}`) } // FIXED (v4.3.3): Where clause works with correct field names! expect(whereResult.length).toBe(1) // āœ… FIXED! expect(filtered.length).toBe(1) // āœ… ALSO WORKS }) it('should show metadata index status', async () => { console.log('\nšŸ“‹ Metadata Index Status') const allEntities = await brain.find({ limit: 100 }) console.log(` Total entities: ${allEntities.length}`) const withMetadata = allEntities.filter(e => e.metadata && Object.keys(e.metadata).length > 0) console.log(` With metadata: ${withMetadata.length}`) const withPath = allEntities.filter(e => e.metadata?.path) console.log(` With metadata.path: ${withPath.length}`) const withVfsType = allEntities.filter(e => e.metadata?.vfsType) console.log(` With metadata.vfsType: ${withVfsType.length}`) // Show sample metadata if (withPath.length > 0) { console.log(`\n Sample entity with path:`) const sample = withPath[0] console.log(` ID: ${sample.id}`) console.log(` Type: ${sample.type}`) console.log(` Metadata keys: ${Object.keys(sample.metadata || {}).join(', ')}`) } }) })