1
0
Fork 0
mirror of https://github.com/Oreolek/kohana-migrations.git synced 2024-06-26 03:40:54 +03:00

Changing timestamps to be {year}{month}{day}{hour}{minute}{second}

Also added get_migration method to model and some more tests
This commit is contained in:
Matt Button 2010-12-30 15:04:09 +00:00
parent d8f033f22a
commit 41a7392f15
4 changed files with 182 additions and 27 deletions

View file

@ -55,6 +55,31 @@ class Model_Minion_Migration extends Model
return $this; return $this;
} }
/**
* Get a migration by its id
*
* @param string Migration ID
* @return array Migration info
*/
public function get_migration($location, $timestamp = NULL)
{
if($timestamp === NULL)
{
if(empty($location) OR strpos(':', $location) === FALSE)
{
throw new Kohana_Exception('Invalid migration id :id', array(':id' => $location));
}
list($location, $timestamp) = explode(':', $location);
}
return $this->_select()
->where('timestamp', '=', (string) $timestamp)
->where('location', '=', (string) $location)
->execute($this->_db)
->current();
}
/** /**
* Deletes a migration from the database * Deletes a migration from the database
* *

View file

@ -1,7 +1,7 @@
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */; /*!40101 SET character_set_client = utf8 */;
CREATE TABLE `migrations` ( CREATE TABLE `migrations` (
`timestamp` varchar(12) NOT NULL, `timestamp` varchar(14) NOT NULL,
`description` varchar(100) NOT NULL, `description` varchar(100) NOT NULL,
`location` varchar(100) NOT NULL, `location` varchar(100) NOT NULL,
`applied` tinyint(1) DEFAULT '0', `applied` tinyint(1) DEFAULT '0',

View file

@ -27,9 +27,7 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
*/ */
public function getModel() public function getModel()
{ {
$db = Database::instance(Kohana::config('unittest')->db_connection); return new Model_Minion_Migration($this->getKohanaConnection());
return new Model_Minion_Migration($db);
} }
/** /**
@ -58,8 +56,8 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
$this->assertSame( $this->assertSame(
array ( array (
'app' => '1293543858', 'app' => '20101216080000',
'dblogger' => '1293544858', 'dblogger' => '20101225000000',
), ),
$versions $versions
); );
@ -80,18 +78,18 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
'direction' => true, 'direction' => true,
'migrations' => array( 'migrations' => array(
array ( array (
'timestamp' => '1293543800', 'timestamp' => '20101215165000',
'description' => 'add-name-column-to-members', 'description' => 'add-name-column-to-members',
'location' => 'app', 'location' => 'app',
'applied' => '0', 'applied' => '0',
'id' => 'app:1293543800' 'id' => 'app:20101215165000'
), ),
array ( array (
'timestamp' => '1293543828', 'timestamp' => '20101216000000',
'description' => 'add-index-on-name', 'description' => 'add-index-on-name',
'location' => 'app', 'location' => 'app',
'applied' => '0', 'applied' => '0',
'id' => 'app:1293543828' 'id' => 'app:20101216000000'
), ),
), ),
), ),
@ -99,11 +97,11 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
'direction' => true, 'direction' => true,
'migrations' => array( 'migrations' => array(
array ( array (
'timestamp' => '1293544908', 'timestamp' => '20101226112100',
'description' => 'add-pk', 'description' => 'add-pk',
'location' => 'dblogger', 'location' => 'dblogger',
'applied' => '0', 'applied' => '0',
'id' => 'dblogger:1293544908' 'id' => 'dblogger:20101226112100'
), ),
), ),
), ),
@ -118,18 +116,18 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
'direction' => FALSE, 'direction' => FALSE,
'migrations' => array( 'migrations' => array(
array( array(
'timestamp' => '1293543858', 'timestamp' => '20101216080000',
'description' => 'remove-password-salt-column', 'description' => 'remove-password-salt-column',
'location' => 'app', 'location' => 'app',
'applied' => '1', 'applied' => '1',
'id' => 'app:1293543858' 'id' => 'app:20101216080000'
), ),
array( array(
'timestamp' => '1293543728', 'timestamp' => '20101215164400',
'description' => 'create-tables', 'description' => 'create-tables',
'location' => 'app', 'location' => 'app',
'applied' => '1', 'applied' => '1',
'id' => 'app:1293543728' 'id' => 'app:20101215164400'
), ),
) )
), ),
@ -137,18 +135,18 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
'direction' => FALSE, 'direction' => FALSE,
'migrations' => array( 'migrations' => array(
array( array(
'timestamp' => '1293544858', 'timestamp' => '20101225000000',
'description' => 'remove-unique-index', 'description' => 'remove-unique-index',
'location' => 'dblogger', 'location' => 'dblogger',
'applied' => '1', 'applied' => '1',
'id' => 'dblogger:1293544858' 'id' => 'dblogger:20101225000000'
), ),
array( array(
'timestamp' => '1293543858', 'timestamp' => '20101215164500',
'description' => 'create-table', 'description' => 'create-table',
'location' => 'dblogger', 'location' => 'dblogger',
'applied' => '1', 'applied' => '1',
'id' => 'dblogger:1293543858' 'id' => 'dblogger:20101215164500'
), ),
) )
), ),
@ -179,4 +177,136 @@ class Minion_Migration_ModelTest extends Kohana_Unittest_Database_TestCase
$this->assertSame($expected, $results); $this->assertSame($expected, $results);
} }
/**
* Provides test data for test_get_migration
*
* @return array
*/
public function provider_get_migration()
{
return array(
array(
array(
'timestamp' => '20101215164400',
'description' => 'create-tables',
'location' => 'app',
'applied' => '1',
'id' => 'app:20101215164400'
),
'app',
'20101215164400',
)
);
}
/**
* Tests that Model_Minion_Migration::get_migration can get a migration from
* the database
*
* @test
* @covers Model_Minion_Migration::get_migration
* @dataProvider provider_get_migration
* @param array Expected migration
* @param string The migration's location
* @param string The migration's timestamp
*/
public function test_get_migration($expected, $location, $timestamp)
{
$this->assertSame(
$expected,
$this->getModel()->get_migration($location, $timestamp)
);
}
/**
* Provides test data for test_get_migration_throws_exception_on_invalid_input
*
* @return array
*/
public function provider_get_migration_throws_exception_on_invalid_input()
{
return array(
array(NULL, NULL),
array('app', NULL),
);
}
/**
* If invalid input is passed to get_migration then it should throw an
* exception
*
* @test
* @covers Model_Minion_Migration::get_migration
* @dataProvider provider_get_migration_throws_exception_on_invalid_input
* @expectedException Kohana_Exception
*/
public function test_get_migration_throws_exception_on_invalid_input($location, $timestamp)
{
$this->getModel()->get_migration($location, $timestamp);
}
/**
* Provides test data for test_mark_migration
*
* @return array
*/
public function provider_mark_migration()
{
return array(
array(
array(
'timestamp' => '20101215165000',
'description' => 'add-name-column-to-members',
'location' => 'app',
'applied' => '1',
'id' => 'app:20101215165000',
),
array(
'timestamp' => '20101215165000',
'location' => 'app',
'description' => 'add-name-column-to-members',
),
TRUE
),
array(
array(
'timestamp' => '20101215165000',
'description' => 'add-name-column-to-members',
'location' => 'app',
'applied' => '0',
'id' => 'app:20101215165000',
),
array(
'timestamp' => '20101215165000',
'location' => 'app',
'description' => 'add-name-column-to-members',
),
FALSE
),
);
}
/**
* Tests that Model_Minion_Migration::mark_migration() changes the applied
* status of a migration
*
* @test
* @covers Model_Minion_Migration::mark_migration
* @dataProvider provider_mark_migration
* @param array What the DB record should look like after migration is marked
* @param array The migration to update
* @param bool Whether the migration should be applied
*/
public function test_mark_migration($expected, $migration, $applied)
{
$model = $this->getModel();
$model->mark_migration($migration, $applied);
$this->assertSame(
$expected,
$model->get_migration($migration['location'], $migration['timestamp'])
);
}
} }

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<dataset> <dataset>
<migrations timestamp="1293543728" description="create-tables" location="app" applied="1" /> <migrations timestamp="20101215164400" description="create-tables" location="app" applied="1" />
<migrations timestamp="1293543800" description="add-name-column-to-members" location="app" applied="0" /> <migrations timestamp="20101215165000" description="add-name-column-to-members" location="app" applied="0" />
<migrations timestamp="1293543828" description="add-index-on-name" location="app" applied="0" /> <migrations timestamp="20101216000000" description="add-index-on-name" location="app" applied="0" />
<migrations timestamp="1293543858" description="remove-password-salt-column" location="app" applied="1" /> <migrations timestamp="20101216080000" description="remove-password-salt-column" location="app" applied="1" />
<migrations timestamp="1293543858" description="create-table" location="dblogger" applied="1" /> <migrations timestamp="20101215164500" description="create-table" location="dblogger" applied="1" />
<migrations timestamp="1293544858" description="remove-unique-index" location="dblogger" applied="1" /> <migrations timestamp="20101225000000" description="remove-unique-index" location="dblogger" applied="1" />
<migrations timestamp="1293544908" description="add-pk" location="dblogger" applied="0" /> <migrations timestamp="20101226112100" description="add-pk" location="dblogger" applied="0" />
</dataset> </dataset>