admin_ui-8.x-1.x-dev/tests/src/Functional/rest/UserPermissionsResourceTest.php
tests/src/Functional/rest/UserPermissionsResourceTest.php
<?php namespace Drupal\Tests\admin_ui_support\Functional\rest; use Drupal\Component\Serialization\Json; use Drupal\Core\Url; use Drupal\rest\RestResourceConfigInterface; use Drupal\Tests\rest\Functional\CookieResourceTestTrait; use Drupal\Tests\rest\Functional\ResourceTestBase; /** * Tests the user permissions resource. * * @group admin_ui_support */ class UserPermissionsResourceTest extends ResourceTestBase { use CookieResourceTestTrait; /** * {@inheritdoc} */ protected static $format = 'hal_json'; /** * {@inheritdoc} */ protected static $mimeType = 'application/hal+json'; /** * {@inheritdoc} */ protected static $auth = 'cookie'; /** * {@inheritdoc} */ protected static $resourceConfigId = 'permissions_collection'; /** * {@inheritdoc} */ public static $modules = ['hal', 'user', 'rest', 'admin_ui_support']; /** * {@inheritdoc} */ public function setUp() { parent::setUp(); $auth = isset(static::$auth) ? [static::$auth] : []; $this->provisionResource([static::$format], $auth); } /** * {@inheritdoc} */ protected function provisionResource($formats = [], $authentication = [], array $methods = ['GET', 'POST', 'PATCH', 'DELETE']) { $this->resourceConfigStorage->create([ 'id' => static::$resourceConfigId, 'granularity' => RestResourceConfigInterface::RESOURCE_GRANULARITY, 'configuration' => [ 'methods' => ['GET'], 'formats' => $formats, 'authentication' => $authentication, ], 'status' => TRUE, ])->save(); $this->refreshTestStateAfterRestConfigChange(); } /** * Writes a log messages and retrieves it via the REST API. */ public function testPermissionsCollection() { $this->initAuthentication(); $url = Url::fromRoute('rest.permissions_collection.GET', ['_format' => static::$format]); $request_options = $this->getAuthenticationRequestOptions('GET'); $response = $this->request('GET', $url, $request_options); $this->assertResourceResponse(403, '{"message":"The \u0027administer permissions\u0027 permission is required."}', $response); // create a user account that has the required permissions to read // the watchdog resource via the rest api. $this->setUpAuthorization('GET'); $response = $this->request('GET', $url, $request_options); // @todo This response should be a response 'MISS' not 'UNCACHEABLE'. $this->assertResourceResponse(200, false, $response, ['config:rest.resource.permissions_collection', 'config:rest.settings', 'http_response'], ['user.permissions'], FALSE, 'UNCACHEABLE'); $permissions = json::decode((string) $response->getBody()); $permission_handler = \drupal::service('user.permissions')->getPermissions(); $permission_ids = []; foreach ($permissions as $permission) { $permission_ids[] = $permission['id']; if ($permission['id'] === 'administer permissions') { $this->assertSame([ 'title' => 'Administer permissions', 'restrict access' => TRUE, 'description' => NULL, 'provider' => 'user', 'id' => 'administer permissions', 'provider_label' => 'User', ], $permission); } } $this->assertSame(array_keys($permission_handler), $permission_ids); } /** * {@inheritdoc} */ protected function setUpAuthorization($method) { switch ($method) { case 'GET': $this->grantPermissionsToTestedRole(['administer permissions']); break; default: throw new \UnexpectedValueException(); } } /** * {@inheritdoc} */ protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {} /** * {@inheritdoc} */ protected function getExpectedUnauthorizedAccessMessage($method) {} /** * {@inheritdoc} */ protected function getExpectedUnauthorizedAccessCacheability() {} }