polarpress-pagebuilder/tests/Feature/MakeImageDBCommandTest.php

93 lines
3.2 KiB
PHP

<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\File;
use Tests\TestCase;
use App\Models\User;
use App\Models\ImageNode;
class MakeImageDBCommandTest extends TestCase
{
use RefreshDatabase;
protected string $imageDbPath;
protected function setUp(): void {
parent::setUp();
// Set up fake imagedb directory
$this->imageDbPath = public_path('test-imagedb');
File::deleteDirectory($this->imageDbPath);
File::makeDirectory($this->imageDbPath . '/subfolder', 0755, true);
// Create a sample image file
File::put($this->imageDbPath . '/subfolder/example.jpg', 'fake image content');
}
protected function tearDown(): void {
File::deleteDirectory($this->imageDbPath);
parent::tearDown();
}
/** @test */
public function it_indexes_folders_and_images_in_the_imagedb_directory() {
$user = User::factory()->create([
'name' => 'Test User',
'email' => 'test@example.com',
]);
$this->artisan('pagebuilder:make-imagedb', ['--testmode' => true])
->expectsQuestion('Select a user to act as:', "{$user->name} ({$user->email})")
->expectsOutput('Clearing existing image nodes...')
->expectsOutput('Scanning and indexing image directory...')
->expectsOutput('Image DB creation complete.')
->assertExitCode(0);
$this->assertDatabaseCount('image_nodes', 2); // 1 folder + 1 image
$folder = ImageNode::where('fs_type', 'folder')->first();
$image = ImageNode::where('fs_type', 'file')->first();
$this->assertNotNull($folder);
$this->assertEquals('subfolder', $folder->name);
$this->assertNotNull($image);
$this->assertEquals('example.jpg', $image->name);
$this->assertEquals($folder->id, $image->parent_id);
}
/** @test */
public function it_errors_when_imagedb_directory_does_not_exist() {
// Ensure directory does not exist
File::deleteDirectory($this->imageDbPath);
$this->artisan('pagebuilder:make-imagedb', ['--testmode' => true])
->expectsOutput("The 'public/test-imagedb' directory does not exist.")
->assertExitCode(1);
}
/** @test */
public function it_errors_when_imagedb_directory_is_empty() {
// Delete existing dir
File::deleteDirectory($this->imageDbPath);
// Create an empty directory
File::makeDirectory($this->imageDbPath, 0755, true);
$this->artisan('pagebuilder:make-imagedb', ['--testmode' => true])
->expectsOutput("The 'public/test-imagedb' directory is empty. Nothing to index.")
->assertExitCode(1);
}
/** @test */
public function it_errors_when_no_users_exist() {
$this->artisan('pagebuilder:make-imagedb', ['--testmode' => true])
->expectsOutput("No users found in the database. Cannot continue!")
->expectsOutput('(Use artisan serve and npm run dev to spool up a local instance, and register a user from the web interface)')
->assertExitCode(1);
}
}