Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /**
|
Chris@0
|
4 * @file
|
Chris@0
|
5 * Contains \Drupal\Tests\migrate\Unit\SqlBaseTest.
|
Chris@0
|
6 */
|
Chris@0
|
7
|
Chris@0
|
8 namespace Drupal\Tests\migrate\Unit;
|
Chris@0
|
9
|
Chris@0
|
10 use Drupal\migrate\Plugin\MigrationInterface;
|
Chris@0
|
11 use Drupal\migrate\Plugin\migrate\source\SqlBase;
|
Chris@0
|
12 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Tests the SqlBase class.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @group migrate
|
Chris@0
|
18 */
|
Chris@0
|
19 class SqlBaseTest extends UnitTestCase {
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * Tests that the ID map is joinable.
|
Chris@0
|
23 *
|
Chris@0
|
24 * @param bool $expected_result
|
Chris@0
|
25 * The expected result.
|
Chris@0
|
26 * @param bool $id_map_is_sql
|
Chris@0
|
27 * TRUE if we want getIdMap() to return an instance of Sql.
|
Chris@0
|
28 * @param bool $with_id_map
|
Chris@0
|
29 * TRUE if we want the ID map to have a valid map of IDs.
|
Chris@0
|
30 * @param array $source_options
|
Chris@0
|
31 * (optional) An array of connection options for the source connection.
|
Chris@0
|
32 * Defaults to an empty array.
|
Chris@0
|
33 * @param array $idmap_options
|
Chris@0
|
34 * (optional) An array of connection options for the ID map connection.
|
Chris@0
|
35 * Defaults to an empty array.
|
Chris@0
|
36 *
|
Chris@0
|
37 * @dataProvider sqlBaseTestProvider
|
Chris@0
|
38 */
|
Chris@0
|
39 public function testMapJoinable($expected_result, $id_map_is_sql, $with_id_map, $source_options = [], $idmap_options = []) {
|
Chris@0
|
40 // Setup a connection object.
|
Chris@0
|
41 $source_connection = $this->getMockBuilder('Drupal\Core\Database\Connection')
|
Chris@0
|
42 ->disableOriginalConstructor()
|
Chris@0
|
43 ->getMock();
|
Chris@0
|
44 $source_connection->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never())
|
Chris@0
|
45 ->method('getConnectionOptions')
|
Chris@0
|
46 ->willReturn($source_options);
|
Chris@0
|
47
|
Chris@0
|
48 // Setup the ID map connection.
|
Chris@0
|
49 $idmap_connection = $this->getMockBuilder('Drupal\Core\Database\Connection')
|
Chris@0
|
50 ->disableOriginalConstructor()
|
Chris@0
|
51 ->getMock();
|
Chris@0
|
52 $idmap_connection->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never())
|
Chris@0
|
53 ->method('getConnectionOptions')
|
Chris@0
|
54 ->willReturn($idmap_options);
|
Chris@0
|
55
|
Chris@0
|
56 // Setup the Sql object.
|
Chris@0
|
57 $sql = $this->getMockBuilder('Drupal\migrate\Plugin\migrate\id_map\Sql')
|
Chris@0
|
58 ->disableOriginalConstructor()
|
Chris@0
|
59 ->getMock();
|
Chris@0
|
60 $sql->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never())
|
Chris@0
|
61 ->method('getDatabase')
|
Chris@0
|
62 ->willReturn($idmap_connection);
|
Chris@0
|
63
|
Chris@0
|
64 // Setup a migration entity.
|
Chris@0
|
65 $migration = $this->getMock(MigrationInterface::class);
|
Chris@0
|
66 $migration->expects($with_id_map ? $this->once() : $this->never())
|
Chris@0
|
67 ->method('getIdMap')
|
Chris@0
|
68 ->willReturn($id_map_is_sql ? $sql : NULL);
|
Chris@0
|
69
|
Chris@0
|
70 // Create our SqlBase test class.
|
Chris@0
|
71 $sql_base = new TestSqlBase();
|
Chris@0
|
72 $sql_base->setMigration($migration);
|
Chris@0
|
73 $sql_base->setDatabase($source_connection);
|
Chris@0
|
74
|
Chris@0
|
75 // Configure the idMap to make the check in mapJoinable() pass.
|
Chris@0
|
76 if ($with_id_map) {
|
Chris@0
|
77 $sql_base->setIds([
|
Chris@0
|
78 'uid' => ['type' => 'integer', 'alias' => 'u'],
|
Chris@0
|
79 ]);
|
Chris@0
|
80 }
|
Chris@0
|
81
|
Chris@0
|
82 $this->assertEquals($expected_result, $sql_base->mapJoinable());
|
Chris@0
|
83 }
|
Chris@0
|
84
|
Chris@0
|
85 /**
|
Chris@0
|
86 * The data provider for SqlBase.
|
Chris@0
|
87 *
|
Chris@0
|
88 * @return array
|
Chris@0
|
89 * An array of data per test run.
|
Chris@0
|
90 */
|
Chris@0
|
91 public function sqlBaseTestProvider() {
|
Chris@0
|
92 return [
|
Chris@0
|
93 // Source ids are empty so mapJoinable() is false.
|
Chris@0
|
94 [
|
Chris@0
|
95 FALSE,
|
Chris@0
|
96 FALSE,
|
Chris@0
|
97 FALSE,
|
Chris@0
|
98 ],
|
Chris@0
|
99 // Still false because getIdMap() is not a subclass of Sql.
|
Chris@0
|
100 [
|
Chris@0
|
101 FALSE,
|
Chris@0
|
102 FALSE,
|
Chris@0
|
103 TRUE,
|
Chris@0
|
104 ],
|
Chris@0
|
105 // Test mapJoinable() returns false when source and id connection options
|
Chris@0
|
106 // differ.
|
Chris@0
|
107 [
|
Chris@0
|
108 FALSE,
|
Chris@0
|
109 TRUE,
|
Chris@0
|
110 TRUE,
|
Chris@0
|
111 ['driver' => 'mysql', 'username' => 'different_from_map', 'password' => 'different_from_map'],
|
Chris@0
|
112 ['driver' => 'mysql', 'username' => 'different_from_source', 'password' => 'different_from_source'],
|
Chris@0
|
113 ],
|
Chris@0
|
114 // Returns false because driver is pgsql and the databases are not the
|
Chris@0
|
115 // same.
|
Chris@0
|
116 [
|
Chris@0
|
117 FALSE,
|
Chris@0
|
118 TRUE,
|
Chris@0
|
119 TRUE,
|
Chris@0
|
120 ['driver' => 'pgsql', 'database' => '1.pgsql', 'username' => 'same_value', 'password' => 'same_value'],
|
Chris@0
|
121 ['driver' => 'pgsql', 'database' => '2.pgsql', 'username' => 'same_value', 'password' => 'same_value'],
|
Chris@0
|
122 ],
|
Chris@0
|
123 // Returns false because driver is sqlite and the databases are not the
|
Chris@0
|
124 // same.
|
Chris@0
|
125 [
|
Chris@0
|
126 FALSE,
|
Chris@0
|
127 TRUE,
|
Chris@0
|
128 TRUE,
|
Chris@0
|
129 ['driver' => 'sqlite', 'database' => '1.sqlite', 'username' => '', 'password' => ''],
|
Chris@0
|
130 ['driver' => 'sqlite', 'database' => '2.sqlite', 'username' => '', 'password' => ''],
|
Chris@0
|
131 ],
|
Chris@0
|
132 // Returns false because driver is not the same.
|
Chris@0
|
133 [
|
Chris@0
|
134 FALSE,
|
Chris@0
|
135 TRUE,
|
Chris@0
|
136 TRUE,
|
Chris@0
|
137 ['driver' => 'pgsql', 'username' => 'same_value', 'password' => 'same_value'],
|
Chris@0
|
138 ['driver' => 'mysql', 'username' => 'same_value', 'password' => 'same_value'],
|
Chris@0
|
139 ],
|
Chris@0
|
140 ];
|
Chris@0
|
141 }
|
Chris@0
|
142
|
Chris@0
|
143 }
|
Chris@0
|
144
|
Chris@0
|
145 /**
|
Chris@0
|
146 * Creates a base source class for SQL migration testing.
|
Chris@0
|
147 */
|
Chris@0
|
148 class TestSqlBase extends SqlBase {
|
Chris@0
|
149
|
Chris@0
|
150 /**
|
Chris@0
|
151 * The database object.
|
Chris@0
|
152 *
|
Chris@0
|
153 * @var object
|
Chris@0
|
154 */
|
Chris@0
|
155 protected $database;
|
Chris@0
|
156
|
Chris@0
|
157 /**
|
Chris@0
|
158 * The migration IDs.
|
Chris@0
|
159 *
|
Chris@0
|
160 * @var array
|
Chris@0
|
161 */
|
Chris@0
|
162 protected $ids;
|
Chris@0
|
163
|
Chris@0
|
164 /**
|
Chris@0
|
165 * Override the constructor so we can create one easily.
|
Chris@0
|
166 */
|
Chris@0
|
167 public function __construct() {}
|
Chris@0
|
168
|
Chris@0
|
169 /**
|
Chris@0
|
170 * Allows us to set the database during tests.
|
Chris@0
|
171 *
|
Chris@0
|
172 * @param mixed $database
|
Chris@0
|
173 * The database mock object.
|
Chris@0
|
174 */
|
Chris@0
|
175 public function setDatabase($database) {
|
Chris@0
|
176 $this->database = $database;
|
Chris@0
|
177 }
|
Chris@0
|
178
|
Chris@0
|
179 /**
|
Chris@0
|
180 * {@inheritdoc}
|
Chris@0
|
181 */
|
Chris@0
|
182 public function getDatabase() {
|
Chris@0
|
183 return $this->database;
|
Chris@0
|
184 }
|
Chris@0
|
185
|
Chris@0
|
186 /**
|
Chris@0
|
187 * Allows us to set the migration during the test.
|
Chris@0
|
188 *
|
Chris@0
|
189 * @param mixed $migration
|
Chris@0
|
190 * The migration mock.
|
Chris@0
|
191 */
|
Chris@0
|
192 public function setMigration($migration) {
|
Chris@0
|
193 $this->migration = $migration;
|
Chris@0
|
194 }
|
Chris@0
|
195
|
Chris@0
|
196 /**
|
Chris@0
|
197 * {@inheritdoc}
|
Chris@0
|
198 */
|
Chris@0
|
199 public function mapJoinable() {
|
Chris@0
|
200 return parent::mapJoinable();
|
Chris@0
|
201 }
|
Chris@0
|
202
|
Chris@0
|
203 /**
|
Chris@0
|
204 * {@inheritdoc}
|
Chris@0
|
205 */
|
Chris@0
|
206 public function getIds() {
|
Chris@0
|
207 return $this->ids;
|
Chris@0
|
208 }
|
Chris@0
|
209
|
Chris@0
|
210 /**
|
Chris@0
|
211 * Allows us to set the IDs during a test.
|
Chris@0
|
212 *
|
Chris@0
|
213 * @param array $ids
|
Chris@0
|
214 * An array of identifiers.
|
Chris@0
|
215 */
|
Chris@0
|
216 public function setIds($ids) {
|
Chris@0
|
217 $this->ids = $ids;
|
Chris@0
|
218 }
|
Chris@0
|
219
|
Chris@0
|
220 /**
|
Chris@0
|
221 * {@inheritdoc}
|
Chris@0
|
222 */
|
Chris@0
|
223 public function fields() {}
|
Chris@0
|
224
|
Chris@0
|
225 /**
|
Chris@0
|
226 * {@inheritdoc}
|
Chris@0
|
227 */
|
Chris@0
|
228 public function query() {}
|
Chris@0
|
229
|
Chris@0
|
230 /**
|
Chris@0
|
231 * {@inheritdoc}
|
Chris@0
|
232 */
|
Chris@0
|
233 public function calculateDependencies() {
|
Chris@0
|
234 return [];
|
Chris@0
|
235 }
|
Chris@0
|
236
|
Chris@0
|
237 }
|