3 visitas

Testeando Filament: Configurando FileUpload en Laravel Livewire

Básicamente, estamos configurando el componente FileUpload de Livewire para que mantenga los nombres originales de los archivos cuando los subes. Sin esta configuración, es posible que los nombres se cambien a algo más genérico o aleatorio, lo cual no siempre es lo ideal.

FileUpload::configureUsing(function (FileUpload $component) {
    $component->preserveFilenames();
});

¿Cómo funciona?

  1. FileUpload::configureUsing(...):
    Este método te permite ajustar cómo funciona el componente FileUpload. En este caso, le estamos pasando una función (lo que llamamos un "closure" en PHP) para decirle exactamente qué queremos que haga.
  2. $component->preserveFilenames();:
    Aquí es donde le decimos a Livewire: "Oye, quiero que mantengas los nombres de los archivos tal como están". Esto es súper útil si necesitas que los archivos subidos mantengan su nombre original, tal vez para que los usuarios puedan reconocerlos fácilmente más tarde.

¿Por qué es útil?

En el contexto de pruebas, esta configuración es clave si quieres asegurarte de que el sistema maneje los archivos tal como lo haría en producción. Por ejemplo, si tus pruebas dependen de rutas de archivos específicas o si necesitas verificar que los nombres no cambien en el proceso, esta configuración te ayudará a que todo se mantenga en orden.

Un ejemplo en Filament

it('can create', function () {
    $user = User::factory()->create()->assignRole('super_admin');
    $this->actingAs($user);

    FileUpload::configureUsing(function (FileUpload $component) {
        $component->preserveFilenames();
    });

    $file = UploadedFile::fake()->image('test.png');

    $newData = Post::factory()->make();

    livewire(CreatePost::class)
        ->fillForm([
            'title' => $newData->title,
            'body' => $newData->body,
            'category_id' => $newData->category_id,
            'subtitle' => $newData->subtitle,
            'published_at' => $newData->published_at->format('Y-m-d H:i:s'),
            'image' => $file,
        ])
        ->call('create')
        ->assertHasNoFormErrors();

    $this->assertDatabaseHas(Post::class, [
        'title' => $newData->title,
        'body' => $newData->body,
        'category_id' => $newData->category_id,
        'subtitle' => $newData->subtitle,
        'published_at' => $newData->published_at->format('Y-m-d H:i:s'),
        'image' => 'test.png',
        'user_id' => auth()->user()->id,
        'slug' => Str::slug($newData->title),
    ]);
});

Resumiendo

Este código es un pequeño truco para mantener las cosas organizadas cuando trabajas con archivos en Laravel Livewire. Te asegura que los nombres de los archivos no se cambien, lo cual puede ser crucial dependiendo de lo que estés haciendo en tu proyecto. ¡Y todo con unas pocas líneas de código!

Testeando Filament: Configurando FileUpload en Laravel Livewire
03 September 2024

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer