test(app): add seed conversation regression tests
Validates extraction pipeline against all seed prompts. 15 tests covering films, songs, books, TV, places, podcasts, images, code, recipes, events. Verifies tag stripping completeness. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
5c82a09e65
commit
5d8ce56b1b
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Seed Conversation Regression Tests
|
||||
*
|
||||
* Ensures each seed conversation produces at least the expected content types
|
||||
* when run through the content extraction pipeline. This is a quick smoke test
|
||||
* that verifies the extraction pipeline hasn't regressed.
|
||||
*/
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { seedPrompts } from './fixtures/seedPrompts'
|
||||
import {
|
||||
extractAllFilms,
|
||||
extractAllSongs,
|
||||
extractAllPodcasts,
|
||||
extractAllBooks,
|
||||
extractAllTVSeries,
|
||||
extractAllPlaces,
|
||||
extractAllImages,
|
||||
extractCodeBlocks,
|
||||
extractRecipes,
|
||||
extractEvents,
|
||||
stripContentTags,
|
||||
} from '@/composables/contentExtraction'
|
||||
|
||||
describe('Seed conversation regression', () => {
|
||||
for (const seed of seedPrompts) {
|
||||
it(`[${seed.id}] produces expected content types for "${seed.userQuery.slice(0, 50)}"`, () => {
|
||||
const text = seed.assistantResponse
|
||||
const query = seed.userQuery
|
||||
|
||||
// Run all extractors
|
||||
const films = extractAllFilms(text)
|
||||
const songs = extractAllSongs(text, query)
|
||||
const podcasts = extractAllPodcasts(text)
|
||||
const books = extractAllBooks(text, query)
|
||||
const tvSeries = extractAllTVSeries(text, query)
|
||||
const places = extractAllPlaces(text, query)
|
||||
const images = extractAllImages(text, query)
|
||||
const codeBlocks = extractCodeBlocks(text)
|
||||
const recipes = extractRecipes(text)
|
||||
const events = extractEvents(text)
|
||||
|
||||
// Validate expected counts match
|
||||
if (seed.expected.films !== undefined) expect(films.length).toBe(seed.expected.films)
|
||||
if (seed.expected.songs !== undefined) expect(songs.length).toBe(seed.expected.songs)
|
||||
if (seed.expected.podcasts !== undefined) expect(podcasts.length).toBe(seed.expected.podcasts)
|
||||
if (seed.expected.books !== undefined) expect(books.length).toBe(seed.expected.books)
|
||||
if (seed.expected.tvSeries !== undefined) expect(tvSeries.length).toBe(seed.expected.tvSeries)
|
||||
if (seed.expected.places !== undefined) expect(places.length).toBe(seed.expected.places)
|
||||
if (seed.expected.images !== undefined) expect(images.length).toBe(seed.expected.images)
|
||||
if (seed.expected.codeBlocks !== undefined) expect(codeBlocks.length).toBe(seed.expected.codeBlocks)
|
||||
if (seed.expected.recipes !== undefined) expect(recipes.length).toBe(seed.expected.recipes)
|
||||
if (seed.expected.events !== undefined) expect(events.length).toBe(seed.expected.events)
|
||||
|
||||
// Verify stripping leaves no tags
|
||||
const stripped = stripContentTags(text)
|
||||
expect(stripped).not.toMatch(/\[\[[^\]]+\]\]/)
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user