diff --git a/src/Endpoints/Delegates/HandlesMultiSearch.php b/src/Endpoints/Delegates/HandlesMultiSearch.php index 4cd84f9b..c6e76123 100644 --- a/src/Endpoints/Delegates/HandlesMultiSearch.php +++ b/src/Endpoints/Delegates/HandlesMultiSearch.php @@ -25,7 +25,7 @@ public function multiSearch(array $queries = [], ?MultiSearchFederation $federat $payload = ['queries' => $body]; if (null !== $federation) { - $payload['federation'] = $federation->toArray(); + $payload['federation'] = (object) $federation->toArray(); } return $this->http->post('/multi-search', $payload); diff --git a/tests/Endpoints/MultiSearchTest.php b/tests/Endpoints/MultiSearchTest.php index 9d82ac9c..5935ac16 100644 --- a/tests/Endpoints/MultiSearchTest.php +++ b/tests/Endpoints/MultiSearchTest.php @@ -4,10 +4,14 @@ namespace Tests\Endpoints; +use Meilisearch\Client; use Meilisearch\Contracts\FederationOptions; use Meilisearch\Contracts\MultiSearchFederation; use Meilisearch\Contracts\SearchQuery; use Meilisearch\Endpoints\Indexes; +use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\HttpClient\Psr18Client; +use Symfony\Component\HttpClient\Response\MockResponse; use Tests\TestCase; final class MultiSearchTest extends TestCase @@ -159,4 +163,26 @@ public function testMultiSearchWithDistinctAttribute(): void self::assertCount(1, $response['results'][1]['hits']); self::assertSame('fantasy', $response['results'][1]['hits'][0]['genre']); } + + public function testMultiSearchFederationCastingToObject(): void + { + $httpClient = new MockHttpClient(static function (string $method, string $url, array $options): MockResponse { + self::assertSame('POST', $method); + self::assertSame('http://meilisearch/multi-search', $url); + self::assertSame('{"queries":[{"indexUid":"first"},{"indexUid":"second"}],"federation":{}}', $options['body']); + + return new MockResponse( + json_encode(['results' => []], \JSON_THROW_ON_ERROR), + ['response_headers' => ['content-type' => 'application/json']], + ); + }); + + $client = new Client('http://meilisearch', 'apikey', new Psr18Client($httpClient)); + $client->multiSearch([ + (new SearchQuery())->setIndexUid('first'), + (new SearchQuery())->setIndexUid('second'), + ], + new MultiSearchFederation() + ); + } }