preview_site-1.1.2/tests/src/Functional/PreviewSiteBuildAdministrationTest.php

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

namespace Drupal\Tests\preview_site\Functional;

use Drupal\Core\Url;
use Drupal\node\Entity\Node;
use Drupal\preview_site\Entity\PreviewSiteBuildInterface;
use Drupal\preview_site\Entity\PreviewStrategy;
use Drupal\preview_site\Entity\PreviewStrategyInterface;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
use Drupal\Tests\preview_site\Traits\PreviewSiteTestTrait;
use Drupal\views\Tests\ViewTestData;

/**
 * Defines a test for administering preview site builds.
 *
 * @group preview_site
 * @covers \Drupal\preview_site\Form\PreviewSiteBuildForm
 * @covers \Drupal\preview_site\EntityHandlers\PreviewSiteBuildListBuilder
 */
class PreviewSiteBuildAdministrationTest extends BrowserTestBase {

  use PreviewSiteTestTrait;
  use ContentTypeCreationTrait;
  use ContentModerationTestTrait;

  /**
   * User interface.
   *
   * @var \Drupal\user\UserInterface
   */
  protected $adminUser;

  /**
   * Views to be enabled.
   *
   * @var array
   */
  public static $testViews = ['preview_site_builds'];

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'preview_site',
    'preview_site_test',
    'dynamic_entity_reference',
    'block',
    'field_ui',
    'options',
    'datetime',
    'tome_static',
    'field',
    'node',
    'options',
    'text',
    'views',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * Expiry date.
   *
   * @var \DateTime
   */
  protected $expire;

  protected PreviewStrategyInterface $strategy;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->adminUser = $this->createUser([
      'administer preview_site strategies',
      'administer preview_site builds',
      'access administration pages',
    ]);
    $this->drupalPlaceBlock('local_actions_block');
    $this->createContentType(['type' => 'page']);

    $this->prefix = $this->randomMachineName();
    $this->strategy = PreviewStrategy::create([
      'id' => $this->randomMachineName(),
      'label' => $this->randomMachineName(),
      'generate' => 'preview_site_tome',
      'deploy' => 'test',
      'generateSettings' => [],
      'deploySettings' => [
        'prefix' => $this->prefix,
      ],
    ]);
    $this->expire = new \DateTime('now');
    $this->strategy->save();
  }

  /**
   * Tests admin UI.
   */
  public function testPreviewSiteBuildUi(): void {
    $this->assertThatAnonymousCantViewList();
    $this->drupalLogin($this->adminUser);
    $this->assertThatAdminCanViewPreviewSiteBuildList();
    $build = $this->assertAdminCanAddPreviewSites();
    $this->assertAdminCanEditPreviewSites($build);
    $this->drupalLogout();
    $this->assertAnonymousCannotEditPreviewSites($build);
  }

  /**
   * Tests admin UI with a view enabled.
   */
  public function testPreviewSiteBuildViewsUi(): void {
    ViewTestData::createTestViews(static::class, ['preview_site_test']);

    $this->assertThatAnonymousCantViewList();
    $this->drupalLogin($this->adminUser);
    $this->assertThatAdminCanViewPreviewSiteBuildList();
    $build = $this->assertAdminCanAddPreviewSites();

    $this->drupalGet(Url::fromRoute('entity.preview_site_build.collection'));

    $assert = $this->assertSession();
    $assert->elementTextEquals('css', 'tbody .views-field-label', $build->label());
    $assert->elementTextEquals('css', 'tbody .views-field-preview-site-item-count', '1');
  }

  /**
   * Tests that admin can view preview site build list.
   */
  private function assertThatAdminCanViewPreviewSiteBuildList(): void {
    $this->drupalGet(Url::fromRoute('entity.preview_site_build.collection'));
    $assert = $this->assertSession();
    $assert->statusCodeEquals(200);
    $assert->linkExists('Add preview site build');
  }

  /**
   * Tests anonymous can't view list.
   *
   * @throws \Behat\Mink\Exception\ExpectationException
   */
  private function assertThatAnonymousCantViewList(): void {
    $this->drupalGet(Url::fromRoute('entity.preview_site_build.collection'));
    $this->assertSession()->statusCodeEquals(403);
  }

  /**
   * Tests admin can add preview sites.
   *
   * @return \Drupal\preview_site\Entity\PreviewSiteBuildInterface
   *   Created item
   */
  private function assertAdminCanAddPreviewSites() : PreviewSiteBuildInterface {
    $this->clickLink('Add preview site build');
    $name = $this->randomMachineName();
    $node = Node::create([
      'status' => 1,
      'title' => $this->randomMachineName(),
      'type' => 'page',
    ]);
    $node->save();

    $this->submitForm([
      'label[0][value]' => $name,
      'contents[0][target_id]' => sprintf('%s (%s)', $node->label(), $node->id()),
      'expiry_date[0][value][date]' => $this->expire->format('Y-m-d'),
      'expiry_date[0][value][time]' => $this->expire->format('h:i:s'),
    ], 'Save');
    $this->assertSession()->pageTextContains('Created new preview site build');
    $items = \Drupal::entityTypeManager()->getStorage('preview_site_build')->loadByProperties(['label' => $name]);
    return reset($items);
  }

  /**
   * Assert admins can edit preview site build.
   *
   * @param \Drupal\preview_site\Entity\PreviewSiteBuildInterface $build
   *   Preview site build.
   */
  private function assertAdminCanEditPreviewSites(PreviewSiteBuildInterface $build): void {
    $this->drupalGet($build->toUrl('edit-form'));
    $assert = $this->assertSession();
    $assert->fieldValueEquals('label[0][value]', $build->label());
    $node = $build->contents->entity;
    $assert->fieldValueEquals('contents[0][target_id]', sprintf('%s (%s)', $node->label(), $node->id()));
    $assert->fieldValueEquals('expiry_date[0][value][date]', $this->expire->format('Y-m-d'));
    $new_name = $this->randomMachineName();

    $this->submitForm([
      'label[0][value]' => $new_name,
      'contents[0][target_id]' => sprintf('%s (%s)', $node->label(), $node->id()),
    ], 'Save');
    $assert->pageTextContains('Updated preview site build');
  }

  /**
   * Assert admins can't edit preview site build.
   *
   * @param \Drupal\preview_site\Entity\PreviewSiteBuildInterface $build
   *   Preview site build.
   */
  private function assertAnonymousCannotEditPreviewSites(PreviewSiteBuildInterface $build): void {
    $this->drupalGet($build->toUrl('edit-form'));
    $this->assertSession()->statusCodeEquals(403);
  }

}

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

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