فهرست منبع

Update passport:install invocation to prevent unwanted confirmations

Bubka 1 سال پیش
والد
کامیت
b8b4d22efb

+ 1 - 1
app.json

@@ -15,7 +15,7 @@
     "repository": "https://github.com/Bubka/2FAuth",
     "success_url": "/register",
     "scripts": {
-      "postdeploy": "php artisan passport:install;php artisan storage:link"
+      "postdeploy": "php artisan passport:install --no-interaction;php artisan storage:link"
     },
     "env": {
         "APP_KEY": {

+ 1 - 1
app/Console/Commands/Install.php

@@ -142,7 +142,7 @@ class Install extends Command
     protected function installPassport() : void
     {
         $this->components->task('Setting up Passport', function () : void {
-            $this->callSilently('passport:install');
+            $this->callSilently('passport:install', ['--no-interaction' => true]);
         });
     }
 

+ 1 - 0
app/Console/Commands/Utils/ResetTrait.php

@@ -82,6 +82,7 @@ trait ResetTrait
     {
         $this->callSilent('db:seed', [
             '--class' => $seeder,
+            '--no-interaction' => 1
         ]);
 
         $this->line('Database seeded');

+ 1 - 1
docker/entrypoint.sh

@@ -55,7 +55,7 @@ if [ -f /2fauth/installed ]; then
   fi
 else
   php artisan migrate:refresh --force
-  php artisan passport:install
+  php artisan passport:install --no-interaction
 fi
 
 echo "${COMMIT}" > /2fauth/installed

+ 6 - 0
tests/Api/v1/Controllers/UserManagerControllerTest.php

@@ -13,6 +13,7 @@ use Illuminate\Auth\Notifications\ResetPassword;
 use Illuminate\Http\Request;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Notification;
@@ -325,6 +326,11 @@ class UserManagerControllerTest extends FeatureTestCase
      */
     public function test_revokePATs_flushes_pats()
     {
+        Artisan::call('passport:install', [
+            '--verbose' => 2,
+            '--no-interaction' => 1
+        ]);
+        
         $tokenRepository = app(TokenRepository::class);
 
         $this->actingAs($this->user, 'api-guard')

+ 25 - 5
tests/Feature/Console/InstallTest.php

@@ -3,6 +3,7 @@
 namespace Tests\Feature\Console;
 
 use App\Console\Commands\Install;
+use Illuminate\Support\Facades\Artisan;
 use Jackiedo\DotenvEditor\DotenvEditor;
 use PHPUnit\Framework\Attributes\CoversClass;
 use Tests\FeatureTestCase;
@@ -16,10 +17,21 @@ class InstallTest extends FeatureTestCase
     /**
      * @test
      */
+    const PASSPORT_PENDING_MIGRATIONS_CONFIRMATION = 'Would you like to run all pending database migrations?';
+
+    const PASSPORT_CREATE_CLIENTS_CONFIRMATION = 'Would you like to create the "personal access" and "password grant" clients?';
+
+    const TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION = 'Existing .env file found. Do you wish to review its vars?';
+    
     public function test_install_completes()
     {
         $this->artisan('2fauth:install')
-            ->expectsConfirmation('Existing .env file found. Do you wish to review its vars?', 'no')
+            ->expectsConfirmation(self::TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION, 'no')
+            // 2 following confirmations have been introduced with Passport v12 and its auto-publishing
+            // migrations feature. Even if the '2fauth:install' command runs 'passport:install'
+            // silently, the 2 confirmations are triggered and needs to be handled in tests.
+            ->expectsConfirmation(self::PASSPORT_PENDING_MIGRATIONS_CONFIRMATION, 'yes')
+            ->expectsConfirmation(self::PASSPORT_CREATE_CLIENTS_CONFIRMATION, 'yes')
             ->assertSuccessful();
     }
 
@@ -30,7 +42,9 @@ class InstallTest extends FeatureTestCase
     {
         $this->artisan('2fauth:install', ['--no-interaction' => true])
             ->expectsOutput('(Running in no-interaction mode)')
-            ->expectsConfirmation('Existing .env file found. Do you wish to review its vars?', 'no')
+            ->expectsConfirmation(self::TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION, 'no')
+            ->expectsConfirmation(self::PASSPORT_PENDING_MIGRATIONS_CONFIRMATION, 'yes')
+            ->expectsConfirmation(self::PASSPORT_CREATE_CLIENTS_CONFIRMATION, 'yes')
             ->assertSuccessful();
     }
 
@@ -44,7 +58,9 @@ class InstallTest extends FeatureTestCase
         $this->assertEquals('', config('app.key'));
 
         $this->artisan('2fauth:install')
-            ->expectsConfirmation('Existing .env file found. Do you wish to review its vars?', 'no')
+            ->expectsConfirmation(self::TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION, 'no')
+            ->expectsConfirmation(self::PASSPORT_PENDING_MIGRATIONS_CONFIRMATION, 'yes')
+            ->expectsConfirmation(self::PASSPORT_CREATE_CLIENTS_CONFIRMATION, 'yes')
             ->assertSuccessful();
 
         $this->assertNotEquals('', config('app.key'));
@@ -56,7 +72,9 @@ class InstallTest extends FeatureTestCase
     public function test_install_gives_2fauth_address()
     {
         $this->artisan('2fauth:install')
-            ->expectsConfirmation('Existing .env file found. Do you wish to review its vars?', 'no')
+            ->expectsConfirmation(self::TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION, 'no')
+            ->expectsConfirmation(self::PASSPORT_PENDING_MIGRATIONS_CONFIRMATION, 'yes')
+            ->expectsConfirmation(self::PASSPORT_CREATE_CLIENTS_CONFIRMATION, 'yes')
             ->expectsOutputToContain(config('app.url'))
             ->assertSuccessful();
     }
@@ -67,7 +85,9 @@ class InstallTest extends FeatureTestCase
     public function test_install_informs_about_sponsoring()
     {
         $this->artisan('2fauth:install')
-            ->expectsConfirmation('Existing .env file found. Do you wish to review its vars?', 'no')
+            ->expectsConfirmation(self::TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION, 'no')
+            ->expectsConfirmation(self::PASSPORT_PENDING_MIGRATIONS_CONFIRMATION, 'yes')
+            ->expectsConfirmation(self::PASSPORT_CREATE_CLIENTS_CONFIRMATION, 'yes')
             ->expectsOutputToContain('https://ko-fi.com/bubka')
             ->expectsOutputToContain('https://github.com/sponsors/Bubka')
             ->assertSuccessful();

+ 6 - 0
tests/Feature/Console/ResetDemoTest.php

@@ -2,6 +2,7 @@
 
 namespace Tests\Feature\Console;
 
+use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\Config;
 use Tests\FeatureTestCase;
 
@@ -22,6 +23,11 @@ class ResetDemoTest extends FeatureTestCase
      */
     public function test_reset_demo_succeeded()
     {
+        Artisan::call('passport:install', [
+            '--verbose' => 2,
+            '--no-interaction' => 1
+        ]);
+        
         Config::set('2fauth.config.isDemoApp', true);
 
         $this->artisan('2fauth:reset-demo')

+ 6 - 0
tests/Feature/Models/UserModelTest.php

@@ -7,6 +7,7 @@ use App\Models\Group;
 use App\Models\TwoFAccount;
 use App\Models\User;
 use Illuminate\Auth\Events\PasswordReset;
+use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Event;
 use Illuminate\Support\Facades\Password;
@@ -116,6 +117,11 @@ class UserModelTest extends FeatureTestCase
      */
     public function test_delete_removes_user_data()
     {
+        Artisan::call('passport:install', [
+            '--verbose' => 2,
+            '--no-interaction' => 1
+        ]);
+        
         $user = User::factory()->create();
         TwoFAccount::factory()->for($user)->create();
         AuthLog::factory()->for($user, 'authenticatable')->create();

+ 1 - 1
tests/FeatureTestCase.php

@@ -22,6 +22,6 @@ abstract class FeatureTestCase extends BaseTestCase
      */
     protected function afterRefreshingDatabase()
     {
-        Artisan::call('passport:install', ['--verbose' => 2]);
+        // 
     }
 }