Chris@0: getMockBuilder('Drupal\Core\Database\Connection') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $source_connection->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never()) Chris@0: ->method('getConnectionOptions') Chris@0: ->willReturn($source_options); Chris@0: Chris@0: // Setup the ID map connection. Chris@0: $idmap_connection = $this->getMockBuilder('Drupal\Core\Database\Connection') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $idmap_connection->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never()) Chris@0: ->method('getConnectionOptions') Chris@0: ->willReturn($idmap_options); Chris@0: Chris@0: // Setup the Sql object. Chris@0: $sql = $this->getMockBuilder('Drupal\migrate\Plugin\migrate\id_map\Sql') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $sql->expects($id_map_is_sql && $with_id_map ? $this->once() : $this->never()) Chris@0: ->method('getDatabase') Chris@0: ->willReturn($idmap_connection); Chris@0: Chris@0: // Setup a migration entity. Chris@0: $migration = $this->getMock(MigrationInterface::class); Chris@0: $migration->expects($with_id_map ? $this->once() : $this->never()) Chris@0: ->method('getIdMap') Chris@0: ->willReturn($id_map_is_sql ? $sql : NULL); Chris@0: Chris@0: // Create our SqlBase test class. Chris@0: $sql_base = new TestSqlBase(); Chris@0: $sql_base->setMigration($migration); Chris@0: $sql_base->setDatabase($source_connection); Chris@0: Chris@0: // Configure the idMap to make the check in mapJoinable() pass. Chris@0: if ($with_id_map) { Chris@0: $sql_base->setIds([ Chris@0: 'uid' => ['type' => 'integer', 'alias' => 'u'], Chris@0: ]); Chris@0: } Chris@0: Chris@0: $this->assertEquals($expected_result, $sql_base->mapJoinable()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * The data provider for SqlBase. Chris@0: * Chris@0: * @return array Chris@0: * An array of data per test run. Chris@0: */ Chris@0: public function sqlBaseTestProvider() { Chris@0: return [ Chris@0: // Source ids are empty so mapJoinable() is false. Chris@0: [ Chris@0: FALSE, Chris@0: FALSE, Chris@0: FALSE, Chris@0: ], Chris@0: // Still false because getIdMap() is not a subclass of Sql. Chris@0: [ Chris@0: FALSE, Chris@0: FALSE, Chris@0: TRUE, Chris@0: ], Chris@0: // Test mapJoinable() returns false when source and id connection options Chris@0: // differ. Chris@0: [ Chris@0: FALSE, Chris@0: TRUE, Chris@0: TRUE, Chris@0: ['driver' => 'mysql', 'username' => 'different_from_map', 'password' => 'different_from_map'], Chris@0: ['driver' => 'mysql', 'username' => 'different_from_source', 'password' => 'different_from_source'], Chris@0: ], Chris@0: // Returns false because driver is pgsql and the databases are not the Chris@0: // same. Chris@0: [ Chris@0: FALSE, Chris@0: TRUE, Chris@0: TRUE, Chris@0: ['driver' => 'pgsql', 'database' => '1.pgsql', 'username' => 'same_value', 'password' => 'same_value'], Chris@0: ['driver' => 'pgsql', 'database' => '2.pgsql', 'username' => 'same_value', 'password' => 'same_value'], Chris@0: ], Chris@0: // Returns false because driver is sqlite and the databases are not the Chris@0: // same. Chris@0: [ Chris@0: FALSE, Chris@0: TRUE, Chris@0: TRUE, Chris@0: ['driver' => 'sqlite', 'database' => '1.sqlite', 'username' => '', 'password' => ''], Chris@0: ['driver' => 'sqlite', 'database' => '2.sqlite', 'username' => '', 'password' => ''], Chris@0: ], Chris@0: // Returns false because driver is not the same. Chris@0: [ Chris@0: FALSE, Chris@0: TRUE, Chris@0: TRUE, Chris@0: ['driver' => 'pgsql', 'username' => 'same_value', 'password' => 'same_value'], Chris@0: ['driver' => 'mysql', 'username' => 'same_value', 'password' => 'same_value'], Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: /** Chris@0: * Creates a base source class for SQL migration testing. Chris@0: */ Chris@0: class TestSqlBase extends SqlBase { Chris@0: Chris@0: /** Chris@0: * The database object. Chris@0: * Chris@0: * @var object Chris@0: */ Chris@0: protected $database; Chris@0: Chris@0: /** Chris@0: * The migration IDs. Chris@0: * Chris@0: * @var array Chris@0: */ Chris@0: protected $ids; Chris@0: Chris@0: /** Chris@0: * Override the constructor so we can create one easily. Chris@0: */ Chris@0: public function __construct() {} Chris@0: Chris@0: /** Chris@0: * Allows us to set the database during tests. Chris@0: * Chris@0: * @param mixed $database Chris@0: * The database mock object. Chris@0: */ Chris@0: public function setDatabase($database) { Chris@0: $this->database = $database; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDatabase() { Chris@0: return $this->database; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Allows us to set the migration during the test. Chris@0: * Chris@0: * @param mixed $migration Chris@0: * The migration mock. Chris@0: */ Chris@0: public function setMigration($migration) { Chris@0: $this->migration = $migration; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function mapJoinable() { Chris@0: return parent::mapJoinable(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getIds() { Chris@0: return $this->ids; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Allows us to set the IDs during a test. Chris@0: * Chris@0: * @param array $ids Chris@0: * An array of identifiers. Chris@0: */ Chris@0: public function setIds($ids) { Chris@0: $this->ids = $ids; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function fields() {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function query() {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function calculateDependencies() { Chris@0: return []; Chris@0: } Chris@0: Chris@0: }