| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- <?php
- declare(strict_types=1);
- namespace Tests\Endpoints;
- use MeiliSearch\Client;
- use MeiliSearch\Endpoints\Indexes;
- use MeiliSearch\Exceptions\ApiException;
- use Tests\TestCase;
- final class ClientTest extends TestCase
- {
- public function testGetAllIndexesWhenEmpty(): void
- {
- $response = $this->client->getAllIndexes();
- $this->assertIsArray($response);
- $this->assertEmpty($response);
- }
- public function testCreateIndexWithOnlyUid(): void
- {
- $index = $this->client->createIndex('index');
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertNull($index->getPrimaryKey());
- }
- public function testCreateIndexWithUidAndPrimaryKey(): void
- {
- $index = $this->client->createIndex(
- 'index',
- ['primaryKey' => 'ObjectId']
- );
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertSame('ObjectId', $index->getPrimaryKey());
- }
- public function testCreateIndexWithUidInOptions(): void
- {
- $index = $this->client->createIndex(
- 'index',
- [
- 'uid' => 'wrong',
- 'primaryKey' => 'ObjectId',
- ]
- );
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertSame('ObjectId', $index->getPrimaryKey());
- }
- public function testGetAllIndexes(): void
- {
- $indexA = 'indexA';
- $indexB = 'indexB';
- $this->client->createIndex($indexA);
- $this->client->createIndex($indexB);
- $response = $this->client->getAllIndexes();
- $this->assertIsArray($response);
- $this->assertCount(2, $response);
- $uids = array_map(function ($index) {
- return $index->getUid();
- }, $response);
- $this->assertContains($indexA, $uids);
- $this->assertContains($indexB, $uids);
- }
- public function testUpdateIndex(): void
- {
- $this->client->createIndex('indexA');
- $index = $this->client->updateIndex('indexA', ['primaryKey' => 'id']);
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame($index->getPrimaryKey(), 'id');
- $this->assertSame($index->getUid(), 'indexA');
- }
- public function testDeleteIndex(): void
- {
- $this->client->createIndex('index');
- $response = $this->client->getAllIndexes();
- $this->assertCount(1, $response);
- $response = $this->client->deleteIndex('index');
- $this->assertEmpty($response);
- $response = $this->client->getAllIndexes();
- $this->assertCount(0, $response);
- }
- public function testDeleteAllIndexes(): void
- {
- $this->client->createIndex('index-1');
- $this->client->createIndex('index-2');
- $response = $this->client->getAllIndexes();
- $this->assertCount(2, $response);
- $this->client->deleteAllIndexes();
- $response = $this->client->getAllIndexes();
- $this->assertCount(0, $response);
- }
- public function testDeleteAllIndexesWhenThereAreNoIndexes(): void
- {
- $response = $this->client->getAllIndexes();
- $this->assertCount(0, $response);
- $this->client->deleteAllIndexes();
- $this->assertCount(0, $response);
- }
- public function testGetIndex(): void
- {
- $this->client->createIndex('index');
- $index = $this->client->getIndex('index');
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertNull($index->getPrimaryKey());
- }
- public function testIndex(): void
- {
- $this->client->createIndex('index');
- $index = $this->client->index('index');
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertNull($index->getPrimaryKey());
- }
- public function testGetOrCreateIndexWithOnlyUid(): void
- {
- $index = $this->client->getOrCreateIndex('index');
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertNull($index->getPrimaryKey());
- }
- public function testGetOrCreateIndexWithUidAndPrimaryKey(): void
- {
- $index = $this->client->getOrCreateIndex(
- 'index',
- ['primaryKey' => 'ObjectId']
- );
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertSame('ObjectId', $index->getPrimaryKey());
- }
- public function testGetOrCreateIndexWithUidInOptions(): void
- {
- $index = $this->client->getOrCreateIndex(
- 'index',
- [
- 'uid' => 'wrong',
- 'primaryKey' => 'ObjectId',
- ]
- );
- $this->assertInstanceOf(Indexes::class, $index);
- $this->assertSame('index', $index->getUid());
- $this->assertSame('ObjectId', $index->getPrimaryKey());
- }
- public function testGetOrCreateWithIndexAlreadyExists(): void
- {
- $index1 = $this->client->getOrCreateIndex('index');
- $index2 = $this->client->getOrCreateIndex('index');
- $index3 = $this->client->getOrCreateIndex('index');
- $this->assertSame('index', $index1->getUid());
- $this->assertSame('index', $index2->getUid());
- $this->assertSame('index', $index3->getUid());
- $update = $index1->addDocuments([['book_id' => 1, 'name' => 'Some book']]);
- $index1->waitForPendingUpdate($update['updateId']);
- $documents = $index2->getDocuments();
- $this->assertCount(1, $documents);
- $index2->delete();
- }
- public function testExceptionIsThrownWhenOverwritingPrimaryKeyUsingUpdateIndex(): void
- {
- $this->client->createIndex(
- 'indexB',
- ['primaryKey' => 'objectId']
- );
- $this->expectException(ApiException::class);
- $this->client->updateIndex('indexB', ['primaryKey' => 'objectID']);
- }
- public function testExceptionIsThrownWhenUpdateIndexUseANoneExistingIndex(): void
- {
- $this->expectException(ApiException::class);
- $this->client->updateIndex(
- 'IndexNotExist',
- ['primaryKey' => 'objectId']
- );
- }
- public function testExceptionIfUidTakenWhenCreating(): void
- {
- $this->client->createIndex('index');
- $this->expectException(ApiException::class);
- $this->client->createIndex('index');
- }
- public function testExceptionIfUidIsNullWhenCreating(): void
- {
- $this->expectException(\TypeError::class);
- $this->client->createIndex(null);
- }
- public function testExceptionIfUidIsEmptyStringWhenCreating(): void
- {
- $this->expectException(ApiException::class);
- $this->client->createIndex('');
- }
- public function testExceptionIfNoIndexWhenShowing(): void
- {
- $this->expectException(ApiException::class);
- $this->client->getIndex('a-non-existing-index');
- }
- public function testExceptionIfNoIndexWhenDeleting(): void
- {
- $this->expectException(ApiException::class);
- $this->client->deleteIndex('a-non-existing-index');
- }
- public function testHealth(): void
- {
- $response = $this->client->health();
- $this->assertEquals('available', $response['status']);
- }
- public function testIsHealthyIsTrue(): void
- {
- $response = $this->client->isHealthy();
- $this->assertTrue($response);
- }
- public function testIsHealthyIsFalse(): void
- {
- $client = new Client('http://127.0.0.1.com:1234', 'masterKey');
- $response = $client->isHealthy();
- $this->assertFalse($response);
- }
- public function testVersion(): void
- {
- $response = $this->client->version();
- $this->assertArrayHasKey('commitSha', $response);
- $this->assertArrayHasKey('buildDate', $response);
- $this->assertArrayHasKey('pkgVersion', $response);
- }
- public function testStats(): void
- {
- $response = $this->client->stats();
- $this->assertArrayHasKey('databaseSize', $response);
- $this->assertArrayHasKey('lastUpdate', $response);
- $this->assertArrayHasKey('indexes', $response);
- }
- public function testBadClientUrl(): void
- {
- try {
- $client = new Client('http://127.0.0.1.com:1234', 'some-key');
- $client->createIndex('index');
- } catch (\Exception $e) {
- $this->assertIsString($e->getMessage());
- return;
- }
- $this->fail('Bad client was accepted and the exception was not thrown');
- }
- }
|