- 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.
105 lines
4.6 KiB
PHP
105 lines
4.6 KiB
PHP
<?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(['is_superadmin' => true]));
|
|
}
|
|
|
|
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_ordine_del_file_con_i_disattivi_in_fondo(): void
|
|
{
|
|
$codici = fn () => Modello::orderBy('ordine')->pluck('codice')->all();
|
|
|
|
// Ordine di OrdineSerramenti per gli attivi, poi i 2 disattivi nello stesso ordine.
|
|
$this->assertSame(['finestra_1_anta', 'finestra_2_ante', 'finestra_3_ante'], array_slice($codici(), 0, 3));
|
|
$this->assertSame(['scorrevole_hst_4_ante', 'traslante_scorrevole_1_anta_f'], array_slice($codici(), -2));
|
|
|
|
// Disattivando un modello passa nel gruppo in fondo (dopo i 25 attivi rimasti),
|
|
// mantenendo l'ordine relativo con gli altri disattivi; riattivandolo resta
|
|
// ultimo degli attivi, da riposizionare con "Riordina".
|
|
$bilico = Modello::where('codice', 'bilico')->firstOrFail();
|
|
Livewire::test(ListModelli::class)->call('updateTableColumnState', 'attivo', $bilico->getKey(), false);
|
|
$this->assertSame('celino', $codici()[24]);
|
|
$this->assertSame(['bilico', 'scorrevole_hst_4_ante'], array_slice($codici(), 25, 2));
|
|
|
|
$bilico->refresh()->update(['attivo' => true]);
|
|
$this->assertSame(['celino', 'bilico', 'scorrevole_hst_4_ante'], array_slice($codici(), 24, 3));
|
|
|
|
// In tabella i disattivi stanno in fondo anche se l'ordine salvato li metterebbe in mezzo.
|
|
Modello::where('codice', 'scorrevole_hst_4_ante')->update(['ordine' => 2]);
|
|
Livewire::test(ListModelli::class)
|
|
->set('tableRecordsPerPage', 50)
|
|
->assertCanSeeTableRecords(
|
|
Modello::orderByDesc('attivo')->orderBy('ordine')->get(),
|
|
inOrder: true
|
|
);
|
|
}
|
|
|
|
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', 'modello_3d_upload' => 'required', 'categoria' => 'required']);
|
|
|
|
Livewire::test(CreateModello::class)
|
|
->fillForm(['sistema_id' => $sistema, 'codice' => 'finestra_1_anta', 'nome' => 'Doppione', 'attivo' => false])
|
|
->call('create')
|
|
->assertHasFormErrors(['codice' => 'unique']);
|
|
}
|
|
}
|