Skip to content

Commit 8e5e678

Browse files
committed
Implement e2e search index management tests
mongodb/node-mongodb-native#3736
1 parent db4c98e commit 8e5e678

12 files changed

+199
-108
lines changed

src/Collection.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Iterator;
2222
use MongoDB\BSON\JavascriptInterface;
2323
use MongoDB\Driver\Cursor;
24+
use MongoDB\Driver\Exception\CommandException;
2425
use MongoDB\Driver\Exception\RuntimeException as DriverRuntimeException;
2526
use MongoDB\Driver\Manager;
2627
use MongoDB\Driver\ReadConcern;
@@ -633,7 +634,14 @@ public function dropSearchIndex(string $name, array $options = []): void
633634
$operation = new DropSearchIndex($this->databaseName, $this->collectionName, $name);
634635
$server = select_server($this->manager, $options);
635636

636-
$operation->execute($server);
637+
try {
638+
$operation->execute($server);
639+
} catch (CommandException $e) {
640+
// Suppress namespace not found errors for idempotency
641+
if ($e->getCode() !== 26) {
642+
throw $e;
643+
}
644+
}
637645
}
638646

639647
/**
@@ -1015,7 +1023,7 @@ public function listIndexes(array $options = [])
10151023
* Only available when used against a 7.0+ Atlas cluster.
10161024
*
10171025
* @param array{name?: string} $options Command options
1018-
* @return Iterator&Countable
1026+
* @return Countable&Iterator<array{id: string, name: string, status: string, queryable: bool, latestDefinition: array}>
10191027
* @throws InvalidArgumentException for parameter/option parsing errors
10201028
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
10211029
* @see ListSearchIndexes::__construct() for supported options

src/Model/SearchIndexInput.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
class SearchIndexInput implements Serializable
3737
{
3838
/** @var array */
39-
private $index;
39+
private array $index;
4040

4141
/**
4242
* @param array{name?: string, definition: array|object} $index Search index specification

src/Operation/CreateSearchIndexes.php

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
use MongoDB\Exception\UnsupportedException;
2525
use MongoDB\Model\SearchIndexInput;
2626

27+
use function array_column;
2728
use function array_is_list;
28-
use function array_map;
2929
use function current;
3030
use function MongoDB\is_document;
3131
use function sprintf;
@@ -39,17 +39,10 @@
3939
*/
4040
class CreateSearchIndexes implements Executable
4141
{
42-
/** @var string */
43-
private $databaseName;
44-
45-
/** @var string */
46-
private $collectionName;
47-
48-
/** @var array */
49-
private $indexes = [];
50-
51-
/** @var array */
52-
private $options;
42+
private string $databaseName;
43+
private string $collectionName;
44+
private array $indexes = [];
45+
private array $options;
5346

5447
/**
5548
* Constructs a createSearchIndexes command.
@@ -105,8 +98,6 @@ public function execute(Server $server): array
10598
/** @var object{indexesCreated: list<object{name: string}>} $result */
10699
$result = current($cursor->toArray());
107100

108-
return array_map(function ($index) {
109-
return $index->name;
110-
}, $result->indexesCreated);
101+
return array_column($result->indexesCreated, 'name');
111102
}
112103
}

src/Operation/DropSearchIndex.php

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,10 @@
3131
*/
3232
class DropSearchIndex implements Executable
3333
{
34-
/** @var string */
35-
private $databaseName;
36-
37-
/** @var string */
38-
private $collectionName;
39-
40-
/** @var string */
41-
private $name;
42-
43-
/** @var array */
44-
private $options;
34+
private string $databaseName;
35+
private string $collectionName;
36+
private string $name;
37+
private array $options;
4538

4639
/**
4740
* Constructs a dropSearchIndex command.

src/Operation/ListSearchIndexes.php

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,11 @@
3737
*/
3838
class ListSearchIndexes implements Executable
3939
{
40-
/** @var string */
41-
private $databaseName;
42-
43-
/** @var string */
44-
private $collectionName;
45-
46-
/** @var array */
47-
private $listSearchIndexesOptions;
48-
49-
/** @var array */
50-
private $aggregateOptions;
51-
52-
/** @var Aggregate */
53-
private $aggregate;
40+
private string $databaseName;
41+
private string $collectionName;
42+
private array $listSearchIndexesOptions;
43+
private array $aggregateOptions;
44+
private Aggregate $aggregate;
5445

5546
/**
5647
* Constructs an aggregate command for listing Atlas Search indexes

src/Operation/UpdateSearchIndex.php

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use MongoDB\Exception\InvalidArgumentException;
2424
use MongoDB\Exception\UnsupportedException;
2525

26+
use function MongoDB\document_to_array;
2627
use function MongoDB\is_document;
2728

2829
/**
@@ -33,20 +34,11 @@
3334
*/
3435
class UpdateSearchIndex implements Executable
3536
{
36-
/** @var string */
37-
private $databaseName;
38-
39-
/** @var string */
40-
private $collectionName;
41-
42-
/** @var string */
43-
private $name;
44-
45-
/** @var array|object */
46-
private $definition;
47-
48-
/** @var array */
49-
private $options = [];
37+
private string $databaseName;
38+
private string $collectionName;
39+
private string $name;
40+
private array $definition;
41+
private array $options = [];
5042

5143
/**
5244
* Constructs a createSearchIndexes command.
@@ -71,7 +63,7 @@ public function __construct(string $databaseName, string $collectionName, string
7163
$this->databaseName = $databaseName;
7264
$this->collectionName = $collectionName;
7365
$this->name = $name;
74-
$this->definition = $definition;
66+
$this->definition = document_to_array($definition);
7567
$this->options = $options;
7668
}
7769

0 commit comments

Comments
 (0)