/** * Prepare to do a migration * * @param string $destination version to migrate to * @param $string $direction direction to migrate to 'up'/'down' */ private function prepare_to_migrate($destination, $direction) { try { $this->_return .= "\tMigrating " . strtoupper($direction); if (!is_null($destination)) { $this->_return .= " to: {$destination}\n"; } else { $this->_return .= ":\n"; } $migrations = $this->_migrator_util->get_runnable_migrations($this->_migratorDirs, $direction, $destination); if (count($migrations) == 0) { $this->_return .= "\nNo relevant migrations to run. Exiting...\n"; return; } $result = $this->run_migrations($migrations, $direction, $destination); } catch (Exception $ex) { throw $ex; } }
/** * test target version with runnable migrations going down, no current version */ public function test_get_runnable_migrations_going_down_with_target_version_no_current() { $migrator_util = new Ruckusing_Util_Migrator($this->adapter); $this->insert_dummy_version_data(array(3, '20090122193325')); $actual_down_files = $migrator_util->get_runnable_migrations($this->migrations_dirs, 'down', 1, false); $expect_down_files = array(array('version' => '20090122193325', 'class' => 'AddNewTable', 'file' => '20090122193325_AddNewTable.php', 'module' => 'default'), array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php', 'module' => 'default')); $this->assertEquals($expect_down_files, $actual_down_files); $this->clear_dummy_data(); $this->insert_dummy_version_data(array(3)); $actual_down_files = $migrator_util->get_runnable_migrations($this->migrations_dirs, 'down', 1, false); $expect_down_files = array(array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php', 'module' => 'default')); $this->assertEquals($expect_down_files, $actual_down_files); //go all the way down! $this->clear_dummy_data(); $this->insert_dummy_version_data(array(1, 3, '20090122193325')); $actual_down_files = $migrator_util->get_runnable_migrations($this->migrations_dirs, 'down', 0, false); $expect_down_files = array(array('version' => '20090122193325', 'class' => 'AddNewTable', 'file' => '20090122193325_AddNewTable.php', 'module' => 'default'), array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php', 'module' => 'default'), array('version' => 1, 'class' => 'CreateUsers', 'file' => '001_CreateUsers.php', 'module' => 'default')); $this->assertEquals($expect_down_files, $actual_down_files); }
/** * test target version with runnable migrations going up, no current version, new module just added */ public function test_get_runnable_migrations_going_up_with_target_version_no_current_new_module() { $migrator_util = new Ruckusing_Util_Migrator($this->adapter); $this->insert_dummy_version_data(array(1, 3)); $actual_up_files = $migrator_util->get_runnable_migrations($this->migrations_dirs, 'up', false); // need to up with new migrations form new module folder $expect_up_files = array(array('version' => 2, 'class' => 'JustNewMigration', 'file' => '002_JustNewMigration.php', 'module' => 'additional'), array('version' => '20090122193325', 'class' => 'AddNewTable', 'file' => '20090122193325_AddNewTable.php', 'module' => 'default')); $this->assertEquals($expect_up_files, $actual_up_files); // order of up doesn't influence on order of down $this->clear_dummy_data(); $this->insert_dummy_version_data(array(1, 3, 2, '20090122193325')); $actual_down_files = $migrator_util->get_runnable_migrations($this->migrations_dirs, 'down', 0, false); $expect_down_files = array(array('version' => '20090122193325', 'class' => 'AddNewTable', 'file' => '20090122193325_AddNewTable.php', 'module' => 'default'), array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php', 'module' => 'default'), array('version' => 2, 'class' => 'JustNewMigration', 'file' => '002_JustNewMigration.php', 'module' => 'additional'), array('version' => 1, 'class' => 'CreateUsers', 'file' => '001_CreateUsers.php', 'module' => 'default')); $this->assertEquals($expect_down_files, $actual_down_files); }