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', $backUrl); $this->assertSame('https://crm.test/reclamations?filters%5Bcomment%5D=abc', $parentUrl); } public function test_remember_current_page_moves_duplicate_url_to_stack_end_without_duplication(): void { session()->start(); $service = app(NavigationContextService::class); $indexRequest = Request::create('https://crm.test/catalog?page=2', 'GET'); $showRequest = Request::create('https://crm.test/catalog/15?nav=test-token', 'GET'); $token = $service->getOrCreateToken($indexRequest); $service->rememberCurrentPage($indexRequest, $token); $service->rememberCurrentPage($showRequest, $token); $service->rememberCurrentPage($indexRequest, $token); $contexts = session('navigation'); $stack = $contexts[$token]['stack'] ?? []; $this->assertSame([ 'https://crm.test/catalog/15', 'https://crm.test/catalog?page=2', ], $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', $service->parentUrl($token, 'https://crm.test/product_sku')); } }