/**
  * Sets up the fixture, for example
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     // creates layer instances
     $this->frontend = new Tinebase_Pluggable_DummyFrontend();
     $this->controller = new Tinebase_Pluggable_DummyController();
     $this->backend = new Tinebase_Pluggable_DummyBackend();
     // injects plugin into layers
     Tinebase_Frontend_Abstract::attachPlugin('dummyPluginMethod', 'Tinebase_Pluggable_Plugin_DummyPlugin');
     Tinebase_Controller_Abstract::attachPlugin('dummyPluginMethod', 'Tinebase_Pluggable_Plugin_DummyPlugin');
     Tinebase_Backend_Abstract::attachPlugin('dummyPluginMethod', 'Tinebase_Pluggable_Plugin_DummyPlugin');
 }
 /**
  * magic method for json api
  *
  * @param string $method
  * @param array  $args
  */
 public function __call($method, array $args)
 {
     // provides api for default application methods
     if (preg_match('/^(get|save|search|delete)([a-z0-9]+)/i', $method, $matches)) {
         $apiMethod = $matches[1];
         $model = in_array($apiMethod, array('search', 'delete')) ? substr($matches[2], 0, -1) : $matches[2];
         $modelController = Tinebase_Core::getApplicationInstance($this->_applicationName, $model);
         switch ($apiMethod) {
             case 'get':
                 return $this->_get($args[0], $modelController);
                 break;
             case 'save':
                 return $this->_save($args[0], $modelController, $model);
                 break;
             case 'search':
                 $filterName = $this->_applicationName . '_Model_' . $model . 'Filter';
                 return $this->_search($args[0], $args[1], $modelController, $filterName, true);
                 break;
             case 'delete':
                 return $this->_delete($args[0], $modelController);
                 break;
         }
     }
     // call plugin method (see Tinebase_Pluggable_Abstract)
     return parent::__call($method, $args);
 }