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') ); } }