grantPermission('access comments'); $user_role->save(); } /** * {@inheritdoc} */ protected function createEntity() { // Create a "bar" bundle for the "entity_test" entity type and create. $bundle = 'bar'; entity_test_create_bundle($bundle, NULL, 'entity_test'); // Create a comment field on this bundle. $this->addDefaultCommentField('entity_test', 'bar', 'comment'); // Display comments in a flat list; threaded comments are not render cached. $field = FieldConfig::loadByName('entity_test', 'bar', 'comment'); $field->setSetting('default_mode', CommentManagerInterface::COMMENT_MODE_FLAT); $field->save(); // Create a "Camelids" test entity that the comment will be assigned to. $this->entityTestCamelid = EntityTest::create([ 'name' => 'Camelids', 'type' => 'bar', ]); $this->entityTestCamelid->save(); // Create a "Llama" comment. $comment = Comment::create([ 'subject' => 'Llama', 'comment_body' => [ 'value' => 'The name "llama" was adopted by European settlers from native Peruvians.', 'format' => 'plain_text', ], 'entity_id' => $this->entityTestCamelid->id(), 'entity_type' => 'entity_test', 'field_name' => 'comment', 'status' => CommentInterface::PUBLISHED, ]); $comment->save(); return $comment; } /** * Test that comments correctly invalidate the cache tag of their host entity. */ public function testCommentEntity() { $this->verifyPageCache($this->entityTestCamelid->urlInfo(), 'MISS'); $this->verifyPageCache($this->entityTestCamelid->urlInfo(), 'HIT'); // Create a "Hippopotamus" comment. $this->entityTestHippopotamidae = EntityTest::create([ 'name' => 'Hippopotamus', 'type' => 'bar', ]); $this->entityTestHippopotamidae->save(); $this->verifyPageCache($this->entityTestHippopotamidae->urlInfo(), 'MISS'); $this->verifyPageCache($this->entityTestHippopotamidae->urlInfo(), 'HIT'); $hippo_comment = Comment::create([ 'subject' => 'Hippopotamus', 'comment_body' => [ 'value' => 'The common hippopotamus (Hippopotamus amphibius), or hippo, is a large, mostly herbivorous mammal in sub-Saharan Africa', 'format' => 'plain_text', ], 'entity_id' => $this->entityTestHippopotamidae->id(), 'entity_type' => 'entity_test', 'field_name' => 'comment', 'status' => CommentInterface::PUBLISHED, ]); $hippo_comment->save(); // Ensure that a new comment only invalidates the commented entity. $this->verifyPageCache($this->entityTestCamelid->urlInfo(), 'HIT'); $this->verifyPageCache($this->entityTestHippopotamidae->urlInfo(), 'MISS'); $this->assertText($hippo_comment->getSubject()); // Ensure that updating an existing comment only invalidates the commented // entity. $this->entity->save(); $this->verifyPageCache($this->entityTestCamelid->urlInfo(), 'MISS'); $this->verifyPageCache($this->entityTestHippopotamidae->urlInfo(), 'HIT'); } /** * {@inheritdoc} */ protected function getAdditionalCacheContextsForEntity(EntityInterface $entity) { return []; } /** * {@inheritdoc} * * Each comment must have a comment body, which always has a text format. */ protected function getAdditionalCacheTagsForEntity(EntityInterface $entity) { /** @var \Drupal\comment\CommentInterface $entity */ return [ 'config:filter.format.plain_text', 'user:' . $entity->getOwnerId(), 'user_view', ]; } }