moderation_dashboard-8.x-1.0-beta2/tests/src/Functional/ModerationDashboardPersonalizedComponentsTest.php

tests/src/Functional/ModerationDashboardPersonalizedComponentsTest.php
<?php

namespace Drupal\Tests\moderation_dashboard\Functional;

use Drupal\Core\Session\AccountInterface;

/**
 * Tests personalized moderation dashboard components.
 *
 * @group moderation_dashboard
 */
class ModerationDashboardPersonalizedComponentsTest extends ModerationDashboardTestBase {

  /**
   * Moderator user.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected AccountInterface $moderatorUser;

  /**
   * Regular user without moderation dashboard permissions.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected AccountInterface $regularUser;

  /**
   * Personalized elements to test.
   *
   * @var array
   *   An array of text asserts keyed by the CSS selector of the element to
   *   assert.
   *   - contains: array of strings patters which have to be found. '%s' will be
   *     replaced by the display name of the user in context.
   *   - not_contains: array of strings patterns shouldn't be found. '%s' will
   *     be replaced by the display name of the user in context.
   *   - empty: the expected empty message of the component (string).
   */
  protected array $personalizedModerationElements = [
    // Your drafts.
    '.view-id-content_moderation_dashboard_in_review.view-display-id-block_3' => [
      'contains' => ['Draft node of %s'],
      'not_contains' => ['Published node of %s'],
      'empty' => 'No draft content was found.',
    ],
    // Your activity.
    '.view-id-moderation_dashboard_recent_changes.view-display-id-block_2' => [
      'contains' => ['Published node of %s', 'Draft node of %s'],
      'empty' => 'Activity log is empty.',
    ],
    // Content you created.
    '.view-id-moderation_dashboard_recently_created.view-display-id-block_2' => [
      'contains' => ['Published node of %s', 'Draft node of %s'],
      'empty' => 'No content was found.',
    ],
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->moderatorUser = $this->drupalCreateUser($this->userPermissions, 'moderator user');
    $this->regularUser = $this->drupalCreateUser([
      'access content',
      'use moderation dashboard',
    ], 'regular user');

    foreach ([$this->user, $this->moderatorUser, $this->regularUser] as $user) {
      $this->drupalCreateNode([
        'title' => 'Draft node of ' . $user->getDisplayName(),
        'moderation_state' => 'draft',
        'uid' => $user->id(),
      ]);

      $this->drupalCreateNode([
        'title' => 'Published node of ' . $user->getDisplayName(),
        'moderation_state' => 'published',
        'uid' => $user->id(),
      ]);
    }

    $this->drupalLogin($this->user);
  }

  /**
   * Tests that blocks and other elements exist on the user dashboard.
   *
   * @throws \Behat\Mink\Exception\ElementNotFoundException
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  public function testModerationElement(): void {
    $users = [$this->user, $this->moderatorUser, $this->regularUser];

    foreach ($users as $delta => $user) {
      $this->drupalGet('/user/' . $user->id() . '/moderation-dashboard');

      // Iterating over personalized elements.
      foreach ($this->personalizedModerationElements as $selector => $asserts) {
        $moderation_element = $this->assertSession()->elementExists('css', $selector);
        $moderation_element_text = $moderation_element->getText();

        if (!empty($asserts['empty'])) {
          $this->assertFalse(strpos($moderation_element_text, $asserts['empty']));
        }

        if (!empty($asserts['contains'])) {
          foreach ($asserts['contains'] as $pattern_to_find) {
            $this->assertNotSame(FALSE, strpos($moderation_element_text, sprintf($pattern_to_find, $user->getDisplayName())));
          }
        }

        if (!empty($asserts['not_contains'])) {
          foreach ($asserts['not_contains'] as $pattern_should_not_find) {
            $this->assertFalse(strpos($moderation_element_text, sprintf($pattern_should_not_find, $user->getDisplayName())));
          }
        }

        $other_users = $users;
        unset($other_users[$delta]);

        foreach ($other_users as $other_user) {
          $this->assertFalse(strpos($moderation_element->getText(), sprintf('%s', $other_user->getDisplayName())));
        }
      }
    }

    $user_without_content = $this->drupalCreateUser([
      'access content',
      'use moderation dashboard',
    ]);

    // Check user's dashboard who does not own node revisions at all.
    $this->drupalGet('/user/' . $user_without_content->id() . '/moderation-dashboard');
    // Verify that every personalized component shows the expected empty
    // message.
    foreach ($this->personalizedModerationElements as $selector => $asserts) {
      $moderation_element = $this->assertSession()->elementExists('css', $selector);

      if (!empty($asserts['empty'])) {
        $this->assertNotSame(FALSE, strpos($moderation_element->getText(), $asserts['empty']));
      }
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc