SearchMetadataResponseTest.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Webkul\BagistoApi\Tests\Unit\Http\Middleware;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\JsonResponse;
  5. use Tests\TestCase;
  6. use Webkul\BagistoApi\Http\Middleware\SearchMetadataResponse;
  7. class SearchMetadataResponseTest extends TestCase
  8. {
  9. public function test_it_adds_search_metadata_to_rest_response_meta(): void
  10. {
  11. $request = Request::create('/api/shop/products', 'GET');
  12. $request->attributes->set('bagistoapi.search_metadata', $this->metadata());
  13. $response = (new SearchMetadataResponse())->handle(
  14. $request,
  15. fn () => response()->json(['member' => []])
  16. );
  17. $this->assertInstanceOf(JsonResponse::class, $response);
  18. $this->assertSame($this->metadata(), $response->getData(true)['meta']['searchMetadata']);
  19. }
  20. public function test_it_adds_search_metadata_to_graphql_extensions(): void
  21. {
  22. $request = Request::create('/api/graphql', 'POST');
  23. $request->attributes->set('bagistoapi.search_metadata', $this->metadata());
  24. $response = (new SearchMetadataResponse())->handle(
  25. $request,
  26. fn () => response()->json(['data' => ['products' => []]])
  27. );
  28. $this->assertInstanceOf(JsonResponse::class, $response);
  29. $this->assertSame($this->metadata(), $response->getData(true)['extensions']['searchMetadata']);
  30. }
  31. public function test_it_supports_api_platform_symfony_json_responses(): void
  32. {
  33. $request = Request::create('/api/graphql', 'POST');
  34. $request->attributes->set('bagistoapi.search_metadata', $this->metadata());
  35. $response = (new SearchMetadataResponse())->handle(
  36. $request,
  37. fn () => new \Symfony\Component\HttpFoundation\JsonResponse([
  38. 'data' => ['products' => []],
  39. ])
  40. );
  41. $payload = json_decode((string) $response->getContent(), true);
  42. $this->assertSame($this->metadata(), $payload['extensions']['searchMetadata']);
  43. }
  44. private function metadata(): array
  45. {
  46. return [
  47. 'originalQuery' => 'readyy',
  48. 'effectiveQuery' => 'ready',
  49. 'resultMessage' => 'These are results for: ready',
  50. 'searchInsteadMessage' => 'Search instead for readyy',
  51. ];
  52. }
  53. }