Skip to content
Snippets Groups Projects
Verified Commit d3e8d6a4 authored by Bartek Jaskulski's avatar Bartek Jaskulski
Browse files

fix: only include migrators from `AbstractMigration`


Signed-off-by: default avatarBart Jaskulski <bartek.jaskulski@wpdesk.net>
parent 56098c8c
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,10 @@ final class GlobFinder implements MigrationFinder { ...@@ -10,6 +10,10 @@ final class GlobFinder implements MigrationFinder {
public function find_migrations( string $directory ): array { public function find_migrations( string $directory ): array {
$dir = realpath( $directory ); $dir = realpath( $directory );
if ( $dir === false ) {
return [];
}
$files = glob( rtrim( $dir, '/' ) . '/Version*.php' ); $files = glob( rtrim( $dir, '/' ) . '/Version*.php' );
if ( $files === false ) { if ( $files === false ) {
$files = []; $files = [];
...@@ -46,7 +50,7 @@ final class GlobFinder implements MigrationFinder { ...@@ -46,7 +50,7 @@ final class GlobFinder implements MigrationFinder {
/** /**
* @param string[] $included_files * @param string[] $included_files
* @return \ReflectionClass[] * @return \ReflectionClass<AbstractMigration>[]
* @throws \ReflectionException * @throws \ReflectionException
*/ */
private function load_migration_classes( array $included_files ): array { private function load_migration_classes( array $included_files ): array {
...@@ -54,10 +58,15 @@ final class GlobFinder implements MigrationFinder { ...@@ -54,10 +58,15 @@ final class GlobFinder implements MigrationFinder {
foreach ( get_declared_classes() as $class ) { foreach ( get_declared_classes() as $class ) {
$r = new \ReflectionClass( $class ); $r = new \ReflectionClass( $class );
if ( ! $r->isSubclassOf( AbstractMigration::class ) ) {
continue;
}
if ( in_array( $r->getFileName(), $included_files, true ) ) { if ( in_array( $r->getFileName(), $included_files, true ) ) {
$classes[] = $r; $classes[] = $r;
} }
} }
return $classes; return $classes;
} }
} }
<?php
namespace WPDesk\Migrations\Tests\Finder;
use WPDesk\Migrations\Finder\GlobFinder;
use PHPUnit\Framework\TestCase;
class GlobFinderTest extends TestCase {
public function test_skip_unexpected_classes() {
$finder = new GlobFinder();
$migrations = $finder->find_migrations(__DIR__ . '/../../../../fixtures/migrations');
self::assertCount(2, $migrations);
self::assertContains(
'WPDesk\Migrations\Tests\fixtures\migrations\Version_10',
$migrations
);
self::assertContains(
'WPDesk\Migrations\Tests\fixtures\migrations\Version_11',
$migrations
);
self::assertNotContains(
'WPDesk\Migrations\Tests\fixtures\migrations\Borked_Version_01',
$migrations
);
}
}
<?php
declare( strict_types=1 );
namespace WPDesk\Migrations\Tests\fixtures\migrations;
use WPDesk\Migrations\AbstractMigration;
/** Invalid name */
class Borked_Version_01 extends AbstractMigration {
public function up(): bool {
return true;
}
}
<?php
declare( strict_types=1 );
namespace WPDesk\Migrations\Tests\fixtures\migrations;
/** Not extending abstract migration */
class Version_02 {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment