← back to ClawCoder
src/tests/lib/suggester.test.ts
48 lines
import { describe, it, expect } from 'vitest'
import { generateSuggestions } from '@/lib/analyzer/suggester'
import { applySuggestions } from '@/lib/analyzer/applier'
import { analyzeClaudeMd } from '@/lib/analyzer/scorer'
const minimal = `# CLAUDE.md\n\n## My project\nThis is a simple app.\n`
describe('Suggestion Engine', () => {
it('generates suggestions for minimal CLAUDE.md', () => {
const analysis = analyzeClaudeMd(minimal)
const suggestions = generateSuggestions(minimal, analysis)
expect(suggestions.length).toBeGreaterThan(0)
expect(suggestions[0].description).toBeTruthy()
expect(suggestions[0].after).toBeTruthy()
})
it('does not generate suggestions for passing criteria', () => {
const analysis = analyzeClaudeMd(minimal)
const suggestions = generateSuggestions(minimal, analysis)
const passingIds = analysis.criteria
.filter(c => c.score === c.maxScore)
.map(c => c.id)
for (const s of suggestions) {
expect(passingIds).not.toContain(s.criterion)
}
})
})
describe('Suggestion Applier', () => {
it('applies suggestions to content', () => {
const analysis = analyzeClaudeMd(minimal)
const suggestions = generateSuggestions(minimal, analysis)
if (suggestions.length > 0) {
const result = applySuggestions(minimal, [suggestions[0]])
expect(result.length).toBeGreaterThan(minimal.length)
}
})
it('preserves original content when applying', () => {
const analysis = analyzeClaudeMd(minimal)
const suggestions = generateSuggestions(minimal, analysis)
if (suggestions.length > 0) {
const result = applySuggestions(minimal, [suggestions[0]])
expect(result).toContain('# CLAUDE.md')
}
})
})