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()); } }