feat(bot): HelpArticleParser — frontmatter + чанки статей инструкции
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Support\Help\HelpArticleParser;
|
||||
use Tests\TestCase;
|
||||
|
||||
uses(TestCase::class);
|
||||
|
||||
it('парсит frontmatter и режет тело на чанки по абзацам', function () {
|
||||
$md = <<<'MD'
|
||||
---
|
||||
title: Что такое проект
|
||||
tour: create-project
|
||||
topics: создать проект, заявка на лиды
|
||||
---
|
||||
|
||||
Первый абзац про проект.
|
||||
|
||||
Второй абзац про создание.
|
||||
MD;
|
||||
|
||||
$article = (new HelpArticleParser)->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);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user