Skip to content

Commit 6384594

Browse files
committed
feat: Require manual publishing of migrations instead of auto migrating
Also includes test to test migration
1 parent e0ffce3 commit 6384594

5 files changed

Lines changed: 75 additions & 37 deletions

File tree

database/migrations/2024_04_15_120524_create_mobile_numbers_table.php renamed to database/migrations/create_mobile_numbers_table.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use Illuminate\Database\Schema\Blueprint;
55
use Illuminate\Database\Migrations\Migration;
66

7-
class CreateMobileNumbersTable extends Migration
7+
return new class extends Migration
88
{
99
/**
1010
* Run the migrations.
@@ -42,4 +42,4 @@ public function down()
4242
{
4343
Schema::connection(config('mobile-verification.database_connection'))->dropIfExists(config('mobile-verification.table_name'));
4444
}
45-
}
45+
};

src/MobileVerification.php

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,6 @@
77

88
class MobileVerification
99
{
10-
/**
11-
* Indicates if migrations will be run.
12-
*
13-
* @var bool
14-
*/
15-
public static $runsMigrations = true;
16-
17-
/**
18-
* Configure to not register its migrations.
19-
*
20-
* @return static
21-
*/
22-
public static function ignoreMigrations()
23-
{
24-
static::$runsMigrations = false;
25-
26-
return new static();
27-
}
28-
2910
/**
3011
* Get the configs
3112
* @param string $key

src/MobileVerificationServiceProvider.php

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Javaabu\MobileVerification;
44

5+
use Carbon\Carbon;
6+
use Illuminate\Support\Str;
57
use Laravel\Passport\Passport;
68
use Illuminate\Support\ServiceProvider;
79
use League\OAuth2\Server\AuthorizationServer;
@@ -12,18 +14,31 @@
1214

1315
class MobileVerificationServiceProvider extends ServiceProvider
1416
{
17+
/**
18+
* The package migrations, in order of creation.
19+
*
20+
* @var array|string[]
21+
*/
22+
protected array $migrations = [
23+
'create_mobile_numbers_table'
24+
];
25+
1526
/**
1627
* Bootstrap the application services.
1728
*/
1829
public function boot()
1930
{
2031
// declare publishes
2132
if ($this->app->runningInConsole()) {
22-
$this->registerMigrations();
33+
// Publish migrations with current timestamp
34+
foreach ($this->migrations as $migration) {
35+
$vendorMigration = __DIR__ . '/../database/migrations/' . $migration . '.php';
36+
$appMigration = $this->generateMigrationName($migration, now()->addSecond());
2337

24-
$this->publishes([
25-
__DIR__.'/../database/migrations' => database_path('migrations'),
26-
], 'mobile-verification-migrations');
38+
$this->publishes([
39+
$vendorMigration => $appMigration,
40+
], 'mobile-verification-migrations');
41+
}
2742

2843
$this->publishes([
2944
__DIR__ . '/../config/mobile-verification.php' => config_path('mobile-verification.php'),
@@ -38,18 +53,6 @@ public function boot()
3853
$this->loadTranslationsFrom(__DIR__.'/../lang', 'mobile-verification');
3954
}
4055

41-
/**
42-
* Register migration files.
43-
*
44-
* @return void
45-
*/
46-
protected function registerMigrations(): void
47-
{
48-
if (MobileVerification::$runsMigrations) {
49-
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
50-
}
51-
}
52-
5356
/**
5457
* Register the application services.
5558
*/
@@ -80,4 +83,28 @@ protected function makeGrant(): MobileGrant
8083

8184
return $grant;
8285
}
86+
87+
protected function generateMigrationName(string $migrationFileName, Carbon $now): string
88+
{
89+
$migrationsPath = 'migrations/' . dirname($migrationFileName) . '/';
90+
$migrationFileName = basename($migrationFileName);
91+
92+
$len = strlen($migrationFileName) + 4;
93+
94+
if (Str::contains($migrationFileName, '/')) {
95+
$migrationsPath .= Str::of($migrationFileName)->beforeLast('/')->finish('/');
96+
$migrationFileName = Str::of($migrationFileName)->afterLast('/');
97+
}
98+
99+
foreach (glob(database_path("{$migrationsPath}*.php")) as $filename) {
100+
if ((substr($filename, -$len) === $migrationFileName . '.php')) {
101+
return $filename;
102+
}
103+
}
104+
105+
$timestamp = $now->format('Y_m_d_His');
106+
$migrationFileName = Str::of($migrationFileName)->snake()->finish('.php');
107+
108+
return database_path($migrationsPath . $timestamp . '_' . $migrationFileName);
109+
}
83110
}

tests/TestSupport/Providers/TestServiceProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public function boot()
1717
{
1818
$this->loadMigrationsFrom([
1919
__DIR__ . '/../database',
20+
__DIR__ . '/../../../database/migrations',
2021
__DIR__ . '/../../../vendor/laravel/passport/database/migrations'
2122
]);
2223

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Javaabu\MobileVerification\Tests\Unit\migrations;
4+
5+
use Illuminate\Support\Facades\Schema;
6+
use PHPUnit\Framework\Attributes\Test;
7+
use Javaabu\MobileVerification\Tests\TestCase;
8+
use Illuminate\Foundation\Testing\RefreshDatabase;
9+
10+
class CreateMobileNumbersTableTest extends TestCase
11+
{
12+
use RefreshDatabase;
13+
14+
#[Test]
15+
public function it_can_migrate_up_languages_table()
16+
{
17+
$this->withoutExceptionHandling();
18+
19+
$this->assertTrue(Schema::hasTable('mobile_numbers'));
20+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'user_type'));
21+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'user_id'));
22+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'attempts'));
23+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'number'));
24+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'country_code'));
25+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'verification_code'));
26+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'verification_code_created_at'));
27+
$this->assertTrue(Schema::hasColumn('mobile_numbers', 'verification_code_id'));
28+
}
29+
}

0 commit comments

Comments
 (0)