From df4924edd138d0a5331631883b5cfccbc0f1bf64 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Wed, 10 Sep 2025 13:46:22 +0900 Subject: [PATCH 1/6] feat: migrate additional admins to database refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- resources/views/admins_create_table.blade.php | 12 +++--- src/Commands/InitCommand.php | 5 +++ tests/InitCommandTest.php | 14 ++++++- .../admins_table_migration.php | 12 +++--- .../nova_admins_table_migration.php | 37 +++++++++++++++++++ .../telescope_admins_table_migration.php | 37 +++++++++++++++++++ 6 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 tests/fixtures/InitCommandTest/nova_admins_table_migration.php create mode 100644 tests/fixtures/InitCommandTest/telescope_admins_table_migration.php diff --git a/resources/views/admins_create_table.blade.php b/resources/views/admins_create_table.blade.php index f157a04..5334c04 100644 --- a/resources/views/admins_create_table.blade.php +++ b/resources/views/admins_create_table.blade.php @@ -12,11 +12,13 @@ class AdminsCreateTable extends Migration public function up() { - Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); + if (!Schema::hasTable('admins')) { + Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + } if (!App::environment('testing')) { DB::table('admins')->insert([ diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index c07f4f3..d1b0ffd 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -374,6 +374,11 @@ protected function fillCredentialsAndAccess(string $kebabName): void $email = $this->ask("Please enter a {$title}'s admin email", "admin@{$kebabName}.com"); $password = $this->ask("Please enter a {$title}'s admin password", $defaultPassword); + + $this->publishMigration( + view: view('initializator::admins_create_table')->with(['email' => $email, 'password' => $password]), + migrationName: 'admins_create_table', + ); } $this->setReadmeValue($filePart, "{$key}_email", $email); diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index 7397060..aaf22e8 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -514,6 +514,10 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns 'database/migrations/2018_11_11_111111_add_default_user.php', $this->getFixture('migration.php'), ], + [ + 'database/migrations/2018_11_11_111111_admins_create_table.php', + $this->getFixture('nova_admins_table_migration.php'), + ], [ 'README.md', $this->getFixture('full_readme.md'), @@ -649,10 +653,18 @@ public function testRunWithoutAdminAndUsingTelescope() $this->mockFilePutContent( 'env.example.yml', 'env.development.yml', + [ + 'database/migrations/2018_11_11_111111_admins_create_table.php', + $this->getFixture('telescope_admins_table_migration.php'), + ], + [ + 'database/migrations/2018_11_11_111111_admins_create_table.php', + $this->getFixture('nova_admins_table_migration.php'), + ], [ 'README.md', $this->getFixture('partial_readme_with_telescope.md'), - ] + ], ); $this->mockShellExec( diff --git a/tests/fixtures/InitCommandTest/admins_table_migration.php b/tests/fixtures/InitCommandTest/admins_table_migration.php index 61383e6..541466e 100644 --- a/tests/fixtures/InitCommandTest/admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/admins_table_migration.php @@ -14,11 +14,13 @@ class AdminsCreateTable extends Migration public function up() { - Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); + if (!Schema::hasTable('admins')) { + Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + } if (!App::environment('testing')) { DB::table('admins')->insert([ diff --git a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php new file mode 100644 index 0000000..d33ff74 --- /dev/null +++ b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + } + + if (!App::environment('testing')) { + DB::table('admins')->insert([ + 'email' => 'nova_mail@mail.com', + 'password' => Hash::make('654321'), + ]); + } + } + + public function down() + { + Schema::dropIfExists('admins'); + } +} diff --git a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php new file mode 100644 index 0000000..6820424 --- /dev/null +++ b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + } + + if (!App::environment('testing')) { + DB::table('admins')->insert([ + 'email' => 'telescope_mail@mail.com', + 'password' => Hash::make('654321'), + ]); + } + } + + public function down() + { + Schema::dropIfExists('admins'); + } +} From b8a9963b56302aa47e88e10bfdeedb163860e0d2 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Wed, 10 Sep 2025 15:26:50 +0900 Subject: [PATCH 2/6] fix: fix additional admins migrations refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- ..._create_or_add_additional_admins.blade.php | 35 +++++++++++++++++++ resources/views/admins_create_table.blade.php | 12 +++---- src/Commands/InitCommand.php | 8 +++-- tests/InitCommandTest.php | 6 ++-- .../admins_table_migration.php | 12 +++---- .../nova_admins_table_migration.php | 2 +- .../telescope_admins_table_migration.php | 2 +- 7 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 resources/views/admins_create_or_add_additional_admins.blade.php diff --git a/resources/views/admins_create_or_add_additional_admins.blade.php b/resources/views/admins_create_or_add_additional_admins.blade.php new file mode 100644 index 0000000..aaca880 --- /dev/null +++ b/resources/views/admins_create_or_add_additional_admins.blade.php @@ -0,0 +1,35 @@ +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Schema; +use RonasIT\Support\Traits\MigrationTrait; + +class CreateOrAdd{{ ucfirst($credentialItem) }}AdminTable extends Migration +{ + use MigrationTrait; + + public function up() + { + if (!Schema::hasTable('admins')) { + Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + } + + if (!App::environment('testing')) { + DB::table('admins')->insert([ + 'email' => '{{ $email }}', + 'password' => Hash::make('{{ $password }}'), + ]); + } + } + + public function down() + { + Schema::dropIfExists('admins'); + } +} diff --git a/resources/views/admins_create_table.blade.php b/resources/views/admins_create_table.blade.php index 5334c04..f157a04 100644 --- a/resources/views/admins_create_table.blade.php +++ b/resources/views/admins_create_table.blade.php @@ -12,13 +12,11 @@ class AdminsCreateTable extends Migration public function up() { - if (!Schema::hasTable('admins')) { - Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - } + Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); if (!App::environment('testing')) { DB::table('admins')->insert([ diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index d1b0ffd..e1f12bb 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -376,8 +376,12 @@ protected function fillCredentialsAndAccess(string $kebabName): void $password = $this->ask("Please enter a {$title}'s admin password", $defaultPassword); $this->publishMigration( - view: view('initializator::admins_create_table')->with(['email' => $email, 'password' => $password]), - migrationName: 'admins_create_table', + view: view('initializator::admins_create_or_add_additional_admins')->with([ + 'email' => $email, + 'password' => $password, + 'credentialItem' => $key, + ]), + migrationName: "admins_create_table_or_add_{$key}_admin", ); } diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index aaf22e8..eba952d 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -515,7 +515,7 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns $this->getFixture('migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_create_table.php', + 'database/migrations/2018_11_11_111111_admins_create_table_or_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -654,11 +654,11 @@ public function testRunWithoutAdminAndUsingTelescope() 'env.example.yml', 'env.development.yml', [ - 'database/migrations/2018_11_11_111111_admins_create_table.php', + 'database/migrations/2018_11_11_111111_admins_create_table_or_add_telescope_admin.php', $this->getFixture('telescope_admins_table_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_create_table.php', + 'database/migrations/2018_11_11_111111_admins_create_table_or_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ diff --git a/tests/fixtures/InitCommandTest/admins_table_migration.php b/tests/fixtures/InitCommandTest/admins_table_migration.php index 541466e..61383e6 100644 --- a/tests/fixtures/InitCommandTest/admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/admins_table_migration.php @@ -14,13 +14,11 @@ class AdminsCreateTable extends Migration public function up() { - if (!Schema::hasTable('admins')) { - Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - } + Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); if (!App::environment('testing')) { DB::table('admins')->insert([ diff --git a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php index d33ff74..ca35582 100644 --- a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php @@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Schema; use RonasIT\Support\Traits\MigrationTrait; -class AdminsCreateTable extends Migration +class CreateOrAddNovaAdminTable extends Migration { use MigrationTrait; diff --git a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php index 6820424..21fabb1 100644 --- a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php @@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Schema; use RonasIT\Support\Traits\MigrationTrait; -class AdminsCreateTable extends Migration +class CreateOrAddTelescopeAdminTable extends Migration { use MigrationTrait; From 2651b3723d13949970eafbee621881f1752d8413 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Thu, 11 Sep 2025 16:22:08 +0900 Subject: [PATCH 3/6] refactor: migrate admins by auth type, add tests refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- ...s_create_or_add_additional_admin.blade.php | 45 +++++ ..._create_or_add_additional_admins.blade.php | 35 ---- .../users_add_additional_admin.blade.php | 31 ++++ src/Commands/InitCommand.php | 50 ++++- tests/InitCommandTest.php | 174 +++++++++++++++++- .../admins_add_nova_admin_migration.php | 31 ++++ .../nova_admins_table_migration.php | 26 ++- .../partial_readme_clerk_with_credentials.md | 35 ++++ .../telescope_admins_table_migration.php | 26 ++- .../telescope_clerk_admin_migration.php | 41 +++++ 10 files changed, 416 insertions(+), 78 deletions(-) create mode 100644 resources/views/admins_create_or_add_additional_admin.blade.php delete mode 100644 resources/views/admins_create_or_add_additional_admins.blade.php create mode 100644 resources/views/users_add_additional_admin.blade.php create mode 100644 tests/fixtures/InitCommandTest/admins_add_nova_admin_migration.php create mode 100644 tests/fixtures/InitCommandTest/partial_readme_clerk_with_credentials.md create mode 100644 tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php diff --git a/resources/views/admins_create_or_add_additional_admin.blade.php b/resources/views/admins_create_or_add_additional_admin.blade.php new file mode 100644 index 0000000..335a37a --- /dev/null +++ b/resources/views/admins_create_or_add_additional_admin.blade.php @@ -0,0 +1,45 @@ +use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use RonasIT\Support\Traits\MigrationTrait; +@if (!$isAdminsCreated) +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +@endif + +class Add{{ ucfirst($credentialName) }}Admin extends Migration +{ + use MigrationTrait; + + public function up(): void + { + @if (!$isAdminsCreated) +Schema::create('admins', function (Blueprint $table) { + $table->increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + + @endif +if (!App::environment('testing')) { + DB::table('admins')->insert([ + 'email' => '{{ $email }}', + 'password' => Hash::make('{{ $password }}'), + ]); + } + } + + public function down(): void + { + @if (!$isAdminsCreated) +Schema::dropIfExists('admins'); + + @endif +if (!App::environment('testing')) { + DB::table('admins') + ->where('email', '{{ $email }}') + ->delete(); + } + } +} diff --git a/resources/views/admins_create_or_add_additional_admins.blade.php b/resources/views/admins_create_or_add_additional_admins.blade.php deleted file mode 100644 index aaca880..0000000 --- a/resources/views/admins_create_or_add_additional_admins.blade.php +++ /dev/null @@ -1,35 +0,0 @@ -use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Schema; -use RonasIT\Support\Traits\MigrationTrait; - -class CreateOrAdd{{ ucfirst($credentialItem) }}AdminTable extends Migration -{ - use MigrationTrait; - - public function up() - { - if (!Schema::hasTable('admins')) { - Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - } - - if (!App::environment('testing')) { - DB::table('admins')->insert([ - 'email' => '{{ $email }}', - 'password' => Hash::make('{{ $password }}'), - ]); - } - } - - public function down() - { - Schema::dropIfExists('admins'); - } -} diff --git a/resources/views/users_add_additional_admin.blade.php b/resources/views/users_add_additional_admin.blade.php new file mode 100644 index 0000000..8ee1507 --- /dev/null +++ b/resources/views/users_add_additional_admin.blade.php @@ -0,0 +1,31 @@ +use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use RonasIT\Support\Traits\MigrationTrait; + +class Add{{ ucfirst($credentialName) }}Admin extends Migration +{ + use MigrationTrait; + + public function up(): void + { + if (!App::environment('testing')) { + DB::table('users')->insert([ + 'name' => '{{ $name }}', + 'email' => '{{ $email }}', + 'password' => Hash::make('{{ $password }}'), + 'role_id' => {{ $roleID }}, + ]); + } + } + + public function down(): void + { + if (!App::environment('testing')) { + DB::table('users') + ->where('email', '{{ $email }}') + ->delete(); + } + } +} diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index e1f12bb..2e91e18 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -53,6 +53,8 @@ class InitCommand extends Command implements Isolatable protected array $adminCredentials = []; + protected bool $isAdminsTableCreated = false; + protected AuthTypeEnum $authType; protected string $appUrl; @@ -239,6 +241,8 @@ protected function createAdminUser(string $kebabName): void view: view('initializator::admins_create_table')->with($this->adminCredentials), migrationName: 'admins_create_table', ); + + $this->isAdminsTableCreated = true; } else { $this->adminCredentials['name'] = $this->ask('Please enter an admin name', 'Admin'); $this->adminCredentials['role_id'] = $this->ask('Please enter an admin role id', RoleEnum::Admin->value); @@ -372,17 +376,10 @@ protected function fillCredentialsAndAccess(string $kebabName): void } else { $defaultPassword = substr(md5(uniqid()), 0, 8); - $email = $this->ask("Please enter a {$title}'s admin email", "admin@{$kebabName}.com"); + $email = $this->ask("Please enter a {$title}'s admin email", "{$key}_admin@{$kebabName}.com"); $password = $this->ask("Please enter a {$title}'s admin password", $defaultPassword); - $this->publishMigration( - view: view('initializator::admins_create_or_add_additional_admins')->with([ - 'email' => $email, - 'password' => $password, - 'credentialItem' => $key, - ]), - migrationName: "admins_create_table_or_add_{$key}_admin", - ); + $this->publishAdditionalAdminMigration($title, $key, $email, $password); } $this->setReadmeValue($filePart, "{$key}_email", $email); @@ -570,4 +567,39 @@ protected function enableClerk(): void filePath: 'app/Support/Clerk', ); } + + protected function publishAdditionalAdminMigration( + string $credentialTitle, + string $credentialName, + string $adminEmail, + string $adminPassword, + ): void { + if ($this->authType === AuthTypeEnum::None) { + $name = $this->ask("Please enter a {$credentialTitle}'s admin name", 'Admin'); + $roleID = $this->ask("Please enter a {$credentialTitle}'s admin role id", RoleEnum::Admin->value); + + $this->publishMigration( + view: view('initializator::users_add_additional_admin')->with([ + 'email' => $adminEmail, + 'password' => $adminPassword, + 'name' => $name, + 'roleID' => $roleID, + 'credentialName' => $credentialName, + ]), + migrationName: "users_add_{$credentialName}_admin", + ); + } elseif ($this->authType === AuthTypeEnum::Clerk) { + $this->publishMigration( + view: view('initializator::admins_create_or_add_additional_admin')->with([ + 'email' => $adminEmail, + 'password' => $adminPassword, + 'credentialName' => $credentialName, + 'isAdminsCreated' => $this->isAdminsTableCreated, + ]), + migrationName: "admins_add_{$credentialName}_admin", + ); + + $this->isAdminsTableCreated = true; + } + } } diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index eba952d..ba36780 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -243,6 +243,10 @@ public function testRunWithAdminAndDefaultReadmeCreation() 'database/migrations/2018_11_11_111111_admins_create_table.php', $this->getFixture('admins_table_migration.php'), ], + [ + 'database/migrations/2018_11_11_111111_admins_add_nova_admin.php', + $this->getFixture('admins_add_nova_admin_migration.php'), + ], [ 'README.md', $this->getFixture('default_readme.md'), @@ -323,7 +327,9 @@ public function testRunWithAdminAndDefaultReadmeCreation() ->expectsConfirmation('Do you need an `Environments` part?', 'yes') ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') ->expectsConfirmation('Is Laravel Telescope\'s admin the same as default one?', 'yes') - ->expectsConfirmation('Is Laravel Nova\'s admin the same as default one?', 'yes') + ->expectsConfirmation('Is Laravel Nova\'s admin the same as default one?') + ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'mail@mail.com') + ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '123456') ->expectsOutput('README generated successfully!') ->expectsOutput('Don`t forget to fill the following empty values:') ->expectsOutput('- Issue Tracker link') @@ -515,7 +521,7 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns $this->getFixture('migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_create_table_or_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_users_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -603,6 +609,8 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns ->expectsConfirmation('Is Laravel Nova\'s admin the same as default one?') ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'nova_mail@mail.com') ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '654321') + ->expectsQuestion('Please enter a Laravel Nova\'s admin name', 'Nova Admin') + ->expectsQuestion('Please enter a Laravel Nova\'s admin role id', 1) ->expectsOutput('README generated successfully!') ->expectsConfirmation('Would you use Renovate dependabot?', 'yes') ->expectsQuestion('Please type username of the project reviewer', 'reviewer') @@ -654,11 +662,11 @@ public function testRunWithoutAdminAndUsingTelescope() 'env.example.yml', 'env.development.yml', [ - 'database/migrations/2018_11_11_111111_admins_create_table_or_add_telescope_admin.php', + 'database/migrations/2018_11_11_111111_users_add_telescope_admin.php', $this->getFixture('telescope_admins_table_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_create_table_or_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_users_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -729,8 +737,12 @@ public function testRunWithoutAdminAndUsingTelescope() ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') ->expectsQuestion('Please enter a Laravel Telescope\'s admin email', 'telescope_mail@mail.com') ->expectsQuestion('Please enter a Laravel Telescope\'s admin password', '654321') + ->expectsQuestion('Please enter a Laravel Telescope\'s admin name', 'Telescope Admin') + ->expectsQuestion('Please enter a Laravel Telescope\'s admin role id', 1) ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'nova_mail@mail.com') ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '654321') + ->expectsQuestion('Please enter a Laravel Nova\'s admin name', 'Nova Admin') + ->expectsQuestion('Please enter a Laravel Nova\'s admin role id', 1) ->expectsOutput('README generated successfully!') ->expectsOutput('Don`t forget to fill the following empty values:') ->expectsOutput('- Issue Tracker link') @@ -921,4 +933,158 @@ public function testRunWithClerkMobileApp(): void ->expectsConfirmation('Do you want to uninstall project-initializator package?') ->assertExitCode(0); } + + public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void + { + $this->mockChangeConfig('config/auto-doc.php', 'auto_doc.php', 'auto_doc_after_changes.php'); + + $this->mockFileGetContent( + [ + 'arguments' => ['.env.example'], + 'result' => $this->getFixture('env.example.yml'), + ], + [ + 'arguments' => ['.env.development'], + 'result' => $this->getFixture('env.development.yml'), + ], + [ + 'arguments' => ['.env.development'], + 'result' => $this->getFixture('env.development.yml'), + ], + [ + 'arguments' => ['.env.example'], + 'result' => $this->getFixture('env.example.yml'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/README.md')], + 'result' => $this->getTemplate('README.md'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/RESOURCES_AND_CONTACTS.md')], + 'result' => $this->getTemplate('RESOURCES_AND_CONTACTS.md'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/RESOURCES.md')], + 'result' => $this->getTemplate('RESOURCES.md'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/CONTACTS.md')], + 'result' => $this->getTemplate('CONTACTS.md'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/CREDENTIALS_AND_ACCESS.md')], + 'result' => $this->getTemplate('CREDENTIALS_AND_ACCESS.md'), + ], + [ + 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/CLERK.md')], + 'result' => $this->getTemplate('CLERK.md'), + ], + ); + + $this->mockFilePutContent( + 'env.example.yml', + 'env.development.yml', + [ + 'database/migrations/2018_11_11_111111_users_add_clerk_id_field.php', + $this->getFixture('users_add_clerk_id_field_migration.php'), + ], + [ + 'app/Support/Clerk/ClerkUserRepository.php', + $this->getFixture('clerk_user_repository.php'), + ], + [ + '.env.development', + $this->getFixture('env.development_clerk_credentials_added.yml'), + ], + [ + '.env.example', + $this->getFixture('env.example_clerk_credentials_added.yml'), + ], + [ + 'database/migrations/2018_11_11_111111_admins_add_telescope_admin.php', + $this->getFixture('telescope_clerk_admin_migration.php'), + ], + [ + 'database/migrations/2018_11_11_111111_admins_add_nova_admin.php', + $this->getFixture('admins_add_nova_admin_migration.php'), + ], + [ + 'README.md', + $this->getFixture('partial_readme_clerk_with_credentials.md'), + ], + ); + + $this->mockShellExec( + ['arguments' => 'composer require ronasit/laravel-helpers --ansi'], + ['arguments' => 'composer require ronasit/laravel-swagger --ansi'], + ['arguments' => 'php artisan vendor:publish --provider="RonasIT\AutoDoc\AutoDocServiceProvider" --ansi'], + ['arguments' => 'composer require --dev ronasit/laravel-entity-generator --ansi'], + ['arguments' => 'composer require ronasit/laravel-clerk --ansi'], + ['arguments' => 'php artisan laravel-clerk:install --ansi'], + ['arguments' => 'composer require ronasit/laravel-telescope-extension --ansi'], + ['arguments' => 'php artisan telescope:install --ansi'], + ); + + $this + ->artisan('init "My App"') + ->expectsConfirmation('The application name is not in PascalCase, would you like to use MyApp') + ->expectsQuestion("Please specify a Code Owner/Team Lead's email", 'test@example.com') + ->expectsOutput('Project initialized successfully!') + ->expectsQuestion('Please enter an application URL', 'https://mysite.com') + ->expectsQuestion('What type of application will your API serve?', 'Web') + ->expectsChoice('Please choose the authentication type', 'clerk', ['clerk', 'none']) + ->expectsConfirmation('Do you want to generate an admin user?') + ->expectsConfirmation('Do you want to generate a README file?', 'yes') + ->expectsConfirmation('Do you need a `Resources & Contacts` part?', 'yes') + ->expectsQuestion( + 'Are you going to use Issue Tracker? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'no', + ) + ->expectsQuestion( + 'Are you going to use Figma? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'no', + ) + ->expectsQuestion( + 'Are you going to use Sentry? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'no', + ) + ->expectsQuestion( + 'Are you going to use DataDog? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'no', + ) + ->expectsQuestion( + 'Are you going to use ArgoCD? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'no', + ) + ->expectsQuestion( + 'Are you going to use Laravel Telescope? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'later', + ) + ->expectsQuestion( + 'Are you going to use Laravel Nova? ' + . 'Please enter a link or select `later` to do it later, otherwise select `no`.', + 'later', + ) + ->expectsQuestion('Please enter a Manager\'s email', 'manager@mail.com') + ->expectsConfirmation('Do you need a `Prerequisites` part?') + ->expectsConfirmation('Do you need a `Getting Started` part?') + ->expectsConfirmation('Do you need an `Environments` part?') + ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') + ->expectsQuestion('Please enter a Laravel Telescope\'s admin email', 'telescope_mail@mail.com') + ->expectsQuestion('Please enter a Laravel Telescope\'s admin password', '654321') + ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'mail@mail.com') + ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '123456') + ->expectsOutput('README generated successfully!') + ->expectsOutput('Don`t forget to fill the following empty values:') + ->expectsConfirmation('Would you use Renovate dependabot?') + ->expectsConfirmation('Do you want to install media package?') + ->expectsConfirmation('Do you want to uninstall project-initializator package?') + ->assertExitCode(0); + } } diff --git a/tests/fixtures/InitCommandTest/admins_add_nova_admin_migration.php b/tests/fixtures/InitCommandTest/admins_add_nova_admin_migration.php new file mode 100644 index 0000000..0e9d710 --- /dev/null +++ b/tests/fixtures/InitCommandTest/admins_add_nova_admin_migration.php @@ -0,0 +1,31 @@ +insert([ + 'email' => 'mail@mail.com', + 'password' => Hash::make('123456'), + ]); + } + } + + public function down(): void + { + if (!App::environment('testing')) { + DB::table('admins') + ->where('email', 'mail@mail.com') + ->delete(); + } + } +} diff --git a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php index ca35582..67725ea 100644 --- a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php @@ -1,37 +1,33 @@ increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - } - if (!App::environment('testing')) { - DB::table('admins')->insert([ + DB::table('users')->insert([ + 'name' => 'Nova Admin', 'email' => 'nova_mail@mail.com', 'password' => Hash::make('654321'), + 'role_id' => 1, ]); } } - public function down() + public function down(): void { - Schema::dropIfExists('admins'); + if (!App::environment('testing')) { + DB::table('users') + ->where('email', 'nova_mail@mail.com') + ->delete(); + } } } diff --git a/tests/fixtures/InitCommandTest/partial_readme_clerk_with_credentials.md b/tests/fixtures/InitCommandTest/partial_readme_clerk_with_credentials.md new file mode 100644 index 0000000..ca8c42e --- /dev/null +++ b/tests/fixtures/InitCommandTest/partial_readme_clerk_with_credentials.md @@ -0,0 +1,35 @@ +# My App + +This project implements an API for the My App Web app. + +## Project Resources & Contacts + +This section provides quick links to various resources and contacts associated +with this project. It's here to streamline your navigation and communication +process, so you can efficiently find what you need or reach out to who you need. + +### Resources + +Below are links to tools and services used in this project: +- [Laravel Telescope](): This is debug assistant for the Laravel framework. (will be added later) +- [Laravel Nova](): This is admin panel for the Laravel framework. (will be added later) +- [API Documentation](https://mysite.com) + +### Contacts + +Should you need assistance or have questions, feel free to connect with the following individuals: +- Manager: If you have any high-level project concerns, feel free to get in touch with our project manager. [Connect with Manager](mailto:manager@mail.com) +- Code Owner/Team Lead: For specific questions about the codebase or technical aspects, reach out to our team lead. [Connect with Team Lead](mailto:test@example.com) + +Please be mindful of each individual's preferred contact method and office hours. + +## Credentials and Access +Laravel Telescope access: +- email `telescope_mail@mail.com` +- password `654321` + +Laravel Nova access: +- email `mail@mail.com` +- password `123456` + +Core auth solution is [Clerk](https://clerk.com) so in `development` environment use any test phones and emails from [this list](https://clerk.com/docs/testing/test-emails-and-phones) diff --git a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php index 21fabb1..af51ad7 100644 --- a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php @@ -1,37 +1,33 @@ increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - } - if (!App::environment('testing')) { - DB::table('admins')->insert([ + DB::table('users')->insert([ + 'name' => 'Telescope Admin', 'email' => 'telescope_mail@mail.com', 'password' => Hash::make('654321'), + 'role_id' => 1, ]); } } - public function down() + public function down(): void { - Schema::dropIfExists('admins'); + if (!App::environment('testing')) { + DB::table('users') + ->where('email', 'telescope_mail@mail.com') + ->delete(); + } } } diff --git a/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php b/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php new file mode 100644 index 0000000..39c0965 --- /dev/null +++ b/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php @@ -0,0 +1,41 @@ +increments('id'); + $table->string('email')->unique(); + $table->string('password'); + }); + + if (!App::environment('testing')) { + DB::table('admins')->insert([ + 'email' => 'telescope_mail@mail.com', + 'password' => Hash::make('654321'), + ]); + } + } + + public function down(): void + { + Schema::dropIfExists('admins'); + + if (!App::environment('testing')) { + DB::table('admins') + ->where('email', 'telescope_mail@mail.com') + ->delete(); + } + } +} From f52446ea62fd3926b916dadc616c9930d25fe088 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Fri, 12 Sep 2025 16:21:08 +0900 Subject: [PATCH 4/6] fix: fix migration's classname redefined error refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- src/Commands/InitCommand.php | 4 ++-- tests/InitCommandTest.php | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index 2e91e18..b6f5378 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -586,7 +586,7 @@ protected function publishAdditionalAdminMigration( 'roleID' => $roleID, 'credentialName' => $credentialName, ]), - migrationName: "users_add_{$credentialName}_admin", + migrationName: "add_{$credentialName}_admin", ); } elseif ($this->authType === AuthTypeEnum::Clerk) { $this->publishMigration( @@ -596,7 +596,7 @@ protected function publishAdditionalAdminMigration( 'credentialName' => $credentialName, 'isAdminsCreated' => $this->isAdminsTableCreated, ]), - migrationName: "admins_add_{$credentialName}_admin", + migrationName: "add_{$credentialName}_admin", ); $this->isAdminsTableCreated = true; diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index ba36780..ff8504b 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -244,7 +244,7 @@ public function testRunWithAdminAndDefaultReadmeCreation() $this->getFixture('admins_table_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_admin.php', $this->getFixture('admins_add_nova_admin_migration.php'), ], [ @@ -521,7 +521,7 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns $this->getFixture('migration.php'), ], [ - 'database/migrations/2018_11_11_111111_users_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -662,11 +662,11 @@ public function testRunWithoutAdminAndUsingTelescope() 'env.example.yml', 'env.development.yml', [ - 'database/migrations/2018_11_11_111111_users_add_telescope_admin.php', + 'database/migrations/2018_11_11_111111_add_telescope_admin.php', $this->getFixture('telescope_admins_table_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_users_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_admin.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -1001,11 +1001,11 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void $this->getFixture('env.example_clerk_credentials_added.yml'), ], [ - 'database/migrations/2018_11_11_111111_admins_add_telescope_admin.php', + 'database/migrations/2018_11_11_111111_add_telescope_admin.php', $this->getFixture('telescope_clerk_admin_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_admins_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_admin.php', $this->getFixture('admins_add_nova_admin_migration.php'), ], [ From fb258ec4982926fd125ea0b0902bf3b5250cd490 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Fri, 26 Sep 2025 11:33:17 +0900 Subject: [PATCH 5/6] refactor: use existing createAdminUser method to create additional admins refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- resources/views/add_default_user.blade.php | 6 +- ... => admins_add_additional_admin.blade.php} | 8 +- ...s_create_or_add_additional_admin.blade.php | 45 -------- src/Commands/InitCommand.php | 103 ++++++++---------- tests/InitCommandTest.php | 44 ++++---- tests/fixtures/InitCommandTest/migration.php | 4 +- .../nova_admins_table_migration.php | 2 +- .../telescope_admins_table_migration.php | 2 +- .../telescope_clerk_admin_migration.php | 16 +-- 9 files changed, 81 insertions(+), 149 deletions(-) rename resources/views/{users_add_additional_admin.blade.php => admins_add_additional_admin.blade.php} (73%) delete mode 100644 resources/views/admins_create_or_add_additional_admin.blade.php diff --git a/resources/views/add_default_user.blade.php b/resources/views/add_default_user.blade.php index 2500546..d7f69fd 100644 --- a/resources/views/add_default_user.blade.php +++ b/resources/views/add_default_user.blade.php @@ -4,11 +4,11 @@ use Illuminate\Support\Facades\Hash; use RonasIT\Support\Traits\MigrationTrait; -class AddDefaultUser extends Migration +class {{ $migrationName }} extends Migration { use MigrationTrait; - public function up() + public function up(): void { if (!App::environment('testing')) { DB::table('users')->insert([ @@ -20,7 +20,7 @@ public function up() } } - public function down() + public function down(): void { if (!App::environment('testing')) { DB::table('users') diff --git a/resources/views/users_add_additional_admin.blade.php b/resources/views/admins_add_additional_admin.blade.php similarity index 73% rename from resources/views/users_add_additional_admin.blade.php rename to resources/views/admins_add_additional_admin.blade.php index 8ee1507..6a4a4c7 100644 --- a/resources/views/users_add_additional_admin.blade.php +++ b/resources/views/admins_add_additional_admin.blade.php @@ -4,18 +4,16 @@ use Illuminate\Support\Facades\Hash; use RonasIT\Support\Traits\MigrationTrait; -class Add{{ ucfirst($credentialName) }}Admin extends Migration +class {{ $migrationName }} extends Migration { use MigrationTrait; public function up(): void { if (!App::environment('testing')) { - DB::table('users')->insert([ - 'name' => '{{ $name }}', + DB::table('admins')->insert([ 'email' => '{{ $email }}', 'password' => Hash::make('{{ $password }}'), - 'role_id' => {{ $roleID }}, ]); } } @@ -23,7 +21,7 @@ public function up(): void public function down(): void { if (!App::environment('testing')) { - DB::table('users') + DB::table('admins') ->where('email', '{{ $email }}') ->delete(); } diff --git a/resources/views/admins_create_or_add_additional_admin.blade.php b/resources/views/admins_create_or_add_additional_admin.blade.php deleted file mode 100644 index 335a37a..0000000 --- a/resources/views/admins_create_or_add_additional_admin.blade.php +++ /dev/null @@ -1,45 +0,0 @@ -use Illuminate\Database\Migrations\Migration; -use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Hash; -use RonasIT\Support\Traits\MigrationTrait; -@if (!$isAdminsCreated) -use Illuminate\Support\Facades\Schema; -use Illuminate\Database\Schema\Blueprint; -@endif - -class Add{{ ucfirst($credentialName) }}Admin extends Migration -{ - use MigrationTrait; - - public function up(): void - { - @if (!$isAdminsCreated) -Schema::create('admins', function (Blueprint $table) { - $table->increments('id'); - $table->string('email')->unique(); - $table->string('password'); - }); - - @endif -if (!App::environment('testing')) { - DB::table('admins')->insert([ - 'email' => '{{ $email }}', - 'password' => Hash::make('{{ $password }}'), - ]); - } - } - - public function down(): void - { - @if (!$isAdminsCreated) -Schema::dropIfExists('admins'); - - @endif -if (!App::environment('testing')) { - DB::table('admins') - ->where('email', '{{ $email }}') - ->delete(); - } - } -} diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index 893acd2..208ed7d 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -53,8 +53,6 @@ class InitCommand extends Command implements Isolatable protected array $adminCredentials = []; - protected bool $isAdminsTableCreated = false; - protected AuthTypeEnum $authType; protected string $appUrl; @@ -229,31 +227,21 @@ protected function setAutoDocContactEmail(string $email): void $config->write(); } - protected function createAdminUser(string $kebabName): void + protected function createAdminUser(string $kebabName, string $serviceName = '', string $adminPrefix = 'an'): array { + $adminEmail = $serviceName ? "admin.{$serviceName}@{$kebabName}.com" : "admin@{$kebabName}.com"; $defaultPassword = substr(md5(uniqid()), 0, 8); - $this->adminCredentials = [ - 'email' => $this->ask('Please enter an admin email', "admin@{$kebabName}.com"), - 'password' => $this->ask('Please enter an admin password', $defaultPassword), + $adminCredentials = [ + 'email' => $this->ask("Please enter {$adminPrefix} admin email", $adminEmail), + 'password' => $this->ask("Please enter {$adminPrefix} admin password", $defaultPassword), ]; - if ($this->authType === AuthTypeEnum::Clerk) { - $this->publishMigration( - view: view('initializator::admins_create_table')->with($this->adminCredentials), - migrationName: 'admins_create_table', - ); - - $this->isAdminsTableCreated = true; - } else { - $this->adminCredentials['name'] = $this->ask('Please enter an admin name', 'Admin'); - $this->adminCredentials['role_id'] = $this->ask('Please enter an admin role id', RoleEnum::Admin->value); - - $this->publishMigration( - view: view('initializator::add_default_user')->with($this->adminCredentials), - migrationName: 'add_default_user', - ); + if (!$serviceName) { + $this->adminCredentials = $adminCredentials; } + + return $this->publishAdminMigration($adminCredentials, $adminPrefix, $serviceName); } protected function fillReadme(): void @@ -372,20 +360,15 @@ protected function fillCredentialsAndAccess(string $kebabName): void continue; } - if (!empty($this->adminCredentials) && $this->confirm("Is {$title}'s admin the same as default one?", true)) { - $email = $this->adminCredentials['email']; - $password = $this->adminCredentials['password']; + if (isset($this->adminCredentials['email']) && $this->confirm("Is {$title}'s admin the same as default one?", true)) { + $adminCredentials['email'] = $this->adminCredentials['email']; + $adminCredentials['password'] = $this->adminCredentials['password']; } else { - $defaultPassword = substr(md5(uniqid()), 0, 8); - - $email = $this->ask("Please enter a {$title}'s admin email", "{$key}_admin@{$kebabName}.com"); - $password = $this->ask("Please enter a {$title}'s admin password", $defaultPassword); - - $this->publishAdditionalAdminMigration($title, $key, $email, $password); + $adminCredentials = $this->createAdminUser($kebabName, $key, "{$title}'s"); } - $this->setReadmeValue($filePart, "{$key}_email", $email); - $this->setReadmeValue($filePart, "{$key}_password", $password); + $this->setReadmeValue($filePart, "{$key}_email", $adminCredentials['email']); + $this->setReadmeValue($filePart, "{$key}_password", $adminCredentials['password']); $this->removeTag($filePart, "{$key}_credentials"); } @@ -580,38 +563,40 @@ protected function publishWebLogin(): void file_put_contents(base_path('routes/web.php'), "\nAuth::routes();\n", FILE_APPEND); } - protected function publishAdditionalAdminMigration( - string $credentialTitle, - string $credentialName, - string $adminEmail, - string $adminPassword, - ): void { - if ($this->authType === AuthTypeEnum::None) { - $name = $this->ask("Please enter a {$credentialTitle}'s admin name", 'Admin'); - $roleID = $this->ask("Please enter a {$credentialTitle}'s admin role id", RoleEnum::Admin->value); + protected function publishAdminMigration(array $adminCredentials, string $adminPrefix, string $serviceName): array + { + if ($this->authType === AuthTypeEnum::Clerk) { + if (isset($this->adminCredentials['is_table_created'])) { + $viewName = 'admins_add_additional_admin'; + $migrationName = "add_{$serviceName}_admin"; + + $adminCredentials['migrationName'] = Str::studly($migrationName); + } else { + $viewName = $migrationName = 'admins_create_table'; + + $this->adminCredentials['is_table_created'] = true; + } $this->publishMigration( - view: view('initializator::users_add_additional_admin')->with([ - 'email' => $adminEmail, - 'password' => $adminPassword, - 'name' => $name, - 'roleID' => $roleID, - 'credentialName' => $credentialName, - ]), - migrationName: "add_{$credentialName}_admin", + view: view("initializator::{$viewName}")->with($adminCredentials), + migrationName: $migrationName, ); - } elseif ($this->authType === AuthTypeEnum::Clerk) { + } else { + $adminCredentials['name'] = $this->ask("Please enter {$adminPrefix} admin name", 'Admin'); + $adminCredentials['role_id'] = $this->ask("Please enter {$adminPrefix} admin role id", RoleEnum::Admin->value); + + $migrationName = !empty($this->adminCredentials) && !$serviceName + ? 'add_default_user' + : "add_{$serviceName}_user"; + + $adminCredentials['migrationName'] = Str::studly($migrationName); + $this->publishMigration( - view: view('initializator::admins_create_or_add_additional_admin')->with([ - 'email' => $adminEmail, - 'password' => $adminPassword, - 'credentialName' => $credentialName, - 'isAdminsCreated' => $this->isAdminsTableCreated, - ]), - migrationName: "add_{$credentialName}_admin", + view: view('initializator::add_default_user')->with($adminCredentials), + migrationName: $migrationName, ); - - $this->isAdminsTableCreated = true; } + + return $adminCredentials; } } diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index 02bd792..656ebdf 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -355,8 +355,8 @@ public function testRunWithAdminAndDefaultReadmeCreation() ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') ->expectsConfirmation('Is Laravel Telescope\'s admin the same as default one?', 'yes') ->expectsConfirmation('Is Laravel Nova\'s admin the same as default one?') - ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'mail@mail.com') - ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '123456') + ->expectsQuestion('Please enter Laravel Nova\'s admin email', 'mail@mail.com') + ->expectsQuestion('Please enter Laravel Nova\'s admin password', '123456') ->expectsOutput('README generated successfully!') ->expectsOutput('Don`t forget to fill the following empty values:') ->expectsOutput('- Issue Tracker link') @@ -562,7 +562,7 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns $this->getFixture('migration.php'), ], [ - 'database/migrations/2018_11_11_111111_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_user.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -648,10 +648,10 @@ public function testRunWithAdminAndFullReadmeCreationAndRemovingInitializatorIns ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') ->expectsConfirmation('Is Laravel Telescope\'s admin the same as default one?', 'yes') ->expectsConfirmation('Is Laravel Nova\'s admin the same as default one?') - ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'nova_mail@mail.com') - ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '654321') - ->expectsQuestion('Please enter a Laravel Nova\'s admin name', 'Nova Admin') - ->expectsQuestion('Please enter a Laravel Nova\'s admin role id', 1) + ->expectsQuestion('Please enter Laravel Nova\'s admin email', 'nova_mail@mail.com') + ->expectsQuestion('Please enter Laravel Nova\'s admin password', '654321') + ->expectsQuestion('Please enter Laravel Nova\'s admin name', 'Nova Admin') + ->expectsQuestion('Please enter Laravel Nova\'s admin role id', 1) ->expectsOutput('README generated successfully!') ->expectsConfirmation('Would you use Renovate dependabot?', 'yes') ->expectsQuestion('Please type username of the project reviewer', 'reviewer') @@ -710,11 +710,11 @@ public function testRunWithoutAdminAndUsingTelescope() FILE_APPEND, ], [ - 'database/migrations/2018_11_11_111111_add_telescope_admin.php', + 'database/migrations/2018_11_11_111111_add_telescope_user.php', $this->getFixture('telescope_admins_table_migration.php'), ], [ - 'database/migrations/2018_11_11_111111_add_nova_admin.php', + 'database/migrations/2018_11_11_111111_add_nova_user.php', $this->getFixture('nova_admins_table_migration.php'), ], [ @@ -783,14 +783,14 @@ public function testRunWithoutAdminAndUsingTelescope() ->expectsConfirmation('Do you need a `Getting Started` part?') ->expectsConfirmation('Do you need an `Environments` part?', 'yes') ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin email', 'telescope_mail@mail.com') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin password', '654321') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin name', 'Telescope Admin') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin role id', 1) - ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'nova_mail@mail.com') - ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '654321') - ->expectsQuestion('Please enter a Laravel Nova\'s admin name', 'Nova Admin') - ->expectsQuestion('Please enter a Laravel Nova\'s admin role id', 1) + ->expectsQuestion('Please enter Laravel Telescope\'s admin email', 'telescope_mail@mail.com') + ->expectsQuestion('Please enter Laravel Telescope\'s admin password', '654321') + ->expectsQuestion('Please enter Laravel Telescope\'s admin name', 'Telescope Admin') + ->expectsQuestion('Please enter Laravel Telescope\'s admin role id', 1) + ->expectsQuestion('Please enter Laravel Nova\'s admin email', 'nova_mail@mail.com') + ->expectsQuestion('Please enter Laravel Nova\'s admin password', '654321') + ->expectsQuestion('Please enter Laravel Nova\'s admin name', 'Nova Admin') + ->expectsQuestion('Please enter Laravel Nova\'s admin role id', 1) ->expectsOutput('README generated successfully!') ->expectsOutput('Don`t forget to fill the following empty values:') ->expectsOutput('- Issue Tracker link') @@ -1063,7 +1063,7 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void $this->getFixture('env.example_clerk_credentials_added.yml'), ], [ - 'database/migrations/2018_11_11_111111_add_telescope_admin.php', + 'database/migrations/2018_11_11_111111_admins_create_table.php', $this->getFixture('telescope_clerk_admin_migration.php'), ], [ @@ -1138,10 +1138,10 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void ->expectsConfirmation('Do you need a `Getting Started` part?') ->expectsConfirmation('Do you need an `Environments` part?') ->expectsConfirmation('Do you need a `Credentials and Access` part?', 'yes') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin email', 'telescope_mail@mail.com') - ->expectsQuestion('Please enter a Laravel Telescope\'s admin password', '654321') - ->expectsQuestion('Please enter a Laravel Nova\'s admin email', 'mail@mail.com') - ->expectsQuestion('Please enter a Laravel Nova\'s admin password', '123456') + ->expectsQuestion('Please enter Laravel Telescope\'s admin email', 'telescope_mail@mail.com') + ->expectsQuestion('Please enter Laravel Telescope\'s admin password', '654321') + ->expectsQuestion('Please enter Laravel Nova\'s admin email', 'mail@mail.com') + ->expectsQuestion('Please enter Laravel Nova\'s admin password', '123456') ->expectsOutput('README generated successfully!') ->expectsOutput('Don`t forget to fill the following empty values:') ->expectsConfirmation('Would you use Renovate dependabot?') diff --git a/tests/fixtures/InitCommandTest/migration.php b/tests/fixtures/InitCommandTest/migration.php index 01b3150..317265a 100644 --- a/tests/fixtures/InitCommandTest/migration.php +++ b/tests/fixtures/InitCommandTest/migration.php @@ -10,7 +10,7 @@ class AddDefaultUser extends Migration { use MigrationTrait; - public function up() + public function up(): void { if (!App::environment('testing')) { DB::table('users')->insert([ @@ -22,7 +22,7 @@ public function up() } } - public function down() + public function down(): void { if (!App::environment('testing')) { DB::table('users') diff --git a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php index 67725ea..b334e4e 100644 --- a/tests/fixtures/InitCommandTest/nova_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/nova_admins_table_migration.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Hash; use RonasIT\Support\Traits\MigrationTrait; -class AddNovaAdmin extends Migration +class AddNovaUser extends Migration { use MigrationTrait; diff --git a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php index af51ad7..fb486a9 100644 --- a/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php +++ b/tests/fixtures/InitCommandTest/telescope_admins_table_migration.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Hash; use RonasIT\Support\Traits\MigrationTrait; -class AddTelescopeAdmin extends Migration +class AddTelescopeUser extends Migration { use MigrationTrait; diff --git a/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php b/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php index 39c0965..938487f 100644 --- a/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php +++ b/tests/fixtures/InitCommandTest/telescope_clerk_admin_migration.php @@ -1,18 +1,18 @@ increments('id'); @@ -28,14 +28,8 @@ public function up(): void } } - public function down(): void + public function down() { Schema::dropIfExists('admins'); - - if (!App::environment('testing')) { - DB::table('admins') - ->where('email', 'telescope_mail@mail.com') - ->delete(); - } } } From 73cc686fb5a7e52c36708286c6067425f8ce1bfb Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Fri, 26 Sep 2025 16:26:40 +0900 Subject: [PATCH 6/6] test: fix tests refs: https://github.com/RonasIT/laravel-project-initializator/issues/55 --- tests/InitCommandTest.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index b7a4da8..37d0579 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -1124,6 +1124,10 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void 'arguments' => [base_path('/vendor/ronasit/laravel-project-initializator/resources/md/readme/CLERK.md')], 'result' => $this->getTemplate('CLERK.md'), ], + [ + 'arguments' => [base_path('composer.json')], + 'result' => $this->getFixture('composer_with_pint_settings.json'), + ], ); $this->mockFilePutContent( @@ -1162,6 +1166,10 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void 'README.md', $this->getFixture('partial_readme_clerk_with_credentials.md'), ], + [ + base_path('composer.json'), + $this->getFixture('composer_with_pint_settings.json'), + ], ); $this->mockShellExec( @@ -1169,6 +1177,9 @@ public function testRunWithClerkAdditionalAdminsWithoutDefaultAdmin(): void ['arguments' => 'composer require ronasit/laravel-swagger --ansi'], ['arguments' => 'php artisan vendor:publish --provider="RonasIT\AutoDoc\AutoDocServiceProvider" --ansi'], ['arguments' => 'composer require --dev ronasit/laravel-entity-generator --ansi'], + ['arguments' => 'composer require --dev laravel/pint --ansi'], + ['arguments' => 'php artisan vendor:publish --tag=pint-config --ansi'], + ['arguments' => 'composer require --dev brainmaestro/composer-git-hooks --ansi'], ['arguments' => 'composer require ronasit/laravel-clerk --ansi'], ['arguments' => 'php artisan laravel-clerk:install --ansi'], ['arguments' => 'composer require ronasit/laravel-telescope-extension --ansi'],