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(); } }