/** * @param $url * @dataProvider outOfMatchUrlProvider * @expectedException \ReRoute\Exceptions\MatchNotFoundException */ public function testOutOfMatch($url) { $router = new Router(); $urlTemplate = new UrlTemplate(); $urlTemplate->setScheme('http')->setPathTemplate('/')->setHostTemplate('example.com'); $router->addRoute(new FinalRoute('homepageResult', $urlTemplate)); $router->doMatch(RequestContextFactory::createFromUrl($url)); }
/** * @dataProvider templateRequestsProvider * * @param $url * @param $method * @param $result */ public function testTemplateMatch($url, $method, $result) { $route = new FinalRoute('testResult'); $route->setUrlTemplate(new UrlTemplate(['host' => '{subdomain:[a-z]{2,5}}.example.com', 'path' => '/item/{itemId:\\d+}/', 'scheme' => 'http', 'method' => 'get|post'])); $requestContext = RequestContextFactory::createFromUrl($url, $method); $routeMatch = $route->doMatch($requestContext); if (empty($result)) { $this->assertEmpty($routeMatch, $method . ':' . $url . " should not match"); } else { $this->assertNotEmpty($routeMatch, $method . ':' . $url . " should match"); $this->assertInstanceOf('\\ReRoute\\RouteMatch', $routeMatch); } }
/** * */ public function testIsMatched() { $urlTemplate = new UrlTemplate(['host' => 'example.com']); $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('http://example.com/', 'get'))); $urlTemplate->setScheme('https'); $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('http://example.com/', 'get'))); $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'get'))); $urlTemplate->setPathTemplate('/category/{categoryId:[0-9]+:}/'); $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/', 'get'))); $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'get'))); $urlTemplate->setMethod('post'); $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/', 'get'))); $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'post'))); }
/** * */ public function testRoutesMatchTest() { $routeGroup = new RouteGroup(); $routeGroup->addRoute(new FinalRoute('routeResult1', new UrlTemplate(['host' => 'example.com', 'path' => '/list/']))); $routeGroup->addRoute(new FinalRoute('routeResult2', new UrlTemplate(['host' => 'example.com']))); $routeGroup->addRoute(new FinalRoute('routeResult3', new UrlTemplate(['host' => 'example.ua', 'path' => '/list/']))); $routeMatch1 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.com/list/')); $this->assertNotEmpty($routeMatch1); $this->assertEquals('routeResult1', $routeMatch1->getRouteResult()); $routeMatch2 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.com/')); $this->assertNotEmpty($routeMatch2); $this->assertEquals('routeResult2', $routeMatch2->getRouteResult()); $routeMatch3 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.ua/list/')); $this->assertNotEmpty($routeMatch3); $this->assertEquals('routeResult3', $routeMatch3->getRouteResult()); }
/** * */ public function testExtendRoute() { $router = new \ReRoute\Router(); $siteRouteGroup = new SiteRouteGroup(); $siteRouteGroup->addRoute(new FinalRoute('indexResult', new UrlTemplate(['path' => '/']))); $siteRouteGroup->addRoute(new FinalRoute('listResult', new UrlTemplate(['path' => '/list/']))); $router->addRoute($siteRouteGroup); $routeMatch = $router->doMatch(RequestContextFactory::createFromUrl('http://dev3.debug.m.site.ua/')); $this->assertEquals('site.ua', $routeMatch->get('_domain')); $this->assertTrue($routeMatch->get('_isMobile')); $this->assertEquals('dev3', $routeMatch->get('_devBranch')); $this->assertEquals('http://dev3.debug.m.site.ua/list/', $router->generateUrl('listResult')); $this->assertEquals('http://dev10.debug.m.site.ua/list/', $router->generateUrl('listResult', ['_devBranch' => 'dev10'])); $this->assertEquals('http://dev3.debug.site.ua/list/', $router->generateUrl('listResult', ['_isMobile' => false])); $urlBuilder = $router->urlBuilder('indexResult'); $urlBuilder->setParameter('_domain', 'site.com'); $urlBuilder->setParameter('_isMobile', false); $urlBuilder->setParameter('_devBranch', false); $this->assertEquals('http://site.com/', $urlBuilder->assemble()); $this->assertEquals('http://dev3.debug.m.site.ua/', $router->urlBuilder('indexResult')->assemble()); }
/** * */ public function testAdvancedModifiers() { $router = new Router(); $siteRouteGroup = new RouteGroup(new UrlTemplate(['host' => 'site.com'])); $siteRouteGroup->addModifier((new PrefixModifier())->setPrefix('/site/')); $siteMyRouteGroup = new RouteGroup(); $siteMyRouteGroup->addModifier(new PrefixMyRouteModifier()); $siteMyRouteGroup->addRoute(new FinalRoute('routeResult', new UrlTemplate(['path' => '/orders/']))); $siteRouteGroup->addRoute($siteMyRouteGroup); $router->addRoute($siteRouteGroup); $router->doMatch(RequestContextFactory::createFromUrl('http://site.com/site/my/orders/')); $this->assertEquals('http://site.com/site/my/orders/', $router->generateUrl('routeResult')); }
/** * */ public function testComplexMatching() { $route = new TestRoute(); $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://example.com/'))); $route->addModifier(new MobileHostRouteModifier()); $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/'))); $route->setUrlTemplate(new UrlTemplate(['host' => 'example.net'])); $this->assertFalse($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/'))); $route->setUrlTemplate(new UrlTemplate(['host' => 'example.com'])); $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/'))); }
public function testFromRequestContet() { $requestContext = \ReRoute\Tests\Helper\RequestContextFactory::createFromUrl('https://example.com/somepath/?abc=1'); $url = \ReRoute\Url::fromRequestContext($requestContext); $this->assertEquals('https://example.com/somepath/?abc=1', $url->getUrl()); }
/** * @expectedException \ReRoute\Exceptions\MatchNotFoundException */ public function testFailMethod() { $this->getRouter()->doMatch(RequestContextFactory::createFromUrl('http://example.com/item/', 'get')); }
/** * @throws \ReRoute\Exceptions\MatchNotFoundException */ public function testBuildAfterMatch() { $router = $this->getRouter(); $router->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/fr/')); $this->assertEquals('http://m.example.com/fr/', $router->getUrl('homepageResult')->assemble()); $this->assertEquals('http://m.example.com/fr/items/123/', $router->getUrl('itemsResult')->setParameter('itemId', 123)->assemble()); $this->assertEquals('http://m.example.com/items/123/', $router->getUrl('itemsResult')->setParameter('itemId', 123)->setParameter('lang', 'en')->assemble()); $url = $router->getUrl('itemsResult')->setParameter('itemId', 123)->setParameter('lang', 'en')->setParameter('isMobile', false); $this->assertEquals('http://example.com/items/123/', $url->assemble()); $this->assertEquals('http://example.com/items/123/', $url->assemble()); $url->setParameter('isMobile', true); $this->assertEquals('http://m.example.com/items/123/', $url->assemble()); }