Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-10-19 16:25:15 +02:00
parent 2ed2c0389d
commit a8aa6d9927
50 changed files with 1164 additions and 8 deletions
@@ -0,0 +1,75 @@
<?php
namespace Tests\Feature;
use App\Filament\Resources\ModelloResource;
use App\Filament\Resources\ModelloResource\Pages\CreateModello;
use App\Filament\Resources\ModelloResource\Pages\EditModello;
use App\Filament\Resources\ModelloResource\Pages\ListModelli;
use App\Filament\Resources\SistemaResource\Pages\ListSistemi;
use App\Models\Modello;
use App\Models\Sistema;
use App\Models\User;
use Database\Seeders\CatalogoSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Storage;
use Livewire\Livewire;
use Tests\TestCase;
class CatalogoAdminTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
Storage::fake('public');
$this->seed(CatalogoSeeder::class);
$this->actingAs(User::factory()->create());
}
public function test_le_pagine_admin_del_catalogo_si_aprono(): void
{
$modello = Modello::where('codice', 'finestra_1_anta')->firstOrFail();
Livewire::test(ListSistemi::class)->assertOk()->assertSee('PVC');
Livewire::test(ListModelli::class)->assertOk()->assertCanSeeTableRecords([$modello]);
Livewire::test(CreateModello::class)->assertOk();
Livewire::test(EditModello::class, ['record' => $modello->getRouteKey()])
->assertOk()
->assertFormSet(['codice' => 'finestra_1_anta', 'descrizione' => 'FINESTRA 1 ANTA, A/R']);
}
public function test_dai_sistemi_si_aprono_i_modelli_filtrati_per_sistema(): void
{
$pvc = Sistema::where('codice', 'pvc')->firstOrFail();
$altro = Sistema::create(['codice' => 'legno', 'nome' => 'Legno']);
$modelloAltro = Modello::create(['sistema_id' => $altro->id, 'codice' => 'finestra_1_anta', 'nome' => 'Finestra legno', 'attivo' => false]);
Livewire::test(ListSistemi::class)
->assertTableActionHasUrl('modelli', ModelloResource::getUrl('index', [
'tableFilters' => ['sistema' => ['value' => $pvc->id]],
]), $pvc);
Livewire::withQueryParams(['tableFilters' => ['sistema' => ['value' => $pvc->id]]])
->test(ListModelli::class)
->assertCountTableRecords($pvc->modelli()->count())
->assertCanNotSeeTableRecords([$modelloAltro]);
}
public function test_un_modello_attivo_richiede_la_configurazione_3d(): void
{
$sistema = Modello::firstOrFail()->sistema_id;
Livewire::test(CreateModello::class)
->fillForm(['sistema_id' => $sistema, 'codice' => 'nuovo', 'nome' => 'Nuovo', 'attivo' => true])
->call('create')
->assertHasFormErrors(['cartella' => 'required', 'file_modello' => 'required', 'categoria' => 'required']);
Livewire::test(CreateModello::class)
->fillForm(['sistema_id' => $sistema, 'codice' => 'finestra_1_anta', 'nome' => 'Doppione', 'attivo' => false])
->call('create')
->assertHasFormErrors(['codice' => 'unique']);
}
}
@@ -0,0 +1,71 @@
<?php
namespace Tests\Feature;
use App\Models\Modello;
use App\Models\Sistema;
use Database\Seeders\CatalogoSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class CatalogoApiTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
Storage::fake('public');
}
public function test_il_seeder_carica_anagrafica_pvc_con_icone(): void
{
$this->seed(CatalogoSeeder::class);
$pvc = Sistema::where('codice', 'pvc')->firstOrFail();
$this->assertSame(30, $pvc->modelli()->count());
$finestra = $pvc->modelli()->where('codice', 'finestra_1_anta')->firstOrFail();
$this->assertSame('FINESTRA 1 ANTA, A/R', $finestra->descrizione);
Storage::disk('public')->assertExists($finestra->icona);
// Modelli presenti solo nell'Excel: senza asset 3D, quindi disattivi.
$this->assertFalse($pvc->modelli()->where('codice', 'scorrevole_sf_3_ante')->value('attivo'));
}
public function test_il_seeder_non_sovrascrive_le_modifiche_admin(): void
{
$this->seed(CatalogoSeeder::class);
Modello::where('codice', 'bilico')->update(['nome' => 'Bilico modificato']);
$this->seed(CatalogoSeeder::class);
$this->assertSame('Bilico modificato', Modello::where('codice', 'bilico')->value('nome'));
$this->assertSame(30, Modello::count());
}
public function test_api_sistemi_espone_solo_modelli_attivi_in_ordine(): void
{
$this->seed(CatalogoSeeder::class);
Sistema::create(['codice' => 'legno', 'nome' => 'Legno', 'attivo' => false]);
$response = $this->getJson('/api/sistemi')->assertOk();
$response->assertJsonCount(1);
$response->assertJsonPath('0.codice', 'pvc');
$modelli = collect($response->json('0.modelli'));
$this->assertSame(26, $modelli->count());
$this->assertSame('finestra_1_anta', $modelli->first()['id']);
$this->assertNotContains('scorrevole_sf_3_ante', $modelli->pluck('id'));
$this->assertStringEndsWith('/storage/modelli/icone/pvc/finestra_1_anta.jpg', $modelli->first()['icona']);
$this->assertSame('finestra_1_anta.glb', $modelli->first()['modello']);
}
public function test_api_sistema_inesistente_restituisce_404(): void
{
$this->getJson('/api/sistemi/inesistente')->assertNotFound();
}
}