Files
tolaria/src/lib/aiWorkspaceWindowSharedContext.test.ts
2026-05-29 00:58:40 +02:00

95 lines
2.7 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { VaultEntry } from '../types'
const STORAGE_KEY = 'tolaria:ai-workspace-window-context:v1'
const makeEntry = (overrides: Partial<VaultEntry> = {}): VaultEntry => ({
path: '/vault/note.md',
filename: 'note.md',
title: 'Note',
isA: 'Project',
aliases: [],
belongsTo: [],
relatedTo: [],
status: null,
archived: false,
modifiedAt: 1700000000,
createdAt: 1700000000,
fileSize: 100,
snippet: 'Snippet',
wordCount: 42,
relationships: {},
icon: null,
color: null,
order: null,
sidebarLabel: null,
template: null,
sort: null,
view: null,
visible: true,
organized: true,
favorite: false,
favoriteIndex: null,
listPropertiesDisplay: [],
outgoingLinks: [],
properties: {},
hasH1: true,
...overrides,
})
describe('aiWorkspaceWindowSharedContext', () => {
let store: Record<string, string>
beforeEach(() => {
vi.resetModules()
store = {}
vi.stubGlobal('localStorage', {
getItem: vi.fn((key: string) => store[key] ?? null),
setItem: vi.fn((key: string, value: string) => { store[key] = value }),
})
vi.stubGlobal('BroadcastChannel', class {
onmessage: (() => void) | null = null
postMessage = vi.fn()
})
})
it('preserves note metadata needed by the AI context builder', async () => {
const {
aiWorkspaceWindowSharedContextSnapshot,
publishAiWorkspaceWindowSharedContext,
} = await import('./aiWorkspaceWindowSharedContext')
const activeEntry = makeEntry({
path: '/vault/active.md',
title: 'Active',
aliases: ['A'],
belongsTo: ['[[Parent]]'],
relatedTo: ['[[Sibling]]'],
outgoingLinks: ['Linked'],
properties: { Owner: 'Alice' },
relationships: { People: ['[[Alice]]'] },
wordCount: 128,
})
publishAiWorkspaceWindowSharedContext({
activeEntry,
activeNoteContent: '# Active',
entries: [activeEntry],
openTabs: [activeEntry],
vaultPath: '/vault',
vaultPaths: ['/vault'],
})
const snapshot = aiWorkspaceWindowSharedContextSnapshot()
expect(snapshot.activeEntry?.outgoingLinks).toEqual(['Linked'])
expect(snapshot.activeEntry?.belongsTo).toEqual(['[[Parent]]'])
expect(snapshot.activeEntry?.relatedTo).toEqual(['[[Sibling]]'])
expect(snapshot.activeEntry?.relationships).toEqual({ People: ['[[Alice]]'] })
expect(snapshot.activeEntry?.properties).toEqual({ Owner: 'Alice' })
expect(snapshot.activeEntry?.wordCount).toBe(128)
const stored = JSON.parse(store[STORAGE_KEY])
expect(stored.activeEntry.outgoingLinks).toEqual(['Linked'])
expect(stored.activeEntry.relationships).toEqual({ People: ['[[Alice]]'] })
})
})