function setUp()
 {
     parent::setUp();
     $this->modules = array('one' => new CRM_Core_Module('com.example.one', TRUE), 'two' => new CRM_Core_Module('com.example.two', TRUE));
     $this->assertDBQuery(0, 'SELECT count(*) FROM civicrm_managed');
     $this->assertDBQuery(0, 'SELECT count(*) FROM civicrm_option_value WHERE name like "CRM_Example_%"');
     $this->fixtures['com.example.one-foo'] = array('module' => 'com.example.one', 'name' => 'foo', 'entity' => 'CustomSearch', 'params' => array('version' => 3, 'class_name' => 'CRM_Example_One_Foo', 'is_reserved' => 1));
     $this->fixtures['com.example.one-bar'] = array('module' => 'com.example.one', 'name' => 'bar', 'entity' => 'CustomSearch', 'params' => array('version' => 3, 'class_name' => 'CRM_Example_One_Bar', 'is_reserved' => 1));
     $this->apiKernel = \Civi\Core\Container::singleton()->get('civi_api_kernel');
     $this->adhocProvider = new \Civi\API\Provider\AdhocProvider(3, 'CustomSearch');
     $this->apiKernel->registerApiProvider($this->adhocProvider);
 }
 public function setUp()
 {
     $this->useTransaction(TRUE);
     parent::setUp();
     $this->modules = array('one' => new CRM_Core_Module('com.example.one', TRUE), 'two' => new CRM_Core_Module('com.example.two', TRUE));
     // Testing on drupal-demo fails because some extensions have mgd ents.
     CRM_Core_DAO::singleValueQuery('DELETE FROM civicrm_managed');
     $this->fixtures['com.example.one-foo'] = array('module' => 'com.example.one', 'name' => 'foo', 'entity' => 'CustomSearch', 'params' => array('version' => 3, 'class_name' => 'CRM_Example_One_Foo', 'is_reserved' => 1));
     $this->fixtures['com.example.one-bar'] = array('module' => 'com.example.one', 'name' => 'bar', 'entity' => 'CustomSearch', 'params' => array('version' => 3, 'class_name' => 'CRM_Example_One_Bar', 'is_reserved' => 1));
     $this->apiKernel = \Civi::service('civi_api_kernel');
     $this->adhocProvider = new \Civi\API\Provider\AdhocProvider(3, 'CustomSearch');
     $this->apiKernel->registerApiProvider($this->adhocProvider);
 }
 protected function setUp()
 {
     parent::setUp();
     \CRM_Core_DAO_AllCoreTables::init(TRUE);
     \CRM_Core_DAO_AllCoreTables::registerEntityType('FakeFile', 'CRM_Fake_DAO_FakeFile', 'fake_file');
     $fileProvider = new \Civi\API\Provider\StaticProvider(3, 'FakeFile', array('id', 'entity_table', 'entity_id'), array(), array(array('id' => self::FILE_WIDGET_ID, 'entity_table' => 'fake_widget', 'entity_id' => self::WIDGET_ID), array('id' => self::FILE_FORBIDDEN_ID, 'entity_table' => 'fake_forbidden', 'entity_id' => self::FORBIDDEN_ID)));
     \CRM_Core_DAO_AllCoreTables::registerEntityType('Widget', 'CRM_Fake_DAO_Widget', 'fake_widget');
     $widgetProvider = new \Civi\API\Provider\StaticProvider(3, 'Widget', array('id', 'title'), array(), array(array('id' => self::WIDGET_ID, 'title' => 'my widget')));
     \CRM_Core_DAO_AllCoreTables::registerEntityType('Forbidden', 'CRM_Fake_DAO_Forbidden', 'fake_forbidden');
     $forbiddenProvider = new \Civi\API\Provider\StaticProvider(3, 'Forbidden', array('id', 'label'), array('create' => \CRM_Core_Permission::ALWAYS_DENY_PERMISSION, 'get' => \CRM_Core_Permission::ALWAYS_DENY_PERMISSION, 'delete' => \CRM_Core_Permission::ALWAYS_DENY_PERMISSION), array(array('id' => self::FORBIDDEN_ID, 'label' => 'my forbidden')));
     $this->dispatcher = new EventDispatcher();
     $this->kernel = new Kernel($this->dispatcher);
     $this->kernel->registerApiProvider($fileProvider)->registerApiProvider($widgetProvider)->registerApiProvider($forbiddenProvider);
     $this->dispatcher->addSubscriber(new DynamicFKAuthorization($this->kernel, 'FakeFile', array('create', 'get'), "select\n      case %1\n        when " . self::FILE_WIDGET_ID . " then 1\n        when " . self::FILE_FORBIDDEN_ID . " then 1\n        else 0\n      end as is_valid,\n      case %1\n        when " . self::FILE_WIDGET_ID . " then 'fake_widget'\n        when " . self::FILE_FORBIDDEN_ID . " then 'fake_forbidden'\n        else null\n      end as entity_table,\n      case %1\n        when " . self::FILE_WIDGET_ID . " then " . self::WIDGET_ID . "\n        when " . self::FILE_FORBIDDEN_ID . " then " . self::FORBIDDEN_ID . "\n        else null\n      end as entity_id\n      ", "select", array('fake_widget', 'fake_forbidden')));
 }
 public function testResolveException()
 {
     $test = $this;
     $this->dispatcher->addListener(Events::RESOLVE, function () {
         throw new \API_Exception('Oh My God', 'omg', array('the' => 'badzes'));
     }, Events::W_EARLY);
     $this->dispatcher->addListener(Events::EXCEPTION, function (\Civi\API\Event\ExceptionEvent $event) use($test) {
         $test->assertEquals('Oh My God', $event->getException()->getMessage());
     });
     $this->kernel->registerApiProvider($this->createWidgetFrobnicateProvider());
     $result = $this->kernel->run('Widget', 'frobnicate', array('version' => self::MOCK_VERSION));
     $expectedEventSequence = array(array('name' => Events::RESOLVE, 'class' => 'Civi\\API\\Event\\ResolveEvent'), array('name' => Events::EXCEPTION, 'class' => 'Civi\\API\\Event\\ExceptionEvent'));
     $this->assertEquals($expectedEventSequence, $this->actualEventSequence);
     $this->assertEquals('Oh My God', $result['error_message']);
     $this->assertEquals('omg', $result['error_code']);
     $this->assertEquals('badzes', $result['the']);
 }
 /**
  * @param array $apiRequest
  *   Array(entity=>$,action=>$,params=>$,expectedResults=>$).
  * @param array $rules
  *   Whitelist - list of allowed API calls/patterns.
  * @param bool $expectSuccess
  *   TRUE if the call should succeed.
  *   Success implies that the 'expectedResults' are returned.
  *   Failure implies that the standard error message is returned.
  * @dataProvider restrictionCases
  */
 public function testEach($apiRequest, $rules, $expectSuccess)
 {
     \CRM_Core_DAO_AllCoreTables::init(TRUE);
     $recs = $this->getFixtures();
     \CRM_Core_DAO_AllCoreTables::registerEntityType('Widget', 'CRM_Fake_DAO_Widget', 'fake_widget');
     $widgetProvider = new \Civi\API\Provider\StaticProvider(3, 'Widget', array('id', 'widget_type', 'provider', 'title'), array(), $recs['widget']);
     \CRM_Core_DAO_AllCoreTables::registerEntityType('Sprocket', 'CRM_Fake_DAO_Sprocket', 'fake_sprocket');
     $sprocketProvider = new \Civi\API\Provider\StaticProvider(3, 'Sprocket', array('id', 'sprocket_type', 'widget_id', 'provider', 'title', 'comment'), array(), $recs['sprocket']);
     $whitelist = WhitelistRule::createAll($rules);
     $dispatcher = new EventDispatcher();
     $kernel = new Kernel($dispatcher);
     $kernel->registerApiProvider($sprocketProvider);
     $kernel->registerApiProvider($widgetProvider);
     $dispatcher->addSubscriber(new WhitelistSubscriber($whitelist));
     $dispatcher->addSubscriber(new ChainSubscriber());
     $apiRequest['params']['debug'] = 1;
     $apiRequest['params']['check_permissions'] = 'whitelist';
     $result = $kernel->run($apiRequest['entity'], $apiRequest['action'], $apiRequest['params']);
     if ($expectSuccess) {
         $this->assertAPISuccess($result);
         $this->assertTrue(is_array($apiRequest['expectedResults']));
         $this->assertTreeEquals($apiRequest['expectedResults'], $result['values']);
     } else {
         $this->assertAPIFailure($result);
         $this->assertRegExp('/The request does not match any active API authorizations./', $result['error_message']);
     }
 }