Skip to content

Commit

Permalink
Merge pull request #32 from TheDragonCode/2.x
Browse files Browse the repository at this point in the history
Method to be called on runtime error
  • Loading branch information
Andrey Helldar authored Dec 23, 2021
2 parents 444bc2f + 8c3f5f5 commit 17da27a
Show file tree
Hide file tree
Showing 7 changed files with 232 additions and 29 deletions.
2 changes: 1 addition & 1 deletion src/Support/Migrator.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,6 @@ protected function runSuccess(ActionableContract $migration): void
*/
protected function runFailed(ActionableContract $migration): void
{
//$migration->failed();
$migration->failed();
}
}
82 changes: 67 additions & 15 deletions tests/Commands/MigrateTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,22 @@ public function testOnce()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 1);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 3);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 4);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
}

Expand Down Expand Up @@ -118,7 +118,7 @@ public function testSingleEnvironment()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
Expand All @@ -127,7 +127,7 @@ public function testSingleEnvironment()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
Expand Down Expand Up @@ -155,7 +155,7 @@ public function testManyEnvironments()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
Expand All @@ -166,7 +166,7 @@ public function testManyEnvironments()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
Expand All @@ -191,13 +191,13 @@ public function testAllow()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
}
Expand All @@ -216,11 +216,11 @@ public function testUpSuccess()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_success');
}

public function testUpFailed()
public function testUpSuccessOnFailed()
{
$this->copyFiles();

Expand All @@ -234,11 +234,11 @@ public function testUpFailed()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');

try {
$this->copyFiles(true);
$this->copySuccessFailureMethod();

$this->artisan('migrate:actions')->run();
} catch (Throwable $e) {
Expand All @@ -250,10 +250,62 @@ public function testUpFailed()
}

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');
}

public function testUpFailed()
{
$this->copyFiles();

$table = 'failed';

$this->artisan('migrate:actions:install')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 0);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_failed');
}

public function testUpFailedOnException()
{
$this->copyFiles();

$table = 'failed';

$this->artisan('migrate:actions:install')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 0);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');

try {
$this->copyFailedMethod();

$this->artisan('migrate:actions')->run();
} catch (Throwable $e) {
$this->assertInstanceOf(Exception::class, $e);

$this->assertSame('Custom exception', $e->getMessage());

$this->assertTrue(Str::contains($e->getFile(), 'run_failed_failure'));
}

$this->assertDatabaseCount($table, 1);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
}

public function testPathAsFileWithExtension()
{
$this->copyFiles();
Expand Down
75 changes: 67 additions & 8 deletions tests/Commands/RollbackTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public function testEnvironment()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 5);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
Expand All @@ -79,7 +79,7 @@ public function testEnvironment()
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_many_environments');
}

public function testUpSuccess()
public function testDownSuccess()
{
$this->copyFiles();

Expand All @@ -93,7 +93,7 @@ public function testUpSuccess()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_success');

$this->artisan('migrate:actions:rollback')->run();
Expand All @@ -102,7 +102,7 @@ public function testUpSuccess()
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
}

public function testUpFailed()
public function testDownSuccessOnFailed()
{
$this->copyFiles();

Expand All @@ -116,13 +116,13 @@ public function testUpFailed()
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 7);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');

try {
$this->copyFiles(true);
$this->copySuccessFailureMethod();

$this->table()->insert(['migration' => 'run_success_on_failed', 'batch' => 999]);
$this->table()->insert(['migration' => '2021_12_23_165048_run_success_on_failed', 'batch' => 999]);

$this->artisan('migrate:actions:rollback')->run();
} catch (Throwable $e) {
Expand All @@ -134,7 +134,66 @@ public function testUpFailed()
}

$this->assertDatabaseCount($table, 2);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseCount($this->table, 9);
$this->assertDatabaseMigrationHas($this->table, 'run_success_on_failed');
}

public function testDownFailed()
{
$this->copyFiles();

$table = 'failed';

$this->artisan('migrate:actions:install')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 0);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationHas($this->table, 'run_failed');

$this->artisan('migrate:actions:rollback')->run();
$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 0);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
}

public function testUpFailedOnException()
{
$this->copyFiles();

$table = 'failed';

$this->artisan('migrate:actions:install')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 0);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
$this->artisan('migrate:actions')->run();

$this->assertDatabaseCount($table, 0);
$this->assertDatabaseCount($this->table, 8);
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');

try {
$this->copyFailedMethod();

$this->table()->insert(['migration' => '2021_12_23_184029_run_failed_failure', 'batch' => 999]);

$this->artisan('migrate:actions:rollback')->run();
} catch (Throwable $e) {
$this->assertInstanceOf(Exception::class, $e);

$this->assertSame('Custom exception', $e->getMessage());

$this->assertTrue(Str::contains($e->getFile(), 'run_failed_failure'));
}

$this->assertDatabaseCount($table, 1);
$this->assertDatabaseCount($this->table, 9);
$this->assertDatabaseMigrationHas($this->table, 'run_failed_failure');
}
}
22 changes: 17 additions & 5 deletions tests/Concerns/Files.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,25 @@ protected function freshFiles(): void
);
}

protected function copyFiles(bool $failed = false): void
protected function copyFiles(): void
{
$source = $failed
? __DIR__ . '/../fixtures/actions_failed'
: __DIR__ . '/../fixtures/actions';
File::copyDirectory(__DIR__ . '/../fixtures/actions', $this->targetDirectory());
}

File::copyDirectory($source, $this->targetDirectory());
protected function copySuccessFailureMethod()
{
File::copy(
__DIR__ . '/../fixtures/actions_failed/2021_12_23_165048_run_success_on_failed.php',
$this->targetDirectory('2021_12_23_165048_run_success_on_failed.php')
);
}

protected function copyFailedMethod()
{
File::copy(
__DIR__ . '/../fixtures/actions_failed/2021_12_23_184029_run_failed_failure.php',
$this->targetDirectory('2021_12_23_184029_run_failed_failure.php')
);
}

protected function copySuccessTransaction(): void
Expand Down
29 changes: 29 additions & 0 deletions tests/fixtures/actions/2021_12_23_184029_run_failed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

use DragonCode\LaravelActions\Support\Actionable;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;

class RunFailed extends Actionable
{
public function up(): void
{
}

public function down(): void
{
}

public function failed(): void
{
$this->table()->insert([
'value' => Uuid::uuid4(),
]);
}

protected function table(): Builder
{
return DB::table('success');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

use DragonCode\LaravelActions\Support\Actionable;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;

class RunFailedFailure extends Actionable
{
public function up(): void
{
throw new Exception('Custom exception');
}

public function down(): void
{
throw new Exception('Custom exception');
}

public function failed(): void
{
$this->table()->insert([
'value' => Uuid::uuid4(),
]);
}

protected function table(): Builder
{
return DB::table('failed');
}
}
Loading

0 comments on commit 17da27a

Please sign in to comment.