import { describe, it, expect } from 'vitest' import { searchArticles } from '@/lib/search' import type { ArticleMeta } from '@/types/content' const articles: ArticleMeta[] = [ { slug: 'effect', title: 'useEffectの通信', description: '後片付けを学ぶ', tags: ['hooks'], series: 'React入門', difficulty: 'beginner', publishedAt: '2026-09-12' }, { slug: 'state', title: 'useState', description: '更新を学ぶ', tags: ['state'], difficulty: 'beginner', publishedAt: '2026-09-12' }, ] describe('教材検索の契約', () => { it('空欄・空白のみは全候補を返す', () => { expect(searchArticles(articles, '')).toEqual(articles); expect(searchArticles(articles, '  ')).toEqual(articles) }) it('英字の大小・全角と半角を揃える', () => { expect(searchArticles(articles, 'USEEFFECT')).toEqual([articles[0]]) }) it('日本語と全角空白を含む複数語をAND検索する', () => { expect(searchArticles(articles, '通信 HOOKS')).toEqual([articles[0]]); expect(searchArticles(articles, '通信 state')).toEqual([]) }) it('説明とシリーズ名も検索する', () => { expect(searchArticles(articles, '後片付け React')).toEqual([articles[0]]) }) it('正規表現を解釈せず文字として検索する', () => { expect(searchArticles(articles, '.*')).toEqual([]) }) })