|  | @@ -0,0 +1,131 @@
 | 
	
		
			
				|  |  | +<?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;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 |