48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Chatbot\Search;
|
|
|
|
use App\Chatbot\Search\ContentSearchQuery;
|
|
use App\Chatbot\Search\Excerpt;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ContentSearchQueryTest extends TestCase
|
|
{
|
|
public function testDropsGermanStopwordsShortTokensAndOperators(): void
|
|
{
|
|
self::assertSame(
|
|
'skipass* val* thorens* inklusive*',
|
|
ContentSearchQuery::booleanQuery('Ist im Skipass bei "Val Thorens" alles +inklusive? Ja!'),
|
|
);
|
|
}
|
|
|
|
public function testTermsAreUniqueAndLowerCased(): void
|
|
{
|
|
self::assertSame(['gepäck', 'snowboard'], ContentSearchQuery::terms('Gepäck GEPÄCK Snowboard'));
|
|
}
|
|
|
|
public function testNothingSearchableLeftIsNull(): void
|
|
{
|
|
self::assertNull(ContentSearchQuery::booleanQuery('Was ist das?'));
|
|
self::assertNull(ContentSearchQuery::booleanQuery('***'));
|
|
}
|
|
|
|
public function testExcerptIsTheWholeTextWhenShort(): void
|
|
{
|
|
self::assertSame('Kurzer Text', Excerpt::around("Kurzer\n\nText", ['text']));
|
|
}
|
|
|
|
public function testExcerptCentresOnTheFirstMatch(): void
|
|
{
|
|
$text = str_repeat('Füllwort ', 200).'Der Skipass ist inklusive. '.str_repeat('Nachwort ', 200);
|
|
$excerpt = Excerpt::around($text, ['skipass']);
|
|
|
|
self::assertStringContainsString('Der Skipass ist inklusive.', $excerpt);
|
|
self::assertStringStartsWith('…', $excerpt);
|
|
self::assertStringEndsWith('…', $excerpt);
|
|
self::assertLessThanOrEqual(Excerpt::LENGTH + 2, mb_strlen($excerpt));
|
|
}
|
|
}
|