public function test() { $data = json_encode(['maker' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'name']], 'data_rows' => [['id' => 1, 'name' => 'Maker 1'], ['id' => 2, 'name' => 'Maker 2']]], 'model' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'maker_id', 'foreign_key' => ['table_name' => 'maker', 'column_name' => 'id']], ['name' => 'name']], 'data_rows' => [['id' => 3, 'maker_id' => 1, 'name' => 'Model 1'], ['id' => 4, 'maker_id' => 1, 'name' => 'Model 2']]]]); $dataParser = new JsonDataParser(); $dataParser->setColumnsCreator(new JsonColumnsCreator())->setDataRowsCreator(new JsonDataRowsCreator())->setData($data); $connection = new MySqlConnectionCreator(); $subject = new MySqlDataImporter(); $subject->setConnection($connection->createConnection())->setDataParser($dataParser)->setObserver(new AutoIncrementObserver(new ForeignKeyColumnsFinder()))->setAutoIncrementFinder(new AutoIncrementTableColumnFinder())->import(); $connectionCreator = new MySqlConnectionCreator(); $connection = $connectionCreator->createConnection(); $statement = $connection->query("SELECT * FROM maker WHERE name IN('Maker 1', 'Maker 2') ORDER BY name"); $statement->setFetchMode(\PDO::FETCH_ASSOC); $makers = $statement->fetchAll(); static::assertSame('Maker 1', $makers[0]['name']); static::assertNotSame(1, (int) $makers[0]['id']); static::assertSame('Maker 2', $makers[1]['name']); static::assertNotSame(2, (int) $makers[1]['id']); $statement = $connection->query('SELECT * FROM model WHERE maker_id IN(' . implode(', ', [$makers[0]['id'], $makers[1]['id']]) . ') ' . 'ORDER BY name'); $statement->setFetchMode(\PDO::FETCH_ASSOC); $models = $statement->fetchAll(); static::assertSame('Model 1', $models[0]['name']); static::assertNotSame(3, (int) $models[0]['id']); static::assertSame('Model 2', $models[1]['name']); static::assertNotSame(4, (int) $models[1]['id']); $this->setExpectedException(\RuntimeException::class); $subject->import(); }
public function test() { $data = json_encode(['maker' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'name']], 'data_rows' => [['id' => 1, 'name' => 'Maker 1'], ['id' => 2, 'name' => 'Maker 2']]], 'model' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'maker_id', 'foreign_key' => ['table_name' => 'maker', 'column_name' => 'id']], ['name' => 'name']], 'data_rows' => [['id' => 3, 'maker_id' => 1, 'name' => 'Model 1'], ['id' => 4, 'maker_id' => 1, 'name' => 'Model 2']]]]); $subject = new JsonDataParser(); $subject->setColumnsCreator(new JsonColumnsCreator())->setDataRowsCreator(new JsonDataRowsCreator())->setData($data); $tables = $subject->getTables(); static::assertTrue(is_array($tables)); static::assertCount(2, $tables); $this->checkMakerTableResult($tables[0])->checkModelTableResult($tables[1]); }
public function test() { $data = json_encode(['maker' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'name']], 'data_rows' => [['id' => 1, 'name' => 'Maker 1'], ['id' => 2, 'name' => 'Maker 2']]], 'model' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'maker_id', 'foreign_key' => ['table_name' => 'maker', 'column_name' => 'id']], ['name' => 'name']], 'data_rows' => [['id' => 3, 'maker_id' => 1, 'name' => 'Model 1'], ['id' => 4, 'maker_id' => 1, 'name' => 'Model 2']]]]); $dataParser = new JsonDataParser(); $dataParser->setColumnsCreator(new JsonColumnsCreator())->setDataRowsCreator(new JsonDataRowsCreator())->setData($data); $tables = $dataParser->getTables(); $columns = $tables[0]->getColumns(); $subject = new ForeignKeyColumnsFinder(); $result = $subject->setTables($tables)->setParentColumn($columns['id'])->getDependentColumns(); static::assertTrue(is_array($result)); static::assertCount(1, $result); static::assertSame('maker_id', $result[0]->getName()); static::assertSame('model', $result[0]->getTable()->getName()); $subject->setParentColumn(new Column('test_column')); $this->setExpectedExceptionRegExp(\RuntimeException::class, '/The parent column does not contain a parent table/'); $subject->getDependentColumns(); }
public function test() { $data = json_encode(['maker' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'name']], 'data_rows' => [['id' => 1, 'name' => 'Maker 1'], ['id' => 2, 'name' => 'Maker 2']]], 'model' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'maker_id', 'foreign_key' => ['table_name' => 'maker', 'column_name' => 'id']], ['name' => 'name']], 'data_rows' => [['id' => 3, 'maker_id' => 1, 'name' => 'Model 1'], ['id' => 4, 'maker_id' => 1, 'name' => 'Model 2'], ['id' => 5, 'maker_id' => 2, 'name' => 'Model 3']]]]); $subject = new JsonDataParser(); $subject->setColumnsCreator(new JsonColumnsCreator())->setDataRowsCreator(new JsonDataRowsCreator())->setData($data); $tables = $subject->getTables(); $makerColumns = $tables[0]->getColumns(); $event = new AutoIncrementChangeEvent(); $event->setColumn($makerColumns['id'])->setOldValue(1)->setNewValue(456); $subject = new AutoIncrementObserver(new ForeignKeyColumnsFinder()); $subject->setTables($tables)->notify($event); $changedValues = 0; foreach ($tables[1]->getDataRows() as $dataRow) { foreach ($dataRow->getDataColumns() as $dataColumn) { if ('maker_id' === $dataColumn->getName() && 2 !== $dataColumn->getValue()) { static::assertFalse($dataColumn->isOriginalValue()); static::assertSame(456, $dataColumn->getValue()); $changedValues++; } } } static::assertSame(2, $changedValues); }