media_migration-8.x-1.x-dev/tests/src/Functional/MigrateMediaTest.php

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

namespace Drupal\Tests\media_migration\Functional;

use Drupal\Tests\TestFileCreationTrait;

/**
 * Tests migration from file entities to media.
 *
 * @group media_migration
 *
 * @group legacy
 */
class MigrateMediaTest extends MigrateMediaTestBase {

  use TestFileCreationTrait;

  /**
   * {@inheritdoc}
   */
  protected function getExpectedEntities() {
    return [];
  }

  /**
   * Tests the result of the media migration.
   *
   * @dataProvider providerTestMediaMigrate
   */
  public function testMediaMigrate(bool $classic_node_migration, bool $preexisting_media_types) {
    $this->setClassicNodeMigration($classic_node_migration);
    // Delete preexisting media types.
    $media_types = $this->container->get('entity_type.manager')
      ->getStorage('media_type')
      ->loadMultiple();
    foreach ($media_types as $media_type) {
      $media_type->delete();
    }

    if ($preexisting_media_types) {
      $this->createStandardMediaTypes(TRUE);
    }

    $this->assertMigrateUpgradeViaUi(FALSE);
    $this->assertMediaMigrationResults();

    $assert_session = $this->assertSession();

    // Check configurations.
    $this->assertArticleImageFieldsAllowedTypes();
    $this->assertArticleMediaFieldsAllowedTypes();

    // Check the migrated media entities.
    //
    // Assert "Blue PNG" image media properties; including alt, title and the
    // custom 'integer' field.
    $this->assertMedia1FieldValues();
    $this->drupalGet('media/' . $this->getDestinationIdFromSourceId(1) . '/edit');
    $assert_session->statusCodeEquals(200);
    $this->assertPageTitle('Edit Image Blue PNG');
    $assert_session->hiddenFieldValueEquals('field_media_image[0][fids]', '1');
    // Alt and title properties should be migrated to the corresponding media
    // image field and have to be editable on the UI.
    $assert_session->fieldValueEquals('field_media_image[0][alt]', 'Alternative text about blue.png');
    $assert_session->fieldValueEquals('field_media_image[0][title]', 'Title copy for blue.png');
    $assert_session->fieldValueEquals('field_media_integer[0][value]', '1000');
    // The following fields should not be present.
    $assert_session->fieldNotExists('field_file_image_alt_text[0][value]');
    $assert_session->fieldNotExists('field_file_image_title_text[0][value]');
    // Author should be user 1.
    $assert_session->fieldValueEquals('uid[0][target_id]', 'user (1)');
    // Assert authored on date.
    $assert_session->fieldValueEquals('created[0][value][date]', '2020-04-24');
    $assert_session->fieldValueEquals('created[0][value][time]', '06:58:29');
    // The link to the image file has to be present and should be reachable.
    $this->getSession()->getPage()->clickLink('Blue PNG');
    $this->assertSession()->statusCodeEquals(200);

    // Assert that the image that was the content of the field_image field of
    // the test article with node ID 1 was migrated successfully, and make sure
    // that its original alt and title properties from the image field are
    // present.
    $this->assertMedia2FieldValues();
    $this->drupalGet('media/' . $this->getDestinationIdFromSourceId(2) . '/edit');
    $assert_session->statusCodeEquals(200);
    $this->assertPageTitle('Edit Image green.jpg');
    $assert_session->hiddenFieldValueEquals('field_media_image[0][fids]', '2');
    // Alt and title properties at the right place.
    $assert_session->fieldValueEquals('field_media_image[0][alt]', 'Alternate text for green.jpg image');
    $assert_session->fieldValueEquals('field_media_image[0][title]', 'Title text for green.jpg image');
    $assert_session->fieldValueEquals('field_media_integer[0][value]', '');
    // The following fields should not be present.
    $assert_session->fieldNotExists('field_file_image_alt_text[0][value]');
    $assert_session->fieldNotExists('field_file_image_title_text[0][value]');
    // Author should be user 1.
    $assert_session->fieldValueEquals('uid[0][target_id]', 'user (1)');
    // Assert created date.
    $assert_session->fieldValueEquals('created[0][value][date]', '2020-04-24');
    $assert_session->fieldValueEquals('created[0][value][time]', '08:12:02');
    // The link to the image file has to be present and should be reachable.
    $this->getSession()->getPage()->clickLink('green.jpg');
    $this->assertSession()->statusCodeEquals(200);

    // Assert "red.jpeg" image media properties with alt, title and integer.
    $this->assertMedia3FieldValues();
    $this->drupalGet('media/' . $this->getDestinationIdFromSourceId(3) . '/edit');
    $assert_session->statusCodeEquals(200);
    $this->assertPageTitle('Edit Image red.jpeg');
    $assert_session->hiddenFieldValueEquals('field_media_image[0][fids]', '3');
    // Alt and title properties at the right place.
    $assert_session->fieldValueEquals('field_media_image[0][alt]', 'Alternative text about red.jpeg');
    $assert_session->fieldValueEquals('field_media_image[0][title]', 'Title copy for red.jpeg');
    $assert_session->fieldValueEquals('field_media_integer[0][value]', '333');
    // The following fields should not be present.
    $assert_session->fieldNotExists('field_file_image_alt_text[0][value]');
    $assert_session->fieldNotExists('field_file_image_title_text[0][value]');
    // Author should be user 1.
    $assert_session->fieldValueEquals('uid[0][target_id]', 'user (1)');
    // Assert created date.
    $assert_session->fieldValueEquals('created[0][value][date]', '2020-04-24');
    $assert_session->fieldValueEquals('created[0][value][time]', '07:00:37');
    // The link to the image file has to be present and should be reachable.
    $this->getSession()->getPage()->clickLink('red.jpeg');
    $this->assertSession()->statusCodeEquals(200);

    $this->assertMedia4FieldValues();
    $this->assertMedia5FieldValues();

    $this->assertMedia6FieldValues();
    $this->drupalGet('media/' . $this->getDestinationIdFromSourceId(6) . '/edit');
    $assert_session->statusCodeEquals(200);
    $this->assertPageTitle('Edit Document LICENSE.txt');
    $assert_session->hiddenFieldValueEquals('field_media_document[0][fids]', '6');
    // Author should be user 1.
    $assert_session->fieldValueEquals('uid[0][target_id]', 'user (1)');
    // Assert created date.
    $assert_session->fieldValueEquals('created[0][value][date]', '2020-04-24');
    $assert_session->fieldValueEquals('created[0][value][time]', '08:25:11');
    // The link to the image file has to be present and should be reachable.
    $this->getSession()->getPage()->clickLink('LICENSE.txt');
    $this->assertSession()->statusCodeEquals(200);

    // "yellow.jpg" should be migrated as well, but its alt and title properties
    // should be empty, as well as its integer field.
    $this->assertMedia7FieldValues();
    $this->drupalGet('media/' . $this->getDestinationIdFromSourceId(7) . '/edit');
    $assert_session->statusCodeEquals(200);
    $this->assertPageTitle('Edit Image yellow.jpg');
    $assert_session->hiddenFieldValueEquals('field_media_image[0][fids]', '7');
    // Alt and title properties at the right place.
    $assert_session->fieldValueEquals('field_media_image[0][alt]', '');
    $assert_session->fieldValueEquals('field_media_image[0][title]', '');
    $assert_session->fieldValueEquals('field_media_integer[0][value]', '');
    // The following fields should not be present.
    $assert_session->fieldNotExists('field_file_image_alt_text[0][value]');
    $assert_session->fieldNotExists('field_file_image_title_text[0][value]');
    // Author should be user 2.
    $assert_session->fieldValueEquals('uid[0][target_id]', 'editor (2)');
    // Authored on date.
    $assert_session->fieldValueEquals('created[0][value][date]', '2020-05-04');
    $assert_session->fieldValueEquals('created[0][value][time]', '09:53:55');
    // The link to the image file has to be present and should be reachable.
    $this->getSession()->getPage()->clickLink('yellow.jpg');
    $this->assertSession()->statusCodeEquals(200);

    $this->assertMedia8FieldValues();
    $this->assertMedia9FieldValues();
    $this->assertMedia10FieldValues();
    $this->assertMedia11FieldValues();
    $this->assertMedia12FieldValues();

    $this->assertNode1FieldValues();

    $this->drupalGet('/media/add/image');
    $this->submitForm(
      [
        'name[0][value]' => 'New media',
        'files[field_media_image_0]' => \Drupal::service('file_system')->realpath($this->getTestFiles('image')[0]->uri),
      ],
      'Save'
    );
    $this->assertSession()->pageTextNotContains('The file could not be uploaded because the destination');
    $this->assertSession()->pageTextContains('Image New media has been created.');
  }

  /**
   * Data provider for ::testMediaMigrate().
   *
   * @return array
   *   The test cases.
   */
  public function providerTestMediaMigrate() {
    $test_cases = [
      'Classic node migration, no initial media types' => [
        'Classic node migration' => TRUE,
        'Preexisting media types' => FALSE,
      ],
      'Complete node migration, no initial media types' => [
        'Classic node migration' => FALSE,
        'Preexisting media types' => FALSE,
      ],
      'Classic node migration, preexisting media types' => [
        'Classic node migration' => TRUE,
        'Preexisting media types' => TRUE,
      ],
      'Complete node migration, preexisting media types' => [
        'Classic node migration' => FALSE,
        'Preexisting media types' => TRUE,
      ],
    ];

    // Drupal 8.8.x only has 'classic' node migrations.
    // @see https://www.drupal.org/node/3105503
    if (version_compare(\Drupal::VERSION, '8.9', '<')) {
      $test_cases = array_filter($test_cases, function ($test_case) {
        return $test_case['Classic node migration'];
      });
    }

    return $test_cases;
  }

}

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

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