annotate core/modules/migrate/tests/src/Unit/SqlBaseTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
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 }