| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- <?php
- namespace Tests\Unit\Services;
- use App\Services\NavigationContextService;
- use Illuminate\Http\Request;
- use Tests\TestCase;
- class NavigationContextServiceTest extends TestCase
- {
- public function test_builds_back_navigation_stack_from_get_requests(): void
- {
- session()->start();
- $service = app(NavigationContextService::class);
- $indexRequest = Request::create('https://crm.test/reclamations?filters[comment]=abc', 'GET');
- $showRequest = Request::create('https://crm.test/reclamations/show/10', 'GET');
- $token = $service->getOrCreateToken($indexRequest);
- $service->rememberCurrentPage($indexRequest, $token);
- $service->rememberCurrentPage($showRequest, $token);
- $backUrl = $service->backUrl($showRequest, $token, 'https://crm.test/reclamations');
- $parentUrl = $service->parentUrl($token, 'https://crm.test/reclamations');
- $this->assertSame('https://crm.test/reclamations?filters%5Bcomment%5D=abc&nav=' . $token, $backUrl);
- $this->assertSame('https://crm.test/reclamations?filters%5Bcomment%5D=abc&nav=' . $token, $parentUrl);
- }
- public function test_remember_current_page_truncates_stack_when_returning_to_previous_url(): void
- {
- session()->start();
- $service = app(NavigationContextService::class);
- $orderRequest = Request::create('https://crm.test/order/show/10', 'GET');
- $reclamationRequest = Request::create('https://crm.test/reclamations/show/20?nav=test-token', 'GET');
- $catalogRequest = Request::create('https://crm.test/catalog/15?nav=test-token', 'GET');
- $token = $service->getOrCreateToken($orderRequest);
- $service->rememberCurrentPage($orderRequest, $token);
- $service->rememberCurrentPage($reclamationRequest, $token);
- $service->rememberCurrentPage($catalogRequest, $token);
- $service->rememberCurrentPage($reclamationRequest, $token);
- $contexts = session('navigation');
- $stack = $contexts[$token]['stack'] ?? [];
- $this->assertSame([
- 'https://crm.test/order/show/10',
- 'https://crm.test/reclamations/show/20',
- ], $stack);
- }
- public function test_parent_url_returns_fallback_when_stack_has_single_entry(): void
- {
- session()->start();
- $service = app(NavigationContextService::class);
- $request = Request::create('https://crm.test/product_sku/55', 'GET');
- $token = $service->getOrCreateToken($request);
- $service->rememberCurrentPage($request, $token);
- $this->assertSame('https://crm.test/product_sku?nav=' . $token, $service->parentUrl($token, 'https://crm.test/product_sku'));
- }
- public function test_back_url_preserves_nav_token_for_previous_card(): void
- {
- session()->start();
- $service = app(NavigationContextService::class);
- $catalogRequest = Request::create('https://crm.test/catalog/15?nav=test-token', 'GET');
- $token = $service->getOrCreateToken(Request::create('https://crm.test/reclamations', 'GET', ['nav' => 'test-token']));
- session([
- 'navigation.' . $token => [
- 'updated_at' => time(),
- 'stack' => [
- 'https://crm.test/order/show/10',
- 'https://crm.test/reclamations/show/20',
- 'https://crm.test/catalog/15',
- ],
- ],
- ]);
- $this->assertSame(
- 'https://crm.test/reclamations/show/20?nav=' . $token,
- $service->backUrl($catalogRequest, $token, 'https://crm.test/catalog')
- );
- $this->assertSame(
- 'https://crm.test/reclamations/show/20?nav=' . $token,
- $service->parentUrl($token, 'https://crm.test/catalog')
- );
- }
- }
|