import { describe, it, expect } from 'vitest'; import { TextDocument } from '../../../src/domain/text/TextDocument.js'; import type { DocumentType } from '../../../src/core/types.js'; describe('TextDocument', () => { it('DocumentTypeインターフェースを実装している', () => { const document: DocumentType = new TextDocument(); expect(document).toBeDefined(); expect(document.id).toBeDefined(); expect(document.name).toBeDefined(); expect(document.validators).toBeDefined(); }); it('正しいIDを持つ', () => { const document = new TextDocument(); expect(document.id).toBe('text'); }); it('正しい名前を持つ', () => { const document = new TextDocument(); expect(document.name).toBe('テキスト教材'); }); it('バリデーター配列を持つ', () => { const document = new TextDocument(); expect(Array.isArray(document.validators)).toBe(true); }); it('必要なバリデーターを含む', () => { const document = new TextDocument(); const validatorIds = document.validators.map(v => v.id); // 必須バリデーター expect(validatorIds).toContain('text/frontmatter'); expect(validatorIds).toContain('text/toc'); expect(validatorIds).toContain('text/structure'); }); it('各バリデーターがValidatorインターフェースを実装している', () => { const document = new TextDocument(); for (const validator of document.validators) { expect(validator.id).toBeDefined(); expect(typeof validator.id).toBe('string'); expect(validator.name).toBeDefined(); expect(typeof validator.name).toBe('string'); expect(typeof validator.validate).toBe('function'); } }); });