Files
kreios/backoffice/tests/Feature/CatalogoApiTest.php
T
carmine.savino 1208187a17 feat: integrate Draco compression for 3D models in backoffice
- Added support for uploading and compressing GLB models using Draco in the backoffice.
- Implemented commands for importing and re-compressing 3D models.
- Updated model resource to handle 3D model uploads and validations.
- Introduced a new script for compressing GLB files with Draco.
- Modified Vite configuration to remove GLB files from the build output.
- Updated package dependencies to include GLTF-transform libraries for handling 3D models.
- Added tests to ensure proper functionality of 3D model handling and compression.
2026-11-01 10:35:50 +01:00

87 lines
3.3 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\ListinoPrezzo;
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(28, $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_hst_4_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(28, Modello::count());
}
public function test_api_sistemi_espone_solo_modelli_attivi_e_con_listino_in_ordine(): void
{
$this->seed(CatalogoSeeder::class);
// Senza listino il bilico non compare nel configuratore.
Modello::where('codice', '!=', 'bilico')->each(fn (Modello $m) => ListinoPrezzo::create(['modello_id' => $m->id, 'larghezza' => 1000, 'altezza' => 1000, 'prezzo' => 100]));
Sistema::create(['codice' => 'legno', 'nome' => 'Legno', 'attivo' => false]);
$this->conModelli3d();
// Senza modello 3D la finestra a 2 ante non compare nel configuratore.
Modello::where('codice', 'finestra_2_ante')->update(['modello_3d_draco' => null]);
$response = $this->getJson('/api/sistemi')->assertOk();
$response->assertJsonCount(1);
$response->assertJsonPath('0.codice', 'pvc');
$modelli = collect($response->json('0.modelli'));
$this->assertSame(24, $modelli->count());
$this->assertNotContains('bilico', $modelli->pluck('id'));
$this->assertNotContains('finestra_2_ante', $modelli->pluck('id'));
$this->assertSame('finestra_1_anta', $modelli->first()['id']);
$this->assertNotContains('scorrevole_hst_4_ante', $modelli->pluck('id'));
$this->assertStringEndsWith('/storage/modelli/icone/pvc/finestra_1_anta.jpg', $modelli->first()['icona']);
$this->assertStringEndsWith('/api/media/modelli-3d/draco/test.glb', $modelli->first()['modello_url']);
}
public function test_configurazione_di_un_modello_senza_listino_restituisce_404(): void
{
$this->seed(CatalogoSeeder::class);
$this->getJson('/api/sistemi/pvc/modelli/bilico/configurazione')->assertNotFound();
}
public function test_api_sistema_inesistente_restituisce_404(): void
{
$this->getJson('/api/sistemi/inesistente')->assertNotFound();
}
}