SearchLogServiceTest.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Webkul\BagistoApi\Tests\Unit\Services;
  3. use Illuminate\Http\Request;
  4. use Mockery;
  5. use Tests\TestCase;
  6. use Webkul\Marketing\Contracts\SearchLog;
  7. use Webkul\Marketing\Repositories\SearchLogRepository;
  8. use Webkul\Marketing\Services\SearchLogService;
  9. class SearchLogServiceTest extends TestCase
  10. {
  11. public function test_it_records_normalized_search_details_and_request_ip(): void
  12. {
  13. $repository = Mockery::mock(SearchLogRepository::class);
  14. $searchLog = Mockery::mock(SearchLog::class);
  15. $request = Request::create(
  16. '/api/shop/products?query=readyy&suggest=1',
  17. 'GET',
  18. server: ['REMOTE_ADDR' => '203.0.113.10']
  19. );
  20. $repository->shouldReceive('create')
  21. ->once()
  22. ->with([
  23. 'search_text' => 'readyy',
  24. 'query_text' => 'ready',
  25. 'results' => 12,
  26. 'ip_address' => '203.0.113.10',
  27. ])
  28. ->andReturn($searchLog);
  29. $result = (new SearchLogService($repository))->record(
  30. ' readyy ',
  31. ' ready ',
  32. 12,
  33. $request
  34. );
  35. $this->assertSame($searchLog, $result);
  36. }
  37. public function test_it_clamps_negative_result_counts_to_zero(): void
  38. {
  39. $repository = Mockery::mock(SearchLogRepository::class);
  40. $searchLog = Mockery::mock(SearchLog::class);
  41. $repository->shouldReceive('create')
  42. ->once()
  43. ->with(Mockery::on(fn (array $data) => $data['results'] === 0))
  44. ->andReturn($searchLog);
  45. (new SearchLogService($repository))->record(
  46. 'missing',
  47. 'missing',
  48. -1,
  49. Request::create('/')
  50. );
  51. }
  52. public function test_it_only_records_when_suggest_is_enabled(): void
  53. {
  54. $repository = Mockery::mock(SearchLogRepository::class);
  55. $searchLog = Mockery::mock(SearchLog::class);
  56. $service = new SearchLogService($repository);
  57. $repository->shouldNotReceive('create');
  58. $this->assertNull($service->recordWhenSuggested(
  59. false,
  60. 'readyy',
  61. 'ready',
  62. 12,
  63. Request::create('/')
  64. ));
  65. $repository = Mockery::mock(SearchLogRepository::class);
  66. $repository->shouldReceive('create')->once()->andReturn($searchLog);
  67. $this->assertSame(
  68. $searchLog,
  69. (new SearchLogService($repository))->recordWhenSuggested(
  70. '1',
  71. 'readyy',
  72. 'ready',
  73. 12,
  74. Request::create('/')
  75. )
  76. );
  77. }
  78. }