%PDF- %PDF-
| Direktori : /home/graphicd/www/vebto/vendor/meilisearch/meilisearch-php/tests/Endpoints/ |
| Current File : /home/graphicd/www/vebto/vendor/meilisearch/meilisearch-php/tests/Endpoints/DocumentsTest.php |
<?php
declare(strict_types=1);
namespace Tests\Endpoints;
use MeiliSearch\Exceptions\ApiException;
use MeiliSearch\Exceptions\FailedJsonEncodingException;
use MeiliSearch\Exceptions\InvalidArgumentException;
use Tests\TestCase;
final class DocumentsTest extends TestCase
{
public function testAddDocuments(): void
{
$index = $this->client->createIndex('documents');
$promise = $index->addDocuments(self::DOCUMENTS);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS), $response);
}
public function testAddDocumentWithSpecialChars(): void
{
$documents = [
['id' => 60, 'title' => 'Sehr schön!', 'comment' => 'ßöüä'], // German
['id' => 61, 'title' => 'Très bien!', 'comment' => 'éèê'], // French
['id' => 62, 'title' => 'Очень красивый!', 'comment' => ''], // Russian
];
$index = $this->client->createIndex('documents');
$promise = $index->addDocuments($documents);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(\count($documents), $response);
foreach ($documents as $k => $document) {
$this->assertSame($document['title'], $response[$k]['title']);
$this->assertSame($document['comment'], $response[$k]['comment']);
}
}
public function testCannotAddDocumentWhenJsonEncodingFails(): void
{
$this->expectException(FailedJsonEncodingException::class);
$this->expectExceptionMessage('Encoding payload to json failed. Malformed UTF-8 characters, possibly incorrectly encoded');
$documents = ["\xB1\x31"];
$index = $this->client->createIndex('documents');
$index->addDocuments($documents);
}
public function testGetSingleDocumentWithIntegerDocumentId(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$doc = $this->findDocumentWithId(self::DOCUMENTS, 4);
$response = $index->getDocument($doc['id']);
$this->assertIsArray($response);
$this->assertSame($doc['id'], $response['id']);
$this->assertSame($doc['title'], $response['title']);
}
public function testGetSingleDocumentWithStringDocumentId(): void
{
$stringDocumentId = 'myUniqueId';
$index = $this->client->createIndex('documents');
$addDocumentResponse = $index->addDocuments([['id' => $stringDocumentId]]);
$index->waitForPendingUpdate($addDocumentResponse['updateId']);
$response = $index->getDocument($stringDocumentId);
$this->assertIsArray($response);
$this->assertSame($stringDocumentId, $response['id']);
}
public function testReplaceDocuments(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$replacement = [
'id' => 2,
'title' => 'The Red And The Black',
];
$response = $index->addDocuments([$replacement]);
$this->assertIsValidPromise($response);
$index->waitForPendingUpdate($response['updateId']);
$response = $index->getDocument($replacement['id']);
$this->assertSame($replacement['id'], $response['id']);
$this->assertSame($replacement['title'], $response['title']);
$this->assertFalse(array_search('comment', $response, true));
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS), $response);
}
public function testUpdateDocuments(): void
{
$index = $this->client->createIndex('documents');
$promise = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($promise['updateId']);
$replacement = [
'id' => 456,
'title' => 'The Little Prince',
];
$promise = $index->updateDocuments([$replacement]);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocument($replacement['id']);
$this->assertSame($replacement['id'], $response['id']);
$this->assertSame($replacement['title'], $response['title']);
$this->assertArrayHasKey('comment', $response);
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS), $response);
}
public function testAddWithUpdateDocuments(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$document = [
'id' => 9,
'title' => '1984',
];
$promise = $index->updateDocuments([$document]);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocument($document['id']);
$this->assertSame($document['id'], $response['id']);
$this->assertSame($document['title'], $response['title']);
$this->assertFalse(array_search('comment', $response, true));
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS) + 1, $response);
}
public function testDeleteNonExistingDocument(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$documentId = 9;
$promise = $index->deleteDocument($documentId);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS), $response);
$this->assertNull($this->findDocumentWithId($response, $documentId));
}
public function testDeleteSingleExistingDocumentWithDocumentIdAsInteger(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$documentId = 123;
$promise = $index->deleteDocument($documentId);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS) - 1, $response);
$this->assertNull($this->findDocumentWithId($response, $documentId));
}
public function testDeleteSingleExistingDocumentWithDocumentIdAsString(): void
{
$stringDocumentId = 'myUniqueId';
$index = $this->client->createIndex('documents');
$addDocumentResponse = $index->addDocuments([['id' => $stringDocumentId]]);
$index->waitForPendingUpdate($addDocumentResponse['updateId']);
$promise = $index->deleteDocument($stringDocumentId);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertEmpty($response);
}
public function testDeleteMultipleDocumentsWithDocumentIdAsInteger(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$documentIds = [1, 2];
$promise = $index->deleteDocuments($documentIds);
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(\count(self::DOCUMENTS) - 2, $response);
$this->assertNull($this->findDocumentWithId($response, $documentIds[0]));
$this->assertNull($this->findDocumentWithId($response, $documentIds[1]));
}
public function testDeleteMultipleDocumentsWithDocumentIdAsString(): void
{
$documents = [
['id' => 'myUniqueId1'],
['id' => 'myUniqueId2'],
['id' => 'myUniqueId3'],
];
$index = $this->client->createIndex('documents');
$addDocumentResponse = $index->addDocuments($documents);
$index->waitForPendingUpdate($addDocumentResponse['updateId']);
$promise = $index->deleteDocuments(['myUniqueId1', 'myUniqueId3']);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(1, $response);
$this->assertSame([['id' => 'myUniqueId2']], $response);
}
public function testDeleteAllDocuments(): void
{
$index = $this->client->createIndex('documents');
$response = $index->addDocuments(self::DOCUMENTS);
$index->waitForPendingUpdate($response['updateId']);
$promise = $index->deleteAllDocuments();
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$response = $index->getDocuments();
$this->assertCount(0, $response);
}
public function testExceptionIfNoDocumentIdWhenGetting(): void
{
$index = $this->client->createIndex('new-index');
$this->expectException(ApiException::class);
$index->getDocument(1);
}
public function testAddDocumentWithPrimaryKey(): void
{
$documents = [
[
'id' => 1,
'unique' => 1,
'title' => 'Le Rouge et le Noir',
],
];
$index = $this->client->createIndex('an-index');
$response = $index->addDocuments($documents, 'unique');
$this->assertArrayHasKey('updateId', $response);
$index->waitForPendingUpdate($response['updateId']);
$this->assertSame('unique', $index->fetchPrimaryKey());
$this->assertCount(1, $index->getDocuments());
}
public function testUpdateDocumentWithPrimaryKey(): void
{
$documents = [
[
'id' => 1,
'unique' => 1,
'title' => 'Le Rouge et le Noir',
],
];
$index = $this->client->createIndex('index');
$promise = $index->updateDocuments($documents, 'unique');
$this->assertIsValidPromise($promise);
$index->waitForPendingUpdate($promise['updateId']);
$this->assertSame('unique', $index->fetchPrimaryKey());
$this->assertCount(1, $index->getDocuments());
}
/**
* @dataProvider invalidDocumentIds
*/
public function testFetchingDocumentWithInvalidId($documentId): void
{
$index = $this->client->createIndex('an-index');
$this->expectException(InvalidArgumentException::class);
$index->getDocument($documentId);
}
/**
* @dataProvider invalidDocumentIds
*/
public function testDeletingDocumentWithInvalidId($documentId): void
{
$index = $this->client->createIndex('an-index');
$this->expectException(InvalidArgumentException::class);
$index->deleteDocument($documentId);
}
public function invalidDocumentIds(): array
{
return [
'documentId as null' => [null],
'documentId as bool' => [true],
'documentId as empty string' => [''],
'documentId as float' => [2.1],
'documentId as array' => [[]],
'documentId as object' => [new \stdClass()],
'documentId as resource' => [tmpfile()],
];
}
private function findDocumentWithId($documents, $documentId)
{
foreach ($documents as $document) {
if ($document['id'] == $documentId) {
return $document;
}
}
}
}