parse('help/x.md', $md); expect($article->title)->toBe('Что такое проект') ->and($article->tour)->toBe('create-project') ->and($article->topics)->toBe('создать проект, заявка на лиды') ->and($article->chunks)->toHaveCount(1) ->and($article->chunks[0])->toContain('Первый абзац'); }); it('без frontmatter кидает понятную ошибку', function () { expect(fn () => (new HelpArticleParser)->parse('help/bad.md', 'просто текст')) ->toThrow(InvalidArgumentException::class); }); it('длинное тело режет на несколько чанков ~1200 символов по границам абзацев', function () { $body = implode("\n\n", array_fill(0, 10, str_repeat('а', 300))); $md = "---\ntitle: Т\ntopics: т\n---\n\n".$body; $article = (new HelpArticleParser)->parse('help/long.md', $md); expect(count($article->chunks))->toBeGreaterThan(1); foreach ($article->chunks as $chunk) { expect(mb_strlen($chunk))->toBeLessThanOrEqual(1500); } });