You are here

EntityLookupAccessTest.php in Migrate Plus 8.4

File

tests/src/Kernel/Plugin/migrate/process/EntityLookupAccessTest.php
View source
<?php

namespace Drupal\Tests\migrate_plus\Kernel\Plugin\migrate\process;

use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\migrate\MigrateExecutableInterface;
use Drupal\migrate\Plugin\MigrateDestinationInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Row;
use Drupal\profile\Entity\Profile;
use Drupal\profile\Entity\ProfileType;

/**
 * Tests Entity Lookup access check.
 *
 * @group migrate_plus
 *
 * @requires entity
 * @requires profile
 */
class EntityLookupAccessTest extends KernelTestBase {
  use UserCreationTrait;

  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'entity',
    'field',
    'migrate',
    'migrate_plus',
    'node',
    'profile',
    'system',
    'user',
    'views',
    'text',
  ];

  /**
   * The mocked migration.
   *
   * @var \Drupal\migrate\Plugin\MigrationInterface|\Prophecy\Prophecy\ObjectProphecy
   */
  protected $migration;

  /**
   * The mocked migrate executable.
   *
   * @var \Drupal\migrate\MigrateExecutable|\Prophecy\Prophecy\ObjectProphecy
   */
  protected $executable;

  /**
   * The migrate row.
   *
   * @var \Drupal\migrate\Row
   */
  protected $row;

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this
      ->installSchema('system', 'sequences');
    $this
      ->installEntitySchema('profile');
    $this
      ->installEntitySchema('user');
    $this
      ->installConfig([
      'profile',
      'system',
    ]);
    $known_user = $this
      ->createUser([], 'lucuma');

    // Create a profile entity.
    ProfileType::create([
      'id' => 'default',
    ]);
    Profile::create([
      'uid' => $known_user
        ->id(),
      'type' => 'default',
    ])
      ->save();
    $migration_prophecy = $this
      ->prophesize(MigrationInterface::class);
    $migrate_destination_prophecy = $this
      ->prophesize(MigrateDestinationInterface::class);
    $migrate_destination_prophecy
      ->getPluginId()
      ->willReturn('profile');
    $migrate_destination = $migrate_destination_prophecy
      ->reveal();
    $migration_prophecy
      ->getDestinationPlugin()
      ->willReturn($migrate_destination);
    $migration_prophecy
      ->getProcess()
      ->willReturn([]);
    $this->migration = $migration_prophecy
      ->reveal();
    $this->executable = $this
      ->prophesize(MigrateExecutableInterface::class)
      ->reveal();
    $this->row = new Row();
  }

  /**
   * Tests entity_lookup access_check configuration key.
   */
  public function testEntityLookupAccessCheck() {
    $configuration_base = [
      'entity_type' => 'profile',
      'value_key' => 'profile_id',
    ];

    // Set access_check true.
    $configuration = $configuration_base + [
      'access_check' => TRUE,
    ];
    $plugin = \Drupal::service('plugin.manager.migrate.process')
      ->createInstance('entity_lookup', $configuration, $this->migration);

    // Check the profile is not found.
    $value = $plugin
      ->transform('1', $this->executable, $this->row, 'profile_id');
    $this
      ->assertNull($value);

    // Retest with access check false.
    $configuration = $configuration_base + [
      'access_check' => FALSE,
    ];
    $plugin = \Drupal::service('plugin.manager.migrate.process')
      ->createInstance('entity_lookup', $configuration, $this->migration);

    // Check the profile is found.
    $value = $plugin
      ->transform('1', $this->executable, $this->row, 'profile_id');
    $this
      ->assertSame('1', $value);
  }

}

Classes

Namesort descending Description
EntityLookupAccessTest Tests Entity Lookup access check.