41 lines
1.7 KiB
PHP
41 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Chatbot\Search;
|
|
|
|
use App\Chatbot\Search\NameQuery;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class NameQueryTest extends TestCase
|
|
{
|
|
public function testTokensAreFoldedUniqueAndWithoutStopwords(): void
|
|
{
|
|
self::assertSame(['hotel', 'chamois', 'or', 'val', 'chaviere'], NameQuery::tokens('Das Hotel "Chamois d\'Or" in Val Chavière, Hotel!'));
|
|
self::assertSame(['chalet', '2100', '3'], NameQuery::tokens('Chalet 2100 (3*)'));
|
|
self::assertSame(['waldschlossli', 'grosse'], NameQuery::tokens('WALDSCHLÖSSLI Größe'));
|
|
self::assertSame([], NameQuery::tokens('Was ist das?'));
|
|
}
|
|
|
|
public function testWithinNeedsEveryQueryWordToBeginAWordOfTheName(): void
|
|
{
|
|
$name = NameQuery::tokens('3* Hotel Les Arolles (inkl. VP)');
|
|
|
|
self::assertTrue(NameQuery::within(NameQuery::tokens('arolles'), $name));
|
|
self::assertTrue(NameQuery::within(NameQuery::tokens('Hotel Aroll'), $name));
|
|
self::assertFalse(NameQuery::within(NameQuery::tokens('Sportclub Arolles'), $name));
|
|
self::assertFalse(NameQuery::within(NameQuery::tokens('rolles'), $name));
|
|
self::assertFalse(NameQuery::within([], $name));
|
|
}
|
|
|
|
public function testContainsNeedsTheWholeNameInTheQuery(): void
|
|
{
|
|
$query = NameQuery::tokens('Hotel Chamois d\'Or in Val Thorens');
|
|
|
|
self::assertTrue(NameQuery::contains($query, NameQuery::tokens('Chamois d\'Or')));
|
|
self::assertTrue(NameQuery::contains($query, NameQuery::tokens('Val Thorens')));
|
|
self::assertFalse(NameQuery::contains($query, NameQuery::tokens('Chalets Chamois')));
|
|
self::assertFalse(NameQuery::contains($query, []));
|
|
}
|
|
}
|