Skip to content

Commit

Permalink
Add base migration test
Browse files Browse the repository at this point in the history
  • Loading branch information
MrHash committed Mar 28, 2017
1 parent 8231765 commit 6640568
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 23 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"require": {
"php": ">=5.6.0",
"beberlei/assert": "~2.5",
"honeybee/trellis": "~0.1.0",
"honeybee/trellis": "~0.1",
"shrink0r/workflux": "~0.5.3",
"shrink0r/monatic": "~0.2.1",
"elasticsearch/elasticsearch": "^2.0",
Expand Down
39 changes: 21 additions & 18 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions src/Infrastructure/Migration/Migration.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ protected function guardDirection($direction)
if (!in_array($direction, [ self::MIGRATE_UP, self::MIGRATE_DOWN ])) {
throw new RuntimeError(
sprintf(
'Invalid migration direction given: %s to migration %s. Only %s and %s are supported',
'Invalid migration direction given: %s to migration %s:%s. Only %s and %s are supported',
$direction,
$this->getVersion(),
$this->getName(),
self::MIGRATE_UP,
self::MIGRATE_DOWN
)
Expand All @@ -84,11 +85,12 @@ protected function guardDirection($direction)

protected function guardReversal()
{
if ($this->isReversible()) {
if (!$this->isReversible()) {
throw new RuntimeError(
sprintf(
'Migration %s is marked as non-reversable and does not support downward migration.',
$this->getVersion()
'Migration %s:%s is marked as non-reversable and does not support downward migration.',
$this->getVersion(),
$this->getName()
)
);
}
Expand Down
144 changes: 144 additions & 0 deletions testing/unit/Infrastructure/Migration/MigrationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
<?php

namespace Honeybee\Tests\Infrastructure\Migration;

use Honeybee\Infrastructure\Migration\Migration;
use Honeybee\Infrastructure\Migration\MigrationInterface;
use Honeybee\Infrastructure\Migration\MigrationTargetInterface;
use Honeybee\Tests\TestCase;
use Mockery;
use Honeybee\Infrastructure\DataAccess\Connector\ConnectorInterface;

class MigrationTest extends TestCase
{
public function testGetNameNull()
{
$mock_migration = Mockery::mock(Migration::CLASS)->makePartial();
$this->assertNull($mock_migration->getName());
}

public function testGetName()
{
$mock_migration = Mockery::mock(Migration::CLASS, [['name' => 'mock_migration']])->makePartial();
$this->assertEquals('mock_migration', $mock_migration->getName());
}

public function testGetVersionNull()
{
$mock_migration = Mockery::mock(Migration::CLASS)->makePartial();
$this->assertNull($mock_migration->getVersion());
}

public function testGetVersion()
{
$mock_migration = Mockery::mock(Migration::CLASS, [['version' => '2020']])->makePartial();
$this->assertEquals('2020', $mock_migration->getVersion());
}

/**
* @expectedException Honeybee\Common\Error\RuntimeError
*/
public function testGetTimestampInvalid()
{
$mock_migration = Mockery::namedMock('InvalidMock', Migration::CLASS)->makePartial();
$mock_migration->getTimestamp();
}

public function testGetTimestamp()
{
$mock_migration = Mockery::namedMock('Migration_12345678901234', Migration::CLASS)->makePartial();
$this->assertEquals('12345678901234', $mock_migration->getTimestamp());
}

public function testGetConnection()
{
$mock_migration = Mockery::mock(Migration::CLASS)->makePartial();
$mock_connection = new \stdClass;
$mock_connector = Mockery::mock(ConnectorInterface::CLASS);
$mock_connector->shouldReceive('getConnection')->once()->withNoArgs()->andReturn($mock_connection);
$mock_migration_target = Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('getTargetConnector')->once()->withNoArgs()->andReturn($mock_connector);
$this->assertSame($mock_connection, $mock_migration->getConnection($mock_migration_target));
}

/**
* @expectedException Honeybee\Common\Error\RuntimeError
*/
public function testMigrateGuardInactive()
{
$mock_migration = Mockery::mock(
Migration::CLASS,
[['name' => 'mock_migration', 'version' => '20201234567890']]
)->makePartial();
$mock_migration_target= Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('isActivated')->once()->withNoArgs()->andReturnFalse();
$mock_migration_target->shouldReceive('getName')->once()->withNoArgs()->andReturn('mock_target');
$mock_migration->migrate($mock_migration_target);
} //@codeCoverageIgnore

/**
* @expectedException Honeybee\Common\Error\RuntimeError
*/
public function testMigrateGuardDirection()
{
$mock_migration = Mockery::mock(
Migration::CLASS,
[['name' => 'mock_migration', 'version' => '20201234567890']]
)->makePartial();
$mock_migration_target= Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('isActivated')->once()->withNoArgs()->andReturnTrue();
$mock_migration->migrate($mock_migration_target, 'invalid');
} //@codeCoverageIgnore

/**
* @expectedException Honeybee\Common\Error\RuntimeError
*/
public function testMigrateGuardReversal()
{
$mock_migration = Mockery::mock(
Migration::CLASS,
[['name' => 'mock_migration', 'version' => '20201234567890']]
)->makePartial();
$mock_migration->shouldReceive('isReversible')->once()->withNoArgs()->andReturnFalse();
$mock_migration_target= Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('isActivated')->once()->withNoArgs()->andReturnTrue();
$mock_migration->migrate($mock_migration_target, 'down');
} //@codeCoverageIgnore

public function testMigrateUp()
{
$mock_migration = Mockery::mock(
Migration::CLASS,
[['name' => 'mock_migration', 'version' => '20201234567890']]
)->makePartial();
$mock_migration_target= Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('isActivated')->once()->withNoArgs()->andReturnTrue();
$mock_migration_target->shouldReceive('bumpStructureVersion')->once()->with(
Mockery::on(function (MigrationInterface $migration) use ($mock_migration) {
$this->assertSame($mock_migration, $migration);
return true;
}),
'up'
)->andReturnNull();
$mock_migration->migrate($mock_migration_target, 'up');
}

public function testMigrateDown()
{
$mock_migration = Mockery::mock(
Migration::CLASS,
[['name' => 'mock_migration', 'version' => '20201234567890']]
)->makePartial();
$mock_migration->shouldReceive('isReversible')->once()->withNoArgs()->andReturnTrue();
$mock_migration_target= Mockery::mock(MigrationTargetInterface::CLASS);
$mock_migration_target->shouldReceive('isActivated')->once()->withNoArgs()->andReturnTrue();
$mock_migration_target->shouldReceive('bumpStructureVersion')->once()->with(
Mockery::on(function (MigrationInterface $migration) use ($mock_migration) {
$this->assertSame($mock_migration, $migration);
return true;
}),
'down'
)->andReturnNull();
$mock_migration->migrate($mock_migration_target, 'down');
}
}

0 comments on commit 6640568

Please sign in to comment.