Files
tolaria/src/hooks/mockFrontmatterHelpers.test.ts
lucaronin a36bcd6d43 test: add unit tests for hooks — useNoteActions, useEntryActions, useTabManagement, useVaultLoader, useKeyboardNavigation, mockFrontmatterHelpers
89 tests covering:
- useNoteActions: slugify, buildNewEntry, entryMatchesTarget, buildNoteContent,
  resolveNewNote/Type, createNote, createType, navigateWikilink, frontmatter ops
- useEntryActions: trash/restore, archive/unarchive, customizeType, reorderSections
- useTabManagement: tab selection, close, switch, reorder, replace, localStorage
- useVaultLoader: vault loading, modified files, addEntry, updateContent,
  updateEntry, git history, diff, commitAndPush
- useKeyboardNavigation: Cmd+Shift+Arrow tab switching, Cmd+Alt+Arrow note nav
- mockFrontmatterHelpers: updateMockFrontmatter, deleteMockFrontmatterProperty

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 12:02:19 +01:00

172 lines
5.3 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest'
import { updateMockFrontmatter, deleteMockFrontmatterProperty } from './mockFrontmatterHelpers'
// Setup window.__mockContent for tests
declare global {
interface Window {
__mockContent?: Record<string, string>
}
}
describe('mockFrontmatterHelpers', () => {
beforeEach(() => {
window.__mockContent = {}
})
describe('updateMockFrontmatter', () => {
it('updates an existing string property', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\nstatus: Active\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'status', 'Done')
expect(result).toContain('status: Done')
expect(result).toContain('title: Hello')
expect(result).toContain('# Hello')
})
it('adds a new property when key does not exist', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'owner', 'Luca')
expect(result).toContain('owner: Luca')
expect(result).toContain('title: Hello')
})
it('handles boolean value (true)', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'archived', true)
expect(result).toContain('archived: true')
})
it('handles boolean value (false)', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\narchived: true\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'archived', false)
expect(result).toContain('archived: false')
})
it('handles array values', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'aliases', ['ML', 'AI'])
expect(result).toContain('aliases:')
expect(result).toContain(' - "ML"')
expect(result).toContain(' - "AI"')
})
it('replaces existing array property', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\naliases:\n - "old"\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'aliases', ['new1', 'new2'])
expect(result).toContain(' - "new1"')
expect(result).toContain(' - "new2"')
expect(result).not.toContain('"old"')
})
it('handles numeric value', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'order', 3)
expect(result).toContain('order: 3')
})
it('creates frontmatter when none exists', () => {
window.__mockContent = {
'/test.md': '# Just content',
}
const result = updateMockFrontmatter('/test.md', 'title', 'Hello')
expect(result).toMatch(/^---\n/)
expect(result).toContain('title: Hello')
expect(result).toContain('# Just content')
})
it('handles empty content gracefully', () => {
window.__mockContent = {}
const result = updateMockFrontmatter('/test.md', 'title', 'New')
expect(result).toContain('title: New')
})
it('handles keys with spaces', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = updateMockFrontmatter('/test.md', 'Belongs to', '[[Project A]]')
expect(result).toContain('"Belongs to": [[Project A]]')
})
it('handles null value', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n',
}
const result = updateMockFrontmatter('/test.md', 'status', null)
expect(result).toContain('status: null')
})
})
describe('deleteMockFrontmatterProperty', () => {
it('removes an existing property', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\nstatus: Active\n---\n\n# Hello\n',
}
const result = deleteMockFrontmatterProperty('/test.md', 'status')
expect(result).not.toContain('status:')
expect(result).toContain('title: Hello')
})
it('removes an array property with all its items', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\naliases:\n - "A"\n - "B"\nstatus: Active\n---\n\n# Hello\n',
}
const result = deleteMockFrontmatterProperty('/test.md', 'aliases')
expect(result).not.toContain('aliases:')
expect(result).not.toContain(' - "A"')
expect(result).toContain('status: Active')
})
it('returns content unchanged when no frontmatter', () => {
window.__mockContent = {
'/test.md': '# Just content',
}
const result = deleteMockFrontmatterProperty('/test.md', 'status')
expect(result).toBe('# Just content')
})
it('returns content unchanged when key not found', () => {
window.__mockContent = {
'/test.md': '---\ntitle: Hello\n---\n\n# Hello\n',
}
const result = deleteMockFrontmatterProperty('/test.md', 'nonexistent')
expect(result).toContain('title: Hello')
})
it('handles empty content', () => {
window.__mockContent = {}
const result = deleteMockFrontmatterProperty('/test.md', 'status')
expect(result).toBe('')
})
})
})