public function testRuntimeServiceRegistry() { $this->app->map->any('/')->execute(function () { }); $exe = $this->app->request(\Exedra\Http\ServerRequest::createFromArray(array('method' => 'GET', 'uri' => '/'))); $this->assertTrue($exe->url instanceof \Exedra\Factory\Url); $this->assertTrue($exe->redirect instanceof \Exedra\Runtime\Redirect); // $this->assertTrue($exe->module instanceof \Exedra\Module\Registry && $exe->module === $exe->app->module); // $this->assertTrue($exe->view instanceof \Exedra\View\Factory && $exe->view === $exe->module['Application']->view); // $this->assertTrue($exe->controller instanceof \Exedra\Factory\Controller && $exe->controller === $exe->module['Application']->controller); }
public function testUriParts() { $request = \Exedra\Http\ServerRequest::createFromArray(array('method' => 'GET', 'uri' => 'http://google.com:80/foo/bar?baz=bad#fragman', 'headers' => array('referer' => array('http://foo.com')))); $uri = $request->getUri(); $this->assertEquals('http://google.com:80/foo/bar?baz=bad#fragman', (string) $uri); $this->assertEquals('google.com', $uri->getHost()); $this->assertEquals('http', $uri->getScheme()); $this->assertEquals(80, $uri->getPort()); $this->assertEquals('google.com:80', $uri->getAuthority()); $this->assertEquals('/foo/bar', $uri->getPath()); $this->assertEquals('baz=bad', $uri->getQuery()); $this->assertEquals('fragman', $uri->getFragment()); $this->assertEquals($uri->getQuery(), http_build_query($request->getQueryParams())); }
/** * Get current url * @param array query * @return string */ public function current(array $query = array()) { if (!$this->request) { throw new \Exedra\Exception\InvalidArgumentException('Http Request does not exist.'); } $uri = $this->request->getUri(); if (count($query) > 0) { // append query to uri if ($uri->getQuery()) { $query = http_build_query($query); } else { $query = '?' . http_build_query($query); } } else { $query = ''; } return $this->request->getUri() . $query; }
/** * Setup dependency registry. */ protected function setUp() { $this->services['service']->register(array('config' => '\\Exedra\\Config', 'routing.factory' => function () { return new \Exedra\Routing\Factory((string) $this->path['routes']); }, 'map' => function () { return $this['routing.factory']->createLevel(); }, 'middleware' => array('\\Exedra\\Middleware\\Registry', array('self.map')), 'request' => function () { return \Exedra\Http\ServerRequest::createFromGlobals(); }, 'url' => function () { return $this->create('factory.url', array($this->map, $this->request, $this->config->get('app.url', null), $this->config->get('asset.url', null))); }, '@session' => '\\Exedra\\Session\\Session', '@flash' => array('\\Exedra\\Session\\Flash', array('self.session')), 'wizard' => array('\\Exedra\\Wizard\\Manager', array('self')), '@controller' => function () { return new \Exedra\Factory\Controller($this->namespace); }, '@view' => function () { return new \Exedra\View\Factory($this->path['app']->create('views')); })); $this->services['factory']->register(array('runtime.exe' => '\\Exedra\\Runtime\\Exe', 'runtime.response' => function () { return \Exedra\Runtime\Response::createEmptyResponse(); }, 'handler.resolver' => '\\Exedra\\Runtime\\Handler\\Resolver', 'factory.url' => '\\Exedra\\Factory\\Url', '@factory.controller' => '\\Exedra\\Factory\\Controller', '@factory.view' => '\\Exedra\\View\\Factory')); $this->setUpHandlers(); $this->setUpWizard(); }
/** * Validate uri path against the request * @param \Exedra\Http\ServerRequest $request * @param string $path * @return array */ public function validate(\Exedra\Http\ServerRequest $request, $path) { // print_r($query);die; foreach (array('method', 'path', 'ajax') as $key) { // if this parameter wasn't set, skip validation. if (!$this->hasProperty($key)) { continue; } switch ($key) { case 'method': $value = $request->getMethod(); // return false because method doesn't exist. if (!in_array(strtolower($value), $this->getProperty('method'))) { return array('route' => false, 'parameter' => false, 'continue' => false); } break; case 'path': $result = $this->validatePath($path); if (!$result['matched']) { return array('route' => false, 'parameter' => $result['parameter'], 'continue' => $result['continue']); } return array('route' => $this, 'parameter' => $result['parameter'], 'continue' => $result['continue']); break; case 'ajax': if ($request->isAjax() != $this->getProperty('ajax')) { return array('route' => false, 'parameter' => false, 'continue' => false); } break; } } return array('route' => false, 'parameter' => array(), 'continue' => false); }
public function testPrevious() { $this->app->request = \Exedra\Http\ServerRequest::createFromArray(array('method' => 'GET', 'uri' => 'http://example.com/hello/world', 'headers' => array('Referer' => array('http://example.com/previous')))); $this->assertEquals('http://example.com/previous', $this->app->url->previous()); }
public function testMultioptional() { $this->map['foo']->get('mult/[:foo?]/[:bar?]/[:baz?]')->execute(function ($exe) { return 'qux' . $exe->param('foo', 'hug') . $exe->param('bar', 'tiz') . $exe->param('baz', 'rel'); })->group(function ($mult) { $mult->get('/opt/[:dst?]/[:tst?]/[:rdt?]')->execute(function ($exe) { $pre = implode('', $exe->params(['foo', 'bar', 'baz'])); return $pre . 'lud' . $exe->param('dst', 'jux') . $exe->param('tst', 'jid') . $exe->param('rdt', 'kit'); }); }); $exe1 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult']])); $exe2 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz']])); $exe3 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad']])); $exe4 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad/lux']])); $exe5 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad/lux/opt']])); $exe6 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad/lux/opt/nop']])); $exe7 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad/lux/opt/nop/top']])); $exe8 = $this->app->request(ServerRequest::createFromArray(['uri' => ['path' => '/mult/baz/bad/lux/opt/nop/top/qef']])); $this->assertEquals('quxhugtizrel', $exe1->response->getBody()); $this->assertEquals('quxbaztizrel', $exe2->response->getBody()); $this->assertEquals('quxbazbadrel', $exe3->response->getBody()); $this->assertEquals('quxbazbadlux', $exe4->response->getBody()); $this->assertEquals('bazbadluxludjuxjidkit', $exe5->response->getBody()); $this->assertEquals('bazbadluxludnopjidkit', $exe6->response->getBody()); $this->assertEquals('bazbadluxludnoptopkit', $exe7->response->getBody()); $this->assertEquals('bazbadluxludnoptopqef', $exe8->response->getBody()); }
public function testFailedDispatch() { $request = \Exedra\Http\ServerRequest::createFromArray(array('method' => 'GET', 'uri' => 'http://google.com:80/foo/bar/bat?baz=bad#fragman', 'headers' => array('referer' => array('http://foo.com')))); $app = new \Exedra\Application(__DIR__); $app->map->any('/foo/bar')->execute(function () { return 'baz'; }); $response = $app->respond($request); $this->assertEquals(404, $response->getStatusCode()); $this->assertEquals('Route does not exist', $response->getBody()); }