public function testAddRouteHttpMethods() { Route::reset(); $config = ['router' => ['home' => ['route' => '/', 'definitions' => ['controller' => 'index', 'action' => 'index', 'module' => 'Application', 'namespace' => 'Application\\Controller'], 'methods' => ['get', 'put']]]]; $di = new Di($config); $di->set('request', function () { return new PhalconRequest(); }); $diManager = new DiManager($di); $diManager->initRouterDi(); $this->assertInstanceOf(Router::class, $diManager->getDI()->get('router')); $router = $diManager->getDI()->get('router'); $httpMethods = ['GET' => true, 'POST' => false, 'PUT' => true, 'PATCH' => false, 'OPTIONS' => false, 'DELETE' => false]; foreach ($httpMethods as $httpMethod => $isMatched) { $_SERVER['REQUEST_METHOD'] = $httpMethod; $router->handle('/'); $this->assertEquals($isMatched, $router->wasMatched()); if ($router->wasMatched()) { $this->assertEquals('index', $router->getControllerName()); $this->assertEquals('index', $router->getActionName()); $this->assertEquals('Application\\Controller', $router->getNamespaceName()); $this->assertEquals('Application', $router->getModuleName()); } } }
/** * @group listener */ public function testBootSuccess() { $di = $this->getDi(); Route::reset(); $router = new Router($di); $router->addRoute('controller/action', ['route' => '/test-boot/:controller/:action', 'definitions' => ['controller' => 1, 'action' => 2, 'module' => 'Application', 'namespace' => 'Application\\Controller'], 'methods' => ['GET', 'POST']]); $_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['REQUEST_URI'] = '/test-boot/static/route'; $appMock = m::mock(PhalconApp::class); $appMock->router = $router; $appMock->shouldReceive('getDI')->andReturn($di); $eventMock = m::mock(Event::class); (new ListenApp())->boot($eventMock, $appMock); $this->assertTrue($di->has('matchedRoute')); $this->assertTrue(isset($di['matchedRoute'])); $this->assertInstanceOf(Route::class, $di['matchedRoute']); $this->assertEquals('controller/action', $di['matchedRoute']->getName()); }
public function testHostnameRegexRouteGroup() { $this->specify("Router Groups with regular expressions don't work properly", function ($actualHost, $expectedHost, $controller) { \Phalcon\Mvc\Router\Route::reset(); $di = new \Phalcon\DI(); $di->set("request", function () { return new \Phalcon\Http\Request(); }); $router = new \Phalcon\Mvc\Router(false); $router->setDI($di); $router->add("/edit", ["controller" => "posts3", "action" => "edit3"]); $group = new \Phalcon\Mvc\Router\Group(); $group->setHostname("([a-z]+).phalconphp.com"); $group->add("/edit", ["controller" => "posts", "action" => "edit"]); $router->mount($group); $_SERVER["HTTP_HOST"] = $actualHost; $router->handle("/edit"); expect($router->getControllerName())->equals($controller); expect($router->getMatchedRoute()->getHostname())->equals($expectedHost); }, ["examples" => $this->hostnamedRegexRoutesProvider()]); }
/** * executed before each test */ protected function _before() { parent::_before(); Route::reset(); }
/** * @group before_match */ public function testBeforeMatchRaiseInvalidClass() { require_once 'tests/module/Application/src/Router/BeforeMatchFail.php'; $excMsg = sprintf('"%s" must be implemented "%s"', BeforeMatchFail::class, BeforeMatchInterface::class); $this->setExpectedException(RuntimeException::class, $excMsg); Route::reset(); $router = new Router($this->getDi()); $router->addRoute('edit-classname', ['route' => '/edit2/([1-9][0-9]*)', 'definitions' => ['controller' => 'posts2', 'action' => 'edit2', 'id' => 1], 'before_match' => ['class_name' => BeforeMatchFail::class]]); $router->handle('/edit2/100'); }