dc471770d711668f07e7e8fe2b136388e753b9f2
[yaffs-website] / web / modules / contrib / migrate_plus / tests / src / Kernel / MigrateTableTest.php
1 <?php
2
3 namespace Drupal\Tests\migrate_plus\Kernel;
4
5 use Drupal\Core\Database\Database;
6 use Drupal\migrate\MigrateExecutable;
7 use Drupal\Tests\migrate\Kernel\MigrateTestBase;
8
9 /**
10  * Tests migration destination table.
11  *
12  * @group migrate
13  */
14 class MigrateTableTest extends MigrateTestBase {
15
16   const TABLE_NAME = 'migrate_test_destination_table';
17
18   /**
19    * The database connection.
20    *
21    * @var \Drupal\Core\Database\Connection
22    */
23   protected $connection;
24
25   public static $modules = ['migrate_plus'];
26
27   /**
28    * {@inheritdoc}
29    */
30   protected function setUp() {
31     parent::setUp();
32
33     $this->connection = Database::getConnection();
34
35     $this->connection->schema()->createTable(static::TABLE_NAME, [
36       'description' => 'Test table',
37       'fields' => [
38         'data' => [
39           'type' => 'varchar',
40           'length' => '32',
41           'not null' => TRUE,
42         ],
43         'data2' => [
44           'type' => 'varchar',
45           'length' => '32',
46           'not null' => TRUE,
47         ],
48         'data3' => [
49           'type' => 'varchar',
50           'length' => '32',
51           'not null' => TRUE,
52         ],
53       ],
54       'primary key' => ['data'],
55     ]);
56   }
57
58   /**
59    * {@inheritdoc}
60    */
61   protected function tearDown() {
62     $this->connection->schema()->dropTable(static::TABLE_NAME);
63     parent::tearDown();
64   }
65
66   /**
67    * Create a minimally valid migration with some source data.
68    *
69    * @return array
70    *   The migration definition.
71    */
72   protected function getTableDestinationMigration() {
73     $definition = [
74       'id' => 'migration_table_test',
75       'migration_tags' => ['Testing'],
76       'source' => [
77         'plugin' => 'embedded_data',
78         'data_rows' => [
79           [
80             'data' => 'dummy value',
81             'data2' => 'dummy2 value',
82             'data3' => 'dummy3 value',
83           ],
84           [
85             'data' => 'dummy value2',
86             'data2' => 'dummy2 value2',
87             'data3' => 'dummy3 value2',
88           ],
89           [
90             'data' => 'dummy value3',
91             'data2' => 'dummy2 value3',
92             'data3' => 'dummy3 value3',
93           ],
94         ],
95         'ids' => [
96           'data' => ['type' => 'string'],
97         ],
98       ],
99       'destination' => [
100         'plugin' => 'table',
101         'table_name' => static::TABLE_NAME,
102         'id_fields' => ['data' => ['type' => 'string']],
103       ],
104       'process' => [
105         'data' => 'data',
106         'data2' => 'data2',
107         'data3' => 'data3',
108       ],
109     ];
110     return $definition;
111   }
112
113   /**
114    * Tests table destination.
115    */
116   public function testTableDestination() {
117     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($this->getTableDestinationMigration());
118
119     $executable = new MigrateExecutable($migration, $this);
120     $executable->import();
121
122     $values = $this->connection->select(static::TABLE_NAME)
123       ->fields(static::TABLE_NAME)
124       ->execute()
125       ->fetchAllAssoc('data');
126
127     $this->assertEquals('dummy value', $values['dummy value']->data);
128     $this->assertEquals('dummy2 value', $values['dummy value']->data2);
129     $this->assertEquals('dummy2 value2', $values['dummy value2']->data2);
130     $this->assertEquals('dummy3 value3', $values['dummy value3']->data3);
131     $this->assertEquals(3, count($values));
132   }
133
134   /**
135    * Tests table rollback.
136    */
137   public function testTableRollback() {
138     $this->testTableDestination();
139
140     /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */
141     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($this->getTableDestinationMigration());
142     $executable = new MigrateExecutable($migration, $this);
143     $executable->import();
144
145     $values = $this->connection->select(static::TABLE_NAME)
146       ->fields(static::TABLE_NAME)
147       ->execute()
148       ->fetchAllAssoc('data');
149
150     $this->assertEquals('dummy value', $values['dummy value']->data);
151     $this->assertEquals(3, count($values));
152
153     // Now rollback.
154     $executable->rollback();
155     $values = $this->connection->select(static::TABLE_NAME)
156       ->fields(static::TABLE_NAME)
157       ->execute()
158       ->fetchAllAssoc('data');
159
160     $this->assertEquals(0, count($values));
161   }
162
163 }