123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- define('TEST_BASE_PATH', dirname(realpath(__FILE__)) . '/');
- class RoutesTest extends PHPUnit_Framework_TestCase {
- public static function setUpBeforeClass() {
- // changing paths
- IoC::container()->register('laravel.routing.caller', function($c)
- {
- return new \Laravel\Routing\Caller($c, require TEST_BASE_PATH.'filters'.EXT, CONTROLLER_PATH);
- });
-
- IoC::container()->register('laravel.routing.loader', function($c)
- {
- return new \Laravel\Routing\Loader(TEST_BASE_PATH,TEST_BASE_PATH . 'routes/');
- }, true);
- }
-
- protected function setUp()
- {
- $_POST = array();
-
- unset($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']);
- }
-
- /**
- * tests
- * GET /test/wildcard/(:num)/(:any)
- * GET /test/optwildcard/(:any+)
- */
- public function testWildCards()
- {
- $response = $this->processRoute('/test/wildcard/123456/joe');
- $this->assertEquals($response->content, '123456/joe');
-
- $response = $this->processRoute('/test/wildcard/123456');
- $this->assertEquals($response->content->view, 'error/404');
-
- $response = $this->processRoute('/test/wildcard/abc123');
- $this->assertEquals($response->content, 'abc123');
-
- $response = $this->processRoute('/test/optwildcard/foo');
- $this->assertEquals($response->content, 'foo');
-
- $response = $this->processRoute('/test/optwildcard');
- $this->assertEquals($response->content, '');
- }
-
- /**
- * tests GET /test/direct
- */
- public function testDirect()
- {
- $response = $this->processRoute('/test/direct');
- $this->assertEquals($response->content, 'direct');
-
- $response = $this->processRoute('/test/doesnt/exist');
- $this->assertEquals($response->content->view, 'error/404');
- }
-
- /**
- * tests GET /test/multi and GET /test/altmulti
- * both routes are the same
- */
- public function testMultiRoutes()
- {
- $response = $this->processRoute('/test/multi');
- $this->assertEquals($response->content, 'multi test');
-
- $response = $this->processRoute('/test/altmulti');
- $this->assertEquals($response->content, 'multi test');
- }
-
- /**
- * tests post
- */
- public function testPost()
- {
- $response = $this->processRoute('/test/postrequest', 'POST');
- $this->assertEquals($response->content, 'POST request');
- }
-
- /**
- * tests route spoofing
- */
- public function testSpoofing()
- {
- $_POST['__spoofer'] = 'PUT';
- $response = $this->processRoute('/test/putrequest');
- $this->assertEquals($response->content, 'PUT request');
- }
-
- /**
- * tests filters
- */
- public function testFilters()
- {
- $response = $this->processRoute('/test/filter/before');
- $this->assertEquals($response->content, 'filtered before');
-
- $response = $this->processRoute('/test/filter/after');
- $this->assertEquals($response->content, 'filtered after');
-
- $response = $this->processRoute('/test/filter/multi');
- $this->assertEquals($response->content, 'filtered after filtered after2');
- }
-
- private function processRoute($uri, $method = 'GET')
- {
- $_SERVER['REQUEST_URI'] = $uri;
- $_SERVER['REQUEST_METHOD'] = $method;
-
- // not using container resolve because it is a singleton and that makes it so we can't change $_SERVER
- $request = new \Laravel\Request(new \Laravel\URI($_SERVER), $_SERVER, $_POST);
- $router = IoC::container()->resolve('laravel.routing.router');
-
- list($method, $uri) = array($request->method(), $request->uri());
- $route = $router->route($request, $method, $uri);
- if ( ! is_null($route))
- {
- $response = IoC::container()->resolve('laravel.routing.caller')->call($route);
- }
- else
- {
- $response = Response::error('404');
- }
-
- return $response;
- }
- }
|