media_library_media_modify-1.0.x-dev/tests/src/FunctionalJavascript/MediaLibraryMediaModifyMultiEditOnUploadTest.php

tests/src/FunctionalJavascript/MediaLibraryMediaModifyMultiEditOnUploadTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\media_library_media_modify\FunctionalJavascript;

use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Tests\media_library\FunctionalJavascript\MediaLibraryTestBase;
use Drupal\Tests\media_library_media_modify\Traits\AssertAnnounceContainsTrait;
use Drupal\Tests\TestFileCreationTrait;

/**
 * Test the views edit link in the media library.
 *
 * @group media_library_media_modify
 */
class MediaLibraryMediaModifyMultiEditOnUploadTest extends MediaLibraryTestBase {
  use AssertAnnounceContainsTrait;
  use TestFileCreationTrait {
    getTestFiles as drupalGetTestFiles;
  }

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['field_ui', 'media_library_media_modify'];

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

    // Create a user who can use the Media library.
    $user = $this->drupalCreateUser([
      'access content',
      'create basic_page content',
      'edit own basic_page content',
      'view media',
      'create media',
      'administer media',
      'update any media',
      'update media',
      'administer media fields',
      'administer media form display',
      'administer media display',
      'administer media types',
    ]);
    $this->drupalLogin($user);
  }

  /**
   * Test the edit link in media form.
   */
  public function testMultiEdit(): void {
    $display_repository = $this->container->get('entity_display.repository');

    // Add custom field an enable it in 'media_library' form display.
    FieldStorageConfig::create([
      'field_name' => 'field_media_multi_test',
      'entity_type' => 'media',
      'type' => 'text',
      'cardinality' => 1,
    ])->save();
    FieldConfig::create([
      'entity_type' => 'media',
      'field_name' => 'field_media_multi_test',
      'bundle' => 'type_three',
      'label' => 'Test text-field',
    ])->save();
    $display_repository->getFormDisplay('media', 'type_three', 'media_library')
      ->setComponent('field_media_multi_test', [
        'type' => 'text_textfield',
        'weight' => 0,
      ])
      ->save();

    // Multiple media edit forms should show without config.
    $this->drupalGet('node/add/basic_page');
    $this->uploadRandomFiles('field_unlimited_media', 2);

    $this->assertElementExistsAfterWait('css', '[data-drupal-selector="edit-media"]');
    $this->assertElementExistsAfterWait('css', '[data-drupal-selector="edit-media-1-fields-field-media-multi-test-0-value"]');
    $this->assertJsCondition("Array.from(document.querySelectorAll('form'))
      .filter((form) => { return (form.action.indexOf('multi_edit_on_create%5D=1') !== -1) }).length === 0");

    // Enable multi edit.
    $display_repository->getFormDisplay('node', 'basic_page', 'default')
      ->setComponent('field_unlimited_media', [
        'type' => 'media_library_media_modify_widget',
        'settings' => [
          'multi_edit_on_create' => TRUE,
        ],
      ])->save();

    // Dedicated multi edit form should show when configured properly and more
    // than one image is uploaded.
    $this->drupalGet('node/add/basic_page');
    $this->uploadRandomFiles('field_unlimited_media', 2);
    $this->assertJsCondition("Array.from(document.querySelectorAll('form'))
      .filter((form) => { return (form.action.indexOf('multi_edit_on_create%5D=1') !== -1) }).length === 1");
    $this->assertSession()->elementNotExists('css', '[data-drupal-selector="edit-media"]');
    $this->assertElementExistsAfterWait('css', '[data-drupal-selector="edit-field-media-multi-test-0-value"]');

    // Multi edit not enabled when only one file is uploaded.
    $this->drupalGet('node/add/basic_page');
    $this->uploadRandomFiles('field_unlimited_media', 1);
    $this->assertElementExistsAfterWait('css', '[data-drupal-selector="edit-media"]');
    $this->assertElementExistsAfterWait('css', '[data-drupal-selector="edit-media-0-fields-field-media-multi-test-0-value"]');
    $this->assertSession()->elementNotExists('css', '[data-drupal-selector="edit-field-media-multi-test-0-value"]');
  }

  /**
   * Upload files helper.
   *
   * @param string $field_name
   *   Base (media) field name.
   * @param int $count
   *   Number of files.
   */
  private function uploadRandomFiles(string $field_name, int $count = 1): void {
    $this->openMediaLibraryForField($field_name);
    $this->switchToMediaType('Three');
    $this->assertAnnounceContains('Showing Type Three media.');

    $file_system = \Drupal::service('file_system');

    $real_paths = [];
    $remote_paths = [];
    foreach (array_slice($this->drupalGetTestFiles('image'), 0, $count) as $image) {
      $real_paths[] = $file_system->realpath($image->uri);
    }
    /** @var \Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver $driver */
    $driver = $this->getSession()->getDriver();
    foreach ($real_paths as $path) {
      $remote_paths[] = $driver->uploadFileAndGetRemoteFilePath($path);
    }

    $this->addMediaFileToField('Add files', implode("\n", $remote_paths));
    $this->assertSession()->assertWaitOnAjaxRequest();
  }

}

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

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