comparison core/modules/migrate/tests/src/Unit/MigrateSqlIdMapEnsureTablesTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\Tests\migrate\Unit;
4
5 use Drupal\migrate\Plugin\MigrateIdMapInterface;
6
7 /**
8 * Tests the SQL ID map plugin ensureTables() method.
9 *
10 * @group migrate
11 */
12 class MigrateSqlIdMapEnsureTablesTest extends MigrateTestCase {
13
14 /**
15 * The migration configuration, initialized to set the ID and destination IDs.
16 *
17 * @var array
18 */
19 protected $migrationConfiguration = [
20 'id' => 'sql_idmap_test',
21 ];
22
23 /**
24 * Tests the ensureTables method when the tables do not exist.
25 */
26 public function testEnsureTablesNotExist() {
27 $fields['source_ids_hash'] = [
28 'type' => 'varchar',
29 'length' => 64,
30 'not null' => 1,
31 'description' => 'Hash of source ids. Used as primary key'
32 ];
33 $fields['sourceid1'] = [
34 'type' => 'int',
35 'not null' => TRUE,
36 ];
37 $fields['sourceid2'] = [
38 'type' => 'int',
39 'not null' => TRUE,
40 ];
41 $fields['destid1'] = [
42 'type' => 'varchar',
43 'length' => 255,
44 'not null' => FALSE,
45 ];
46 $fields['source_row_status'] = [
47 'type' => 'int',
48 'size' => 'tiny',
49 'unsigned' => TRUE,
50 'not null' => TRUE,
51 'default' => MigrateIdMapInterface::STATUS_IMPORTED,
52 'description' => 'Indicates current status of the source row',
53 ];
54 $fields['rollback_action'] = [
55 'type' => 'int',
56 'size' => 'tiny',
57 'unsigned' => TRUE,
58 'not null' => TRUE,
59 'default' => MigrateIdMapInterface::ROLLBACK_DELETE,
60 'description' => 'Flag indicating what to do for this item on rollback',
61 ];
62 $fields['last_imported'] = [
63 'type' => 'int',
64 'unsigned' => TRUE,
65 'not null' => TRUE,
66 'default' => 0,
67 'description' => 'UNIX timestamp of the last time this row was imported',
68 ];
69 $fields['hash'] = [
70 'type' => 'varchar',
71 'length' => '64',
72 'not null' => FALSE,
73 'description' => 'Hash of source row data, for detecting changes',
74 ];
75 $map_table_schema = [
76 'description' => 'Mappings from source identifier value(s) to destination identifier value(s).',
77 'fields' => $fields,
78 'primary key' => ['source_ids_hash'],
79 'indexes' => [
80 'source' => ['sourceid1', 'sourceid2'],
81 ],
82 ];
83 $schema = $this->getMockBuilder('Drupal\Core\Database\Schema')
84 ->disableOriginalConstructor()
85 ->getMock();
86 $schema->expects($this->at(0))
87 ->method('tableExists')
88 ->with('migrate_map_sql_idmap_test')
89 ->will($this->returnValue(FALSE));
90 $schema->expects($this->at(1))
91 ->method('createTable')
92 ->with('migrate_map_sql_idmap_test', $map_table_schema);
93 // Now do the message table.
94 $fields = [];
95 $fields['msgid'] = [
96 'type' => 'serial',
97 'unsigned' => TRUE,
98 'not null' => TRUE,
99 ];
100 $fields['source_ids_hash'] = [
101 'type' => 'varchar',
102 'length' => 64,
103 'not null' => 1,
104 'description' => 'Hash of source ids. Used as primary key'
105 ];
106 $fields['level'] = [
107 'type' => 'int',
108 'unsigned' => TRUE,
109 'not null' => TRUE,
110 'default' => 1,
111 ];
112 $fields['message'] = [
113 'type' => 'text',
114 'size' => 'medium',
115 'not null' => TRUE,
116 ];
117 $table_schema = [
118 'description' => 'Messages generated during a migration process',
119 'fields' => $fields,
120 'primary key' => ['msgid'],
121 ];
122
123 $schema->expects($this->at(2))
124 ->method('tableExists')
125 ->with('migrate_message_sql_idmap_test')
126 ->will($this->returnValue(FALSE));
127 $schema->expects($this->at(3))
128 ->method('createTable')
129 ->with('migrate_message_sql_idmap_test', $table_schema);
130 $schema->expects($this->any())
131 ->method($this->anything());
132 $this->runEnsureTablesTest($schema);
133 }
134
135 /**
136 * Tests the ensureTables method when the tables exist.
137 */
138 public function testEnsureTablesExist() {
139 $schema = $this->getMockBuilder('Drupal\Core\Database\Schema')
140 ->disableOriginalConstructor()
141 ->getMock();
142 $schema->expects($this->at(0))
143 ->method('tableExists')
144 ->with('migrate_map_sql_idmap_test')
145 ->will($this->returnValue(TRUE));
146 $schema->expects($this->at(1))
147 ->method('fieldExists')
148 ->with('migrate_map_sql_idmap_test', 'rollback_action')
149 ->will($this->returnValue(FALSE));
150 $field_schema = [
151 'type' => 'int',
152 'size' => 'tiny',
153 'unsigned' => TRUE,
154 'not null' => TRUE,
155 'default' => 0,
156 'description' => 'Flag indicating what to do for this item on rollback',
157 ];
158 $schema->expects($this->at(2))
159 ->method('addField')
160 ->with('migrate_map_sql_idmap_test', 'rollback_action', $field_schema);
161 $schema->expects($this->at(3))
162 ->method('fieldExists')
163 ->with('migrate_map_sql_idmap_test', 'hash')
164 ->will($this->returnValue(FALSE));
165 $field_schema = [
166 'type' => 'varchar',
167 'length' => '64',
168 'not null' => FALSE,
169 'description' => 'Hash of source row data, for detecting changes',
170 ];
171 $schema->expects($this->at(4))
172 ->method('addField')
173 ->with('migrate_map_sql_idmap_test', 'hash', $field_schema);
174 $schema->expects($this->at(5))
175 ->method('fieldExists')
176 ->with('migrate_map_sql_idmap_test', 'source_ids_hash')
177 ->will($this->returnValue(FALSE));
178 $field_schema = [
179 'type' => 'varchar',
180 'length' => '64',
181 'not null' => TRUE,
182 'description' => 'Hash of source ids. Used as primary key',
183 ];
184 $schema->expects($this->at(6))
185 ->method('addField')
186 ->with('migrate_map_sql_idmap_test', 'source_ids_hash', $field_schema);
187 $schema->expects($this->exactly(7))
188 ->method($this->anything());
189 $this->runEnsureTablesTest($schema);
190 }
191
192 /**
193 * Actually run the test.
194 *
195 * @param array $schema
196 * The mock schema object with expectations set. The Sql constructor calls
197 * ensureTables() which in turn calls this object and the expectations on
198 * it are the actual test and there are no additional asserts added.
199 */
200 protected function runEnsureTablesTest($schema) {
201 $database = $this->getMockBuilder('Drupal\Core\Database\Connection')
202 ->disableOriginalConstructor()
203 ->getMock();
204 $database->expects($this->any())
205 ->method('schema')
206 ->willReturn($schema);
207 $migration = $this->getMigration();
208 $plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface');
209 $plugin->expects($this->any())
210 ->method('getIds')
211 ->willReturn([
212 'source_id_property' => [
213 'type' => 'integer',
214 ],
215 'source_id_property_2' => [
216 'type' => 'integer',
217 ],
218 ]);
219 $migration->expects($this->any())
220 ->method('getSourcePlugin')
221 ->willReturn($plugin);
222 $plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface');
223 $plugin->expects($this->any())
224 ->method('getIds')
225 ->willReturn([
226 'destination_id_property' => [
227 'type' => 'string',
228 ],
229 ]);
230 $migration->expects($this->any())
231 ->method('getDestinationPlugin')
232 ->willReturn($plugin);
233 /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher */
234 $event_dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
235 $map = new TestSqlIdMap($database, [], 'sql', [], $migration, $event_dispatcher);
236 $map->getDatabase();
237 }
238
239 }