Chris@18: grantPermissionsToTestedRole(['view test entity']); Chris@18: break; Chris@18: Chris@18: case 'POST': Chris@18: $this->grantPermissionsToTestedRole(['create entity_test entity_test_with_bundle entities']); Chris@18: break; Chris@18: Chris@18: case 'PATCH': Chris@18: case 'DELETE': Chris@18: $this->grantPermissionsToTestedRole(['administer entity_test content']); Chris@18: break; Chris@18: } Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected function createEntity() { Chris@18: // Set flag so that internal field 'internal_string_field' is created. Chris@18: // @see entity_test_entity_base_field_info() Chris@18: $this->container->get('state')->set('entity_test.internal_field', TRUE); Chris@18: $field_storage_definition = BaseFieldDefinition::create('string') Chris@18: ->setLabel('Internal field') Chris@18: ->setInternal(TRUE); Chris@18: \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('internal_string_field', 'entity_test', 'entity_test', $field_storage_definition); Chris@18: Chris@18: $entity_test = EntityTest::create([ Chris@18: 'name' => 'Llama', Chris@18: 'type' => 'entity_test', Chris@18: // Set a value for the internal field to confirm that it will not be Chris@18: // returned in normalization. Chris@18: // @see entity_test_entity_base_field_info(). Chris@18: 'internal_string_field' => [ Chris@18: 'value' => 'This value shall not be internal!', Chris@18: ], Chris@18: ]); Chris@18: $entity_test->setOwnerId(0); Chris@18: $entity_test->save(); Chris@18: Chris@18: return $entity_test; Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected function getExpectedDocument() { Chris@18: $self_url = Url::fromUri('base:/jsonapi/entity_test/entity_test/' . $this->entity->uuid())->setAbsolute()->toString(TRUE)->getGeneratedUrl(); Chris@18: $author = User::load(0); Chris@18: return [ Chris@18: 'jsonapi' => [ Chris@18: 'meta' => [ Chris@18: 'links' => [ Chris@18: 'self' => ['href' => 'http://jsonapi.org/format/1.0/'], Chris@18: ], Chris@18: ], Chris@18: 'version' => '1.0', Chris@18: ], Chris@18: 'links' => [ Chris@18: 'self' => ['href' => $self_url], Chris@18: ], Chris@18: 'data' => [ Chris@18: 'id' => $this->entity->uuid(), Chris@18: 'type' => 'entity_test--entity_test', Chris@18: 'links' => [ Chris@18: 'self' => ['href' => $self_url], Chris@18: ], Chris@18: 'attributes' => [ Chris@18: 'created' => (new \DateTime())->setTimestamp($this->entity->get('created')->value)->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339), Chris@18: 'field_test_text' => NULL, Chris@18: 'langcode' => 'en', Chris@18: 'name' => 'Llama', Chris@18: 'entity_test_type' => 'entity_test', Chris@18: 'drupal_internal__id' => 1, Chris@18: ], Chris@18: 'relationships' => [ Chris@18: 'user_id' => [ Chris@18: 'data' => [ Chris@18: 'id' => $author->uuid(), Chris@18: 'type' => 'user--user', Chris@18: ], Chris@18: 'links' => [ Chris@18: 'related' => ['href' => $self_url . '/user_id'], Chris@18: 'self' => ['href' => $self_url . '/relationships/user_id'], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ]; Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected function getPostDocument() { Chris@18: return [ Chris@18: 'data' => [ Chris@18: 'type' => 'entity_test--entity_test', Chris@18: 'attributes' => [ Chris@18: 'name' => 'Dramallama', Chris@18: ], Chris@18: ], Chris@18: ]; Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected function getExpectedUnauthorizedAccessMessage($method) { Chris@18: switch ($method) { Chris@18: case 'GET': Chris@18: return "The 'view test entity' permission is required."; Chris@18: Chris@18: case 'POST': Chris@18: return "The following permissions are required: 'administer entity_test content' OR 'administer entity_test_with_bundle content' OR 'create entity_test entity_test_with_bundle entities'."; Chris@18: Chris@18: default: Chris@18: return parent::getExpectedUnauthorizedAccessMessage($method); Chris@18: } Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected function getSparseFieldSets() { Chris@18: // EntityTest's owner field name is `user_id`, not `uid`, which breaks Chris@18: // nested sparse fieldset tests. Chris@18: return array_diff_key(parent::getSparseFieldSets(), array_flip([ Chris@18: 'nested_empty_fieldset', Chris@18: 'nested_fieldset_with_owner_fieldset', Chris@18: ])); Chris@18: } Chris@18: Chris@18: /** Chris@18: * {@inheritdoc} Chris@18: */ Chris@18: protected static function getExpectedCollectionCacheability(AccountInterface $account, array $collection, array $sparse_fieldset = NULL, $filtered = FALSE) { Chris@18: $cacheability = parent::getExpectedCollectionCacheability($account, $collection, $sparse_fieldset, $filtered); Chris@18: if ($filtered) { Chris@18: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']); Chris@18: } Chris@18: return $cacheability; Chris@18: } Chris@18: Chris@18: }