installEntitySchema('user'); $this->installEntitySchema('comment'); $this->installEntitySchema('entity_test'); // Create the anonymous role. $this->installConfig(['user']); // Enable another language. ConfigurableLanguage::createFromLangcode('ur')->save(); // Rebuild the container to update the default language container variable. $this->container->get('kernel')->rebuildContainer(); // Create an anonymous user. $storage = \Drupal::entityTypeManager()->getStorage('user'); // Insert a row for the anonymous user. $storage ->create([ 'uid' => 0, 'name' => '', 'status' => 0, ]) ->save(); // Created admin role. $admin_role = Role::create([ 'id' => 'admin', 'permissions' => ['administer comments'], ]); $admin_role->save(); // Create the admin user. $this->adminUser = User::create([ 'name' => $this->randomMachineName(), 'roles' => [$admin_role->id()], ]); $this->adminUser->save(); // Create a comment type. CommentType::create([ 'id' => 'comment', 'label' => 'Default comments', 'target_entity_type_id' => 'entity_test', 'description' => 'Default comment field', ])->save(); // Create a commented entity. $entity = EntityTest::create(); $entity->name->value = $this->randomMachineName(); $entity->save(); // Create some comments. $comment = Comment::create([ 'subject' => 'My comment title', 'uid' => $this->adminUser->id(), 'entity_type' => 'entity_test', 'comment_type' => 'comment', 'status' => 1, 'entity_id' => $entity->id(), ]); $comment->save(); $this->comments[] = $comment; $comment_anonymous = Comment::create([ 'subject' => 'Anonymous comment title', 'uid' => 0, 'name' => 'barry', 'mail' => 'test@example.com', 'homepage' => 'https://example.com', 'entity_type' => 'entity_test', 'comment_type' => 'comment', 'created' => 123456, 'status' => 1, 'entity_id' => $entity->id(), ]); $comment_anonymous->save(); $this->comments[] = $comment_anonymous; } /** * Tests comment admin view filters. */ public function testFilters() { $this->doTestFilters('page_published'); // Unpublish the comments to test the Unapproved comments tab. foreach ($this->comments as $comment) { $comment->setUnpublished(); $comment->save(); } $this->doTestFilters('page_unapproved'); } /** * Tests comment admin view display. * * @param string $display_id * The display ID. */ protected function doTestFilters($display_id) { $comment = $this->comments[0]; $comment_anonymous = $this->comments[1]; /* @var \Drupal\Core\Session\AccountSwitcherInterface $account_switcher */ $account_switcher = \Drupal::service('account_switcher'); /* @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service('renderer'); $account_switcher->switchTo($this->adminUser); $executable = Views::getView('comment'); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); // Assert the exposed filters on the admin page. $this->assertField('subject'); $this->assertField('author_name'); $this->assertField('langcode'); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(2, count($elements), 'There are two comments on the page.'); $this->assertText($comment->label()); $this->assertText($comment_anonymous->label()); $executable->destroy(); // Test the Subject filter. $executable->setExposedInput(['subject' => 'Anonymous']); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(1, count($elements), 'Only anonymous comment is visible.'); $this->assertNoText($comment->label()); $this->assertText($comment_anonymous->label()); $executable->destroy(); $executable->setExposedInput(['subject' => 'My comment']); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(1, count($elements), 'Only admin comment is visible.'); $this->assertText($comment->label()); $this->assertNoText($comment_anonymous->label()); $executable->destroy(); // Test the combine filter using author name. $executable->setExposedInput(['author_name' => 'barry']); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(1, count($elements), 'Only anonymous comment is visible.'); $this->assertNoText($comment->label()); $this->assertText($comment_anonymous->label()); $executable->destroy(); // Test the combine filter using username. $executable->setExposedInput(['author_name' => $this->adminUser->label()]); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(1, count($elements), 'Only admin comment is visible.'); $this->assertText($comment->label()); $this->assertNoText($comment_anonymous->label()); $executable->destroy(); // Test the language filter. $executable->setExposedInput(['langcode' => '***LANGUAGE_site_default***']); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(2, count($elements), 'Both comments are visible.'); $this->assertText($comment->label()); $this->assertText($comment_anonymous->label()); $executable->destroy(); // Tests comment translation filter. if (!$comment->hasTranslation('ur')) { // If we don't have the translation then create one. $comment_translation = $comment->addTranslation('ur', ['subject' => 'ur title']); $comment_translation->save(); } else { // If we have the translation then unpublish it. $comment_translation = $comment->getTranslation('ur'); $comment_translation->setUnpublished(); $comment_translation->save(); } if (!$comment_anonymous->hasTranslation('ur')) { // If we don't have the translation then create one. $comment_anonymous_translation = $comment_anonymous->addTranslation('ur', ['subject' => 'ur Anonymous title']); $comment_anonymous_translation->save(); } else { // If we have the translation then unpublish it. $comment_anonymous_translation = $comment_anonymous->getTranslation('ur'); $comment_anonymous_translation->setUnpublished(); $comment_anonymous_translation->save(); } $executable->setExposedInput(['langcode' => 'ur']); $build = $executable->preview($display_id); $this->setRawContent($renderer->renderRoot($build)); $this->verbose($this->getRawContent()); $elements = $this->cssSelect('input[type="checkbox"]'); $this->assertEquals(2, count($elements), 'Both comments are visible.'); $this->assertNoText($comment->label()); $this->assertNoText($comment_anonymous->label()); $this->assertText($comment_translation->label()); $this->assertText($comment_anonymous_translation->label()); $executable->destroy(); } }