NavigationContextServiceTest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace Tests\Unit\Services;
  3. use App\Services\NavigationContextService;
  4. use Illuminate\Http\Request;
  5. use Tests\TestCase;
  6. class NavigationContextServiceTest extends TestCase
  7. {
  8. public function test_builds_back_navigation_stack_from_get_requests(): void
  9. {
  10. session()->start();
  11. $service = app(NavigationContextService::class);
  12. $indexRequest = Request::create('https://crm.test/reclamations?filters[comment]=abc', 'GET');
  13. $showRequest = Request::create('https://crm.test/reclamations/show/10', 'GET');
  14. $token = $service->getOrCreateToken($indexRequest);
  15. $service->rememberCurrentPage($indexRequest, $token);
  16. $service->rememberCurrentPage($showRequest, $token);
  17. $backUrl = $service->backUrl($showRequest, $token, 'https://crm.test/reclamations');
  18. $parentUrl = $service->parentUrl($token, 'https://crm.test/reclamations');
  19. $this->assertSame('https://crm.test/reclamations?filters%5Bcomment%5D=abc', $backUrl);
  20. $this->assertSame('https://crm.test/reclamations?filters%5Bcomment%5D=abc', $parentUrl);
  21. }
  22. public function test_remember_current_page_moves_duplicate_url_to_stack_end_without_duplication(): void
  23. {
  24. session()->start();
  25. $service = app(NavigationContextService::class);
  26. $indexRequest = Request::create('https://crm.test/catalog?page=2', 'GET');
  27. $showRequest = Request::create('https://crm.test/catalog/15?nav=test-token', 'GET');
  28. $token = $service->getOrCreateToken($indexRequest);
  29. $service->rememberCurrentPage($indexRequest, $token);
  30. $service->rememberCurrentPage($showRequest, $token);
  31. $service->rememberCurrentPage($indexRequest, $token);
  32. $contexts = session('navigation');
  33. $stack = $contexts[$token]['stack'] ?? [];
  34. $this->assertSame([
  35. 'https://crm.test/catalog/15',
  36. 'https://crm.test/catalog?page=2',
  37. ], $stack);
  38. }
  39. public function test_parent_url_returns_fallback_when_stack_has_single_entry(): void
  40. {
  41. session()->start();
  42. $service = app(NavigationContextService::class);
  43. $request = Request::create('https://crm.test/product_sku/55', 'GET');
  44. $token = $service->getOrCreateToken($request);
  45. $service->rememberCurrentPage($request, $token);
  46. $this->assertSame('https://crm.test/product_sku', $service->parentUrl($token, 'https://crm.test/product_sku'));
  47. }
  48. }