migmag-1.0.x-dev/migmag_rollbackable/tests/src/Kernel/RollbackableShortcutSetUsersTest.php
migmag_rollbackable/tests/src/Kernel/RollbackableShortcutSetUsersTest.php
<?php namespace Drupal\Tests\migmag_rollbackable\Kernel; use Drupal\Component\Utility\DeprecationHelper; use Drupal\Core\Session\AccountInterface; use Drupal\Tests\user\Traits\UserCreationTrait; use Drupal\migrate\MigrateExecutable; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\shortcut\Entity\ShortcutSet; use Drupal\shortcut\ShortcutSetStorageInterface; /** * Tests the 'migmag_rollbackable_shortcut_set_users' destination. * * @coversDefaultClass \Drupal\migmag_rollbackable\Plugin\migrate\destination\RollbackableShortcutSetUsers * * @group migmag_rollbackable */ class RollbackableShortcutSetUsersTest extends RollbackableDestinationTestBase { use UserCreationTrait; /** * Base definition for the test migrations. * * @const array */ const USER_SHORTCUT_SET_MIGRATION_BASE = [ 'source' => [ 'plugin' => 'embedded_data', 'data_rows' => [ [ 'uid' => 22, 'set_name' => 'shortcut-set-22-base', ], ], 'ids' => [ 'uid' => ['type' => 'integer'], 'set_name' => ['type' => 'string'], ], ], 'process' => [ 'uid' => 'uid', 'set_name' => 'set_name', ], 'destination' => [ 'plugin' => 'migmag_rollbackable_shortcut_set_users', ], ]; /** * {@inheritdoc} */ protected static $modules = [ 'link', 'shortcut', ]; /** * The user whose shortcut set migration is tested. * * @var \Drupal\user\UserInterface */ protected $testUser; /** * {@inheritdoc} */ public function setUp(): void { parent::setUp(); $this->testUser = $this->createUser([], 'test_user', FALSE, ['uid' => 22]); $this->installEntitySchema('shortcut'); $this->installSchema('shortcut', ['shortcut_set_users']); $this->installConfig(['shortcut']); ShortcutSet::create([ 'id' => 'shortcut-set-22-init', 'label' => 'Initial shortcut set of user 22', ])->save(); ShortcutSet::create([ 'id' => 'shortcut-set-22-base', 'label' => 'Base shortcut set of user 22', ])->save(); ShortcutSet::create([ 'id' => 'shortcut-set-22-subsequent', 'label' => 'Subsequent shortcut set of user 22', ])->save(); } /** * Tests the rollbackability of 'rollbackable_shortcut_set_users' destination. */ public function testShortcutSetUsersRollback() { $this->assertEquals('default', $this->getShortcutSetIdDisplayedToUser($this->testUser)); // Import... $base_executable = new MigrateExecutable($this->baseMigration(), $this); $this->startCollectingMessages(); $base_executable->import(); $this->assertNoErrors(); // Check the shortcut set assigned to the test user after the base // migration was executed. drupal_static_reset(); $this->assertEquals('shortcut-set-22-base', $this->getShortcutSetIdDisplayedToUser($this->testUser)); $subsequent_executable = new MigrateExecutable($this->subsequentMigration(), $this); $this->startCollectingMessages(); $subsequent_executable->import(); $this->assertNoErrors(); // Check the shortcut set assigned to the test user after the subsequent // migration was executed. drupal_static_reset(); $this->assertEquals('shortcut-set-22-subsequent', $this->getShortcutSetIdDisplayedToUser($this->testUser)); $subsequent_executable->rollback(); // Check the shortcut set assigned to the test user after the subsequent // migration was rolled back. drupal_static_reset(); $this->assertEquals('shortcut-set-22-base', $this->getShortcutSetIdDisplayedToUser($this->testUser)); // Roll back the base migration. $base_executable->rollback(); drupal_static_reset(); $this->assertEquals('default', $this->getShortcutSetIdDisplayedToUser($this->testUser)); } /** * {@inheritdoc} */ protected function baseMigration(): MigrationInterface { $definition = ['id' => 'user_shortcut_set_base'] + self::USER_SHORTCUT_SET_MIGRATION_BASE; return $this->getMigrationPluginInstance($definition); } /** * {@inheritdoc} */ protected function subsequentMigration(): MigrationInterface { $definition = self::USER_SHORTCUT_SET_MIGRATION_BASE; $definition['id'] = 'user_shortcut_set_base_subsequent'; $definition['source']['data_rows'] = [ [ 'uid' => 22, 'set_name' => 'shortcut-set-22-subsequent', ], ]; return $this->getMigrationPluginInstance($definition); } /** * Returns the ID of the shortcut set displayed to the given user. * * @param \Drupal\Core\Session\AccountInterface $account * The user account. * * @return string * The ID of the shortcut set displayed to the given user. */ protected function getShortcutSetIdDisplayedToUser(AccountInterface $account): string { return DeprecationHelper::backwardsCompatibleCall( \Drupal::VERSION, '10.3', function () use ($account) { $shortcutSetStorage = \Drupal::entityTypeManager()->getStorage('shortcut_set'); $this->assertInstanceOf(ShortcutSetStorageInterface::class, $shortcutSetStorage); return $shortcutSetStorage->getDisplayedToUser($account)->id(); }, function () use ($account) { // @phpstan-ignore-next-line return shortcut_current_displayed_set($account)->id(); } ); } /** * {@inheritdoc} */ protected function baseTranslationMigration(): ?MigrationInterface { // User shortcut set destination cannot have translation destination. return NULL; } /** * {@inheritdoc} */ protected function subsequentTranslationMigration(): ?MigrationInterface { // User shortcut set destination cannot have translation destination. return NULL; } }