protected function doPermissionsTest($action, array $params, array $permissions = null, $expectedError = null)
 {
     global $wgUser, $wgGroupPermissions;
     $this->setMwGlobals('wgUser', clone $wgUser);
     $this->setMwGlobals('wgGroupPermissions', $wgGroupPermissions);
     PermissionsHelper::applyPermissions($permissions);
     try {
         $params['action'] = $action;
         $this->doApiRequestWithToken($params, null, $wgUser);
         if ($expectedError !== null) {
             $this->fail('API call should have failed with a permission error!');
         } else {
             // the below is to avoid the tests being marked incomplete
             $this->assertTrue(true);
         }
     } catch (UsageException $ex) {
         if ($expectedError !== true) {
             $this->assertEquals($expectedError, $ex->getCodeString(), 'API did not return expected error code. Got error message ' . $ex);
         }
     }
 }
 /**
  * @dataProvider provideGetPermissionStatusForEntity
  */
 public function testGetPermissionStatusForEntity($action, array $permissions, $id, array $expectations)
 {
     global $wgUser;
     $entity = new Item();
     if ($id) {
         // "exists"
         $entity->setId(new ItemId($id));
     }
     $this->stashMwGlobals('wgUser');
     $this->stashMwGlobals('wgGroupPermissions');
     PermissionsHelper::applyPermissions(array('*' => $permissions, 'user' => $permissions, 'autoconfirmed' => $permissions, 'emailconfirmed' => $permissions), array());
     $factory = $this->newFactory();
     if (isset($expectations['getPermissionStatusForEntity'])) {
         $status = $factory->getPermissionStatusForEntity($wgUser, $action, $entity);
         $this->assertEquals($expectations['getPermissionStatusForEntity'], $status->isOK());
     }
     if (isset($expectations['getPermissionStatusForEntityType'])) {
         $status = $factory->getPermissionStatusForEntityType($wgUser, $action, $entity->getType());
         $this->assertEquals($expectations['getPermissionStatusForEntityType'], $status->isOK());
     }
     if (isset($expectations['getPermissionStatusForEntityId'])) {
         $status = $factory->getPermissionStatusForEntityId($wgUser, $action, $entity->getId());
         $this->assertEquals($expectations['getPermissionStatusForEntityId'], $status->isOK());
     }
 }