Chris@0: 'sql_idmap_test', Chris@0: ]; Chris@0: Chris@0: /** Chris@0: * Tests the ensureTables method when the tables do not exist. Chris@0: */ Chris@0: public function testEnsureTablesNotExist() { Chris@0: $fields['source_ids_hash'] = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => 64, Chris@0: 'not null' => 1, Chris@17: 'description' => 'Hash of source ids. Used as primary key', Chris@0: ]; Chris@0: $fields['sourceid1'] = [ Chris@0: 'type' => 'int', Chris@0: 'not null' => TRUE, Chris@0: ]; Chris@0: $fields['sourceid2'] = [ Chris@0: 'type' => 'int', Chris@0: 'not null' => TRUE, Chris@0: ]; Chris@0: $fields['destid1'] = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => 255, Chris@0: 'not null' => FALSE, Chris@0: ]; Chris@0: $fields['source_row_status'] = [ Chris@0: 'type' => 'int', Chris@0: 'size' => 'tiny', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: 'default' => MigrateIdMapInterface::STATUS_IMPORTED, Chris@0: 'description' => 'Indicates current status of the source row', Chris@0: ]; Chris@0: $fields['rollback_action'] = [ Chris@0: 'type' => 'int', Chris@0: 'size' => 'tiny', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: 'default' => MigrateIdMapInterface::ROLLBACK_DELETE, Chris@0: 'description' => 'Flag indicating what to do for this item on rollback', Chris@0: ]; Chris@0: $fields['last_imported'] = [ Chris@0: 'type' => 'int', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: 'default' => 0, Chris@0: 'description' => 'UNIX timestamp of the last time this row was imported', Chris@0: ]; Chris@0: $fields['hash'] = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => '64', Chris@0: 'not null' => FALSE, Chris@0: 'description' => 'Hash of source row data, for detecting changes', Chris@0: ]; Chris@0: $map_table_schema = [ Chris@0: 'description' => 'Mappings from source identifier value(s) to destination identifier value(s).', Chris@0: 'fields' => $fields, Chris@0: 'primary key' => ['source_ids_hash'], Chris@0: 'indexes' => [ Chris@0: 'source' => ['sourceid1', 'sourceid2'], Chris@0: ], Chris@0: ]; Chris@0: $schema = $this->getMockBuilder('Drupal\Core\Database\Schema') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $schema->expects($this->at(0)) Chris@0: ->method('tableExists') Chris@0: ->with('migrate_map_sql_idmap_test') Chris@0: ->will($this->returnValue(FALSE)); Chris@0: $schema->expects($this->at(1)) Chris@0: ->method('createTable') Chris@0: ->with('migrate_map_sql_idmap_test', $map_table_schema); Chris@0: // Now do the message table. Chris@0: $fields = []; Chris@0: $fields['msgid'] = [ Chris@0: 'type' => 'serial', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: ]; Chris@0: $fields['source_ids_hash'] = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => 64, Chris@0: 'not null' => 1, Chris@17: 'description' => 'Hash of source ids. Used as primary key', Chris@0: ]; Chris@0: $fields['level'] = [ Chris@0: 'type' => 'int', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: 'default' => 1, Chris@0: ]; Chris@0: $fields['message'] = [ Chris@0: 'type' => 'text', Chris@0: 'size' => 'medium', Chris@0: 'not null' => TRUE, Chris@0: ]; Chris@0: $table_schema = [ Chris@0: 'description' => 'Messages generated during a migration process', Chris@0: 'fields' => $fields, Chris@0: 'primary key' => ['msgid'], Chris@0: ]; Chris@0: Chris@0: $schema->expects($this->at(2)) Chris@0: ->method('tableExists') Chris@0: ->with('migrate_message_sql_idmap_test') Chris@0: ->will($this->returnValue(FALSE)); Chris@0: $schema->expects($this->at(3)) Chris@0: ->method('createTable') Chris@0: ->with('migrate_message_sql_idmap_test', $table_schema); Chris@0: $schema->expects($this->any()) Chris@0: ->method($this->anything()); Chris@0: $this->runEnsureTablesTest($schema); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the ensureTables method when the tables exist. Chris@0: */ Chris@0: public function testEnsureTablesExist() { Chris@0: $schema = $this->getMockBuilder('Drupal\Core\Database\Schema') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $schema->expects($this->at(0)) Chris@0: ->method('tableExists') Chris@0: ->with('migrate_map_sql_idmap_test') Chris@0: ->will($this->returnValue(TRUE)); Chris@0: $schema->expects($this->at(1)) Chris@0: ->method('fieldExists') Chris@0: ->with('migrate_map_sql_idmap_test', 'rollback_action') Chris@0: ->will($this->returnValue(FALSE)); Chris@0: $field_schema = [ Chris@0: 'type' => 'int', Chris@0: 'size' => 'tiny', Chris@0: 'unsigned' => TRUE, Chris@0: 'not null' => TRUE, Chris@0: 'default' => 0, Chris@0: 'description' => 'Flag indicating what to do for this item on rollback', Chris@0: ]; Chris@0: $schema->expects($this->at(2)) Chris@0: ->method('addField') Chris@0: ->with('migrate_map_sql_idmap_test', 'rollback_action', $field_schema); Chris@0: $schema->expects($this->at(3)) Chris@0: ->method('fieldExists') Chris@0: ->with('migrate_map_sql_idmap_test', 'hash') Chris@0: ->will($this->returnValue(FALSE)); Chris@0: $field_schema = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => '64', Chris@0: 'not null' => FALSE, Chris@0: 'description' => 'Hash of source row data, for detecting changes', Chris@0: ]; Chris@0: $schema->expects($this->at(4)) Chris@0: ->method('addField') Chris@0: ->with('migrate_map_sql_idmap_test', 'hash', $field_schema); Chris@0: $schema->expects($this->at(5)) Chris@0: ->method('fieldExists') Chris@0: ->with('migrate_map_sql_idmap_test', 'source_ids_hash') Chris@0: ->will($this->returnValue(FALSE)); Chris@0: $field_schema = [ Chris@0: 'type' => 'varchar', Chris@0: 'length' => '64', Chris@0: 'not null' => TRUE, Chris@0: 'description' => 'Hash of source ids. Used as primary key', Chris@0: ]; Chris@0: $schema->expects($this->at(6)) Chris@0: ->method('addField') Chris@0: ->with('migrate_map_sql_idmap_test', 'source_ids_hash', $field_schema); Chris@0: $schema->expects($this->exactly(7)) Chris@0: ->method($this->anything()); Chris@0: $this->runEnsureTablesTest($schema); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Actually run the test. Chris@0: * Chris@0: * @param array $schema Chris@0: * The mock schema object with expectations set. The Sql constructor calls Chris@0: * ensureTables() which in turn calls this object and the expectations on Chris@0: * it are the actual test and there are no additional asserts added. Chris@0: */ Chris@0: protected function runEnsureTablesTest($schema) { Chris@0: $database = $this->getMockBuilder('Drupal\Core\Database\Connection') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $database->expects($this->any()) Chris@0: ->method('schema') Chris@0: ->willReturn($schema); Chris@0: $migration = $this->getMigration(); Chris@0: $plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface'); Chris@0: $plugin->expects($this->any()) Chris@0: ->method('getIds') Chris@0: ->willReturn([ Chris@0: 'source_id_property' => [ Chris@0: 'type' => 'integer', Chris@0: ], Chris@0: 'source_id_property_2' => [ Chris@0: 'type' => 'integer', Chris@0: ], Chris@0: ]); Chris@0: $migration->expects($this->any()) Chris@0: ->method('getSourcePlugin') Chris@0: ->willReturn($plugin); Chris@0: $plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface'); Chris@0: $plugin->expects($this->any()) Chris@0: ->method('getIds') Chris@0: ->willReturn([ Chris@0: 'destination_id_property' => [ Chris@0: 'type' => 'string', Chris@0: ], Chris@0: ]); Chris@0: $migration->expects($this->any()) Chris@0: ->method('getDestinationPlugin') Chris@0: ->willReturn($plugin); Chris@0: /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher */ Chris@0: $event_dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); Chris@0: $map = new TestSqlIdMap($database, [], 'sql', [], $migration, $event_dispatcher); Chris@0: $map->getDatabase(); Chris@0: } Chris@0: Chris@0: }