From dfaf6f7c13e5cee904a43f9e8ad3777ca512fac0 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Thu, 14 Sep 2023 14:17:20 +0100 Subject: [PATCH] Cleanup Command: Allowed running non-interactively For #4541 --- app/Console/Commands/CleanupImagesCommand.php | 9 +++++---- tests/Commands/CleanupImagesCommandTest.php | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/Console/Commands/CleanupImagesCommand.php b/app/Console/Commands/CleanupImagesCommand.php index fe924b0f4..18e60ff17 100644 --- a/app/Console/Commands/CleanupImagesCommand.php +++ b/app/Console/Commands/CleanupImagesCommand.php @@ -35,7 +35,7 @@ class CleanupImagesCommand extends Command if (!$dryRun) { $this->warn("This operation is destructive and is not guaranteed to be fully accurate.\nEnsure you have a backup of your images.\n"); - $proceed = $this->confirm("Are you sure you want to proceed?"); + $proceed = !$this->input->isInteractive() || $this->confirm("Are you sure you want to proceed?"); if (!$proceed) { return 0; } @@ -46,7 +46,7 @@ class CleanupImagesCommand extends Command if ($dryRun) { $this->comment('Dry run, no images have been deleted'); - $this->comment($deleteCount . ' images found that would have been deleted'); + $this->comment($deleteCount . ' image(s) found that would have been deleted'); $this->showDeletedImages($deleted); $this->comment('Run with -f or --force to perform deletions'); @@ -54,7 +54,8 @@ class CleanupImagesCommand extends Command } $this->showDeletedImages($deleted); - $this->comment($deleteCount . ' images deleted'); + $this->comment("{$deleteCount} image(s) deleted"); + return 0; } @@ -65,7 +66,7 @@ class CleanupImagesCommand extends Command } if (count($paths) > 0) { - $this->line('Images to delete:'); + $this->line('Image(s) to delete:'); } foreach ($paths as $path) { diff --git a/tests/Commands/CleanupImagesCommandTest.php b/tests/Commands/CleanupImagesCommandTest.php index a1a5ab985..36fd51e96 100644 --- a/tests/Commands/CleanupImagesCommandTest.php +++ b/tests/Commands/CleanupImagesCommandTest.php @@ -14,7 +14,7 @@ class CleanupImagesCommandTest extends TestCase $this->artisan('bookstack:cleanup-images -v') ->expectsOutput('Dry run, no images have been deleted') - ->expectsOutput('1 images found that would have been deleted') + ->expectsOutput('1 image(s) found that would have been deleted') ->expectsOutputToContain($image->path) ->assertExitCode(0); @@ -29,7 +29,7 @@ class CleanupImagesCommandTest extends TestCase $this->artisan('bookstack:cleanup-images --force') ->expectsOutputToContain('This operation is destructive and is not guaranteed to be fully accurate') ->expectsConfirmation('Are you sure you want to proceed?', 'yes') - ->expectsOutput('1 images deleted') + ->expectsOutput('1 image(s) deleted') ->assertExitCode(0); $this->assertDatabaseMissing('images', ['id' => $image->id]); @@ -46,4 +46,17 @@ class CleanupImagesCommandTest extends TestCase $this->assertDatabaseHas('images', ['id' => $image->id]); } + + public function test_command_force_no_interaction_run() + { + $page = $this->entities->page(); + $image = Image::factory()->create(['uploaded_to' => $page->id]); + + $this->artisan('bookstack:cleanup-images --force --no-interaction') + ->expectsOutputToContain('This operation is destructive and is not guaranteed to be fully accurate') + ->expectsOutput('1 image(s) deleted') + ->assertExitCode(0); + + $this->assertDatabaseMissing('images', ['id' => $image->id]); + } }