48 lines
1.6 KiB
PHP
48 lines
1.6 KiB
PHP
<?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);
|
||
}
|
||
});
|