NodeMigrateTypeTestTrait.php

Same filename in other branches
  1. 9 core/modules/migrate_drupal/tests/src/Traits/NodeMigrateTypeTestTrait.php
  2. 8.9.x core/modules/migrate_drupal/tests/src/Traits/NodeMigrateTypeTestTrait.php
  3. 10 core/modules/migrate_drupal/tests/src/Traits/NodeMigrateTypeTestTrait.php

Namespace

Drupal\Tests\migrate_drupal\Traits

File

core/modules/migrate_drupal/tests/src/Traits/NodeMigrateTypeTestTrait.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\migrate_drupal\Traits;

use Drupal\migrate_drupal\NodeMigrateType;
// cspell:ignore destid sourceid

/**
 * Helper functions to test complete and classic node migrations.
 */
trait NodeMigrateTypeTestTrait {
    
    /**
     * The migrate_map table name.
     *
     * @var string
     */
    public $tableName = NULL;
    
    /**
     * Gets the numbers of complete and classic node migrate_map tables.
     *
     * @param string $version
     *   The source database version.
     *
     * @return array
     *   An associative array with the total number of complete and classic
     *   node migrate_map tables.
     */
    protected function nodeMigrateMapTableCount($version) : array {
        $results = [];
        $bases = [
            'node',
            'node_complete',
        ];
        $tables = \Drupal::database()->schema()
            ->findTables('migrate_map_d' . $version . '_node%');
        foreach ($bases as $base) {
            $base_tables = preg_grep('/^migrate_map_d' . $version . '_' . $base . '_{2}.*$/', $tables);
            $results[$base] = count($base_tables);
        }
        return $results;
    }
    
    /**
     * Remove the node migrate map table.
     *
     * @param string $type
     *   The type of node migration, 'complete' or 'classic'.
     * @param string $version
     *   The source database version.
     *
     * @throws \Exception
     */
    protected function removeNodeMigrateMapTable($type, $version) {
        $name = $this->getTableName($type, $version);
        \Drupal::database()->schema()
            ->dropTable($name);
    }
    
    /**
     * Gets the migrate_map table name.
     *
     * @param string $type
     *   The type of node migration, 'complete' or 'classic'.
     * @param string $version
     *   The source database version.
     *
     * @return string
     *   The migrate_map table name.
     */
    protected function getTableName($type, $version) {
        if (!$this->tableName) {
            $content_type = $this->randomMachineName();
            $this->tableName = 'migrate_map_d' . $version . '_node_complete__' . $content_type;
            if ($type == NodeMigrateType::NODE_MIGRATE_TYPE_CLASSIC) {
                $this->tableName = 'migrate_map_d' . $version . '_node__' . $content_type;
            }
        }
        return $this->tableName;
    }
    
    /**
     * Create a node migrate_map table.
     *
     * @param string $type
     *   The type of node migration, 'complete' or 'classic'.
     * @param string $version
     *   The source database version.
     *
     * @throws \Exception
     */
    protected function makeNodeMigrateMapTable($type, $version) {
        $name = $this->getTableName($type, $version);
        $fields = [
            'source_ids_hash' => [
                'type' => 'varchar',
                'not null' => TRUE,
                'length' => '64',
            ],
            'sourceid1' => [
                'type' => 'int',
                'not null' => TRUE,
                'size' => 'normal',
            ],
            'sourceid2' => [
                'type' => 'int',
                'not null' => TRUE,
                'size' => 'normal',
            ],
            'sourceid3' => [
                'type' => 'varchar',
                'not null' => TRUE,
                'length' => '255',
            ],
            'destid1' => [
                'type' => 'int',
                'not null' => FALSE,
                'size' => 'normal',
                'unsigned' => TRUE,
            ],
            'destid2' => [
                'type' => 'int',
                'not null' => FALSE,
                'size' => 'normal',
                'unsigned' => TRUE,
            ],
            'destid3' => [
                'type' => 'varchar_ascii',
                'not null' => FALSE,
                'length' => '12',
            ],
            'source_row_status' => [
                'type' => 'int',
                'not null' => TRUE,
                'size' => 'tiny',
                'default' => '0',
                'unsigned' => TRUE,
            ],
            'rollback_action' => [
                'type' => 'int',
                'not null' => TRUE,
                'size' => 'tiny',
                'default' => '0',
                'unsigned' => TRUE,
            ],
            'last_imported' => [
                'type' => 'int',
                'not null' => TRUE,
                'size' => 'normal',
                'default' => '0',
                'unsigned' => TRUE,
            ],
            'hash' => [
                'type' => 'varchar',
                'not null' => FALSE,
                'length' => '64',
            ],
        ];
        $values = [
            'source_ids_hash' => '123',
            'sourceid1' => '4242',
            'sourceid2' => '4242',
            'sourceid3' => 'en',
            'destid1' => '4242',
            'destid2' => '4242',
            'destid3' => 'en',
            'source_row_status' => '1',
            'rollback_action' => '1',
            'last_imported' => time(),
            'hash' => 'abc',
        ];
        $indexes = [
            'source' => [
                'sourceid1',
                'sourceid2',
                'sourceid3',
            ],
        ];
        // Remove keys not used.
        if ($type == NodeMigrateType::NODE_MIGRATE_TYPE_CLASSIC) {
            $keys = [
                'sourceid2',
                'sourceid3',
                'destid2',
                'destid3',
            ];
            foreach ($keys as $key) {
                unset($fields[$key]);
                unset($values[$key]);
                if (str_contains($key, 'sourceid')) {
                    $index_key = substr($key, -1) - 1;
                    unset($indexes['source'][$index_key]);
                }
            }
        }
        $connection = \Drupal::database();
        $connection->schema()
            ->createTable($name, [
            'fields' => $fields,
            'primary key' => [
                'source_ids_hash',
            ],
            'indexes' => $indexes,
            'mysql_character_set' => 'utf8mb4',
        ]);
        $field_names = array_keys($fields);
        $connection->insert($name)
            ->fields($field_names)
            ->values($values)
            ->execute();
    }

}

Traits

Title Deprecated Summary
NodeMigrateTypeTestTrait Helper functions to test complete and classic node migrations.

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