EntityContentBaseTest.php

Same filename in this branch
  1. 10 core/modules/migrate_drupal/tests/src/Kernel/d6/EntityContentBaseTest.php
Same filename in other branches
  1. 9 core/modules/migrate_drupal/tests/src/Kernel/d6/EntityContentBaseTest.php
  2. 9 core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
  3. 8.9.x core/modules/migrate_drupal/tests/src/Kernel/d6/EntityContentBaseTest.php
  4. 8.9.x core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
  5. 11.x core/modules/migrate_drupal/tests/src/Kernel/d6/EntityContentBaseTest.php
  6. 11.x core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php

Namespace

Drupal\Tests\migrate\Unit\Plugin\migrate\destination

File

core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\migrate\Unit\Plugin\migrate\destination;

use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\Core\Session\AccountSwitcherInterface;
use Drupal\migrate\MigrateException;
use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
use Drupal\migrate\Plugin\MigrateIdMapInterface;
use Drupal\migrate\Row;
use Prophecy\Argument;

/**
 * Tests base entity migration destination functionality.
 *
 * @coversDefaultClass \Drupal\migrate\Plugin\migrate\destination\EntityContentBase
 * @group migrate
 */
class EntityContentBaseTest extends EntityTestBase {
    
    /**
     * Tests basic entity save.
     *
     * @covers ::import
     */
    public function testImport() : void {
        $bundles = [];
        $destination = new EntityTestDestination([], '', [], $this->migration
            ->reveal(), $this->storage
            ->reveal(), $bundles, $this->entityFieldManager
            ->reveal(), $this->prophesize(FieldTypePluginManagerInterface::class)
            ->reveal(), $this->prophesize(AccountSwitcherInterface::class)
            ->reveal());
        $entity = $this->prophesize(ContentEntityInterface::class);
        $entity->isValidationRequired()
            ->shouldBeCalledTimes(1);
        // Assert that save is called.
        $entity->save()
            ->shouldBeCalledTimes(1);
        // Syncing should be set once.
        $entity->setSyncing(Argument::exact(TRUE))
            ->shouldBeCalledTimes(1);
        // Set an id for the entity
        $entity->id()
            ->willReturn(5);
        $destination->setEntity($entity->reveal());
        // Ensure the id is saved entity id is returned from import.
        $this->assertEquals([
            5,
        ], $destination->import(new Row()));
        // Assert that import set the rollback action.
        $this->assertEquals(MigrateIdMapInterface::ROLLBACK_DELETE, $destination->rollbackAction());
    }
    
    /**
     * Tests row skipping when we can't get an entity to save.
     *
     * @covers ::import
     */
    public function testImportEntityLoadFailure() : void {
        $bundles = [];
        $destination = new EntityTestDestination([], '', [], $this->migration
            ->reveal(), $this->storage
            ->reveal(), $bundles, $this->entityFieldManager
            ->reveal(), $this->prophesize(FieldTypePluginManagerInterface::class)
            ->reveal(), $this->prophesize(AccountSwitcherInterface::class)
            ->reveal());
        $destination->setEntity(FALSE);
        $this->expectException(MigrateException::class);
        $this->expectExceptionMessage('Unable to get entity');
        $destination->import(new Row());
    }
    
    /**
     * Tests that translation destination fails for untranslatable entities.
     */
    public function testUntranslatable() : void {
        // An entity type without a language.
        $this->entityType
            ->getKey('langcode')
            ->willReturn('');
        $this->entityType
            ->getKey('id')
            ->willReturn('id');
        $this->entityFieldManager
            ->getBaseFieldDefinitions('foo')
            ->willReturn([
            'id' => BaseFieldDefinitionTest::create('integer'),
        ]);
        $destination = new EntityTestDestination([
            'translations' => TRUE,
        ], '', [], $this->migration
            ->reveal(), $this->storage
            ->reveal(), [], $this->entityFieldManager
            ->reveal(), $this->prophesize(FieldTypePluginManagerInterface::class)
            ->reveal(), $this->prophesize(AccountSwitcherInterface::class)
            ->reveal());
        $this->expectException(MigrateException::class);
        $this->expectExceptionMessage('The "foo" entity type does not support translations.');
        $destination->getIds();
    }

}

/**
 * Stub class for testing EntityContentBase methods.
 *
 * We want to test things without testing the base class implementations.
 */
class EntityTestDestination extends EntityContentBase {
    private $entity = NULL;
    public function setEntity($entity) {
        $this->entity = $entity;
    }
    protected function getEntity(Row $row, array $old_destination_id_values) {
        return $this->entity;
    }
    public static function getEntityTypeId($plugin_id) {
        return 'foo';
    }

}

Classes

Title Deprecated Summary
EntityContentBaseTest Tests base entity migration destination functionality.
EntityTestDestination Stub class for testing EntityContentBase methods.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.