[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/web_app/tests/cases/plain/filter/ -> lmbRequestDispatchingFilterTest.class.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  lmb_require('limb/filter_chain/src/lmbFilterChain.class.php');
  10  lmb_require('limb/web_app/src/filter/lmbRequestDispatchingFilter.class.php');
  11  lmb_require('limb/web_app/src/request/lmbRequestDispatcher.interface.php');
  12  lmb_require('limb/toolkit/src/lmbMockToolsWrapper.class.php');
  13  lmb_require('limb/web_app/src/toolkit/lmbWebAppTools.class.php');
  14  lmb_require('limb/web_app/src/controller/lmbStaticCommandController.class.php');
  15  
  16  Mock :: generate('lmbFilterChain', 'MockFilterChain');
  17  Mock :: generate('lmbRequestDispatcher', 'MockRequestDispatcher');
  18  Mock :: generate('lmbWebAppTools', 'MockWebAppTools');
  19  
  20  class lmbRequestDispatchingTestingController extends lmbStaticCommandController
  21  {
  22    function __construct($name)
  23    {
  24      $this->name = $name;
  25      parent :: __construct();
  26    }
  27  
  28    protected function _defineActions()
  29    {
  30      return array('display' => array());
  31    }
  32  }
  33  
  34  //this class used to test exceptions since SimpleTest does not support exception generation by mocks yet.

  35  class lmbRequestDispatchingFilterTestTools extends lmbAbstractTools
  36  {
  37    protected $exception_controller_name;
  38    protected $controller;
  39  
  40    function __construct($exception_controller_name)
  41    {
  42      $this->exception_controller_name = $exception_controller_name;
  43    }
  44  
  45    function setController($controller)
  46    {
  47      $this->controller = $controller;
  48    }
  49  
  50    function createController($controller_name)
  51    {
  52      if($controller_name == $this->exception_controller_name)
  53        throw new lmbException('Controller not created!');
  54      else
  55        return $this->controller;
  56    }
  57  }
  58  
  59  class lmbRequestDispatchingFilterTest extends UnitTestCase
  60  {
  61    protected $toolkit;
  62    protected $request;
  63    protected $mock_tools;
  64    protected $dispatcher;
  65    protected $filter;
  66    protected $chain;
  67  
  68    function setUp()
  69    {
  70      $this->mock_tools = new MockWebAppTools();
  71      $tools = new lmbMockToolsWrapper($this->mock_tools, array('createController'));
  72  
  73      lmbToolkit :: save();
  74      $this->toolkit = lmbToolkit :: merge($tools);
  75      $this->request = $this->toolkit->getRequest();
  76  
  77      $this->dispatcher = new MockRequestDispatcher();
  78      $this->filter = new lmbRequestDispatchingFilter($this->dispatcher);
  79      $this->chain = new MockFilterChain();
  80    }
  81  
  82    function tearDown()
  83    {
  84      lmbToolkit :: restore();
  85    }
  86  
  87    protected function _setUpMocks($dispatched_params, $controller = null, $default_controller_name = '')
  88    {
  89      $this->chain->expectOnce('next');
  90  
  91      $this->dispatcher->expectOnce('dispatch', array($this->request));
  92      $this->dispatcher->setReturnValue('dispatch', $dispatched_params);
  93  
  94      if($controller)
  95      {
  96        $this->mock_tools->expectArgumentsAt(0, 'createController', array($controller->getName()));
  97        $this->mock_tools->setReturnValueAt(0, 'createController', $controller, array($controller->getName()));
  98      }
  99    }
 100  
 101    function testSetDispatchedRequestInToolkit()
 102    {
 103      $controller = new lmbRequestDispatchingTestingController($controller_name = 'SomeController');
 104  
 105      $dispatched_params = array('controller' => $controller_name,
 106                                 'action' => 'display');
 107  
 108      $this->_setUpMocks($dispatched_params, $controller);
 109  
 110      $this->filter->run($this->chain);
 111  
 112      $this->assertDispatchedOk($controller, 'display', __LINE__);
 113    }
 114  
 115    function testUseDefaultActionFromControllerIsActionWasNotDispatchedFromRequest()
 116    {
 117      $dispatched_params = array('controller' => $controller_name = 'SomeController');
 118  
 119      $controller = new lmbRequestDispatchingTestingController($controller_name);
 120  
 121      $this->_setUpMocks($dispatched_params, $controller);
 122  
 123      $this->filter->run($this->chain);
 124  
 125      $this->assertDispatchedOk($controller, $controller->getDefaultAction(), __LINE__);
 126    }
 127  
 128    function testUse404ControllerIsNoSuchActionInDispatchedController()
 129    {
 130      $dispatched_params = array('controller' => $controller_name = 'SomeController',
 131                                 'action' => 'no_such_action');
 132  
 133      $controller = new lmbRequestDispatchingTestingController($controller_name);
 134  
 135      $this->_setUpMocks($dispatched_params, $controller);
 136  
 137      $not_found_controller = new lmbRequestDispatchingTestingController('404');
 138  
 139      $this->mock_tools->expectArgumentsAt(1, 'createController', array('404'));
 140      $this->mock_tools->setReturnValueAt(1, 'createController', $not_found_controller, array('404'));
 141  
 142      $this->filter->setDefaultControllerName('404');
 143      $this->filter->run($this->chain);
 144  
 145      $this->assertDispatchedOk($not_found_controller, $not_found_controller->getDefaultAction(), __LINE__);
 146    }
 147  
 148    function testControllerParamIsEmpty()
 149    {
 150      $this->filter->setDefaultControllerName('404');
 151  
 152      $dispatched_params = array('id' => 150);
 153  
 154      $controller = new lmbRequestDispatchingTestingController('404');
 155  
 156      $this->_setUpMocks($dispatched_params, $controller);
 157  
 158      $this->filter->run($this->chain);
 159  
 160      $this->assertDispatchedOk($controller, 'display', __LINE__);
 161    }
 162  
 163    function testNoSuchController()
 164    {
 165      $this->filter->setDefaultControllerName($default_controller_name = '404');
 166  
 167      $dispatched_params = array('controller' => $exception_controller_name = 'no_such_controller'. time());
 168  
 169      $this->_setUpMocks($dispatched_params);
 170  
 171      $tools = new lmbRequestDispatchingFilterTestTools($exception_controller_name);
 172      $tools->setController($controller = new lmbRequestDispatchingTestingController($default_controller_name));
 173  
 174      $this->toolkit = lmbToolkit :: merge($tools);
 175  
 176      $this->filter->run($this->chain);
 177  
 178      $this->assertDispatchedOk($controller, 'display', __LINE__);
 179    }
 180  
 181    function testPutOtherParamsToRequest()
 182    {
 183      $dispatched_params = array('controller' => 'SomeController',
 184                                 'id' => 150,
 185                                 'extra' => 'bla-bla');
 186  
 187      $controller = new lmbRequestDispatchingTestingController('SomeController');
 188      $this->_setUpMocks($dispatched_params, $controller);
 189  
 190      $this->filter->run($this->chain);
 191  
 192      $this->assertDispatchedOk($controller, $controller->getDefaultAction(), __LINE__);
 193  
 194      $this->assertEqual($this->request->get('id'), 150);
 195      $this->assertEqual($this->request->get('extra'), 'bla-bla');
 196    }
 197  
 198    function assertDispatchedOk($controller, $action, $line)
 199    {
 200      $dispatched_request = $this->toolkit->getDispatchedController();
 201      $this->assertEqual($dispatched_request->getName(), $controller->getName(), '%s ' . $line);
 202      $this->assertEqual($dispatched_request->getCurrentAction(), $action, '%s ' . $line);
 203    }
 204  }
 205  
 206  ?>


Generated: Mon Dec 1 03:56:46 2008 Cross-referenced by PHPXref 0.7