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);
 }
Beispiel #2
0
 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()));
 }
Beispiel #3
0
 /**
  * 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;
 }
Beispiel #4
0
 /**
  * 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();
 }
Beispiel #5
0
 /**
  * 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);
 }
Beispiel #6
0
 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());
 }
Beispiel #7
0
 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());
 }
Beispiel #8
0
 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());
 }