flash() il messaggio non si vedeva subito e * compariva alla pagina successiva, fuori contesto. */ class AvvisiTest extends TestCase { use RefreshDatabase; private function admin(): User { $this->seed(RolesAndPermissionsSeeder::class); $utente = User::create(['name' => 'Admin', 'email' => 'admin@example.test', 'password' => 'password-di-prova']); $utente->assignRole('amministratore'); return $utente; } public function test_un_eliminazione_rifiutata_avvisa_subito_e_non_lascia_flash(): void { $zona = Zona::create(['nome' => 'Nord', 'attivo' => true]); Territorio::create(['numero' => '1', 'attivo' => true, 'zona_id' => $zona->id]); Livewire::actingAs($this->admin()) ->test(ZoneIndex::class) ->call('deleteZona', $zona->id) ->assertDispatched('avviso', tipo: 'errore', testo: "Impossibile eliminare: la zona 'Nord' ha territori associati."); $this->assertFalse(session()->has('error')); $this->assertNotNull($zona->fresh()); } public function test_un_azione_riuscita_avvisa_con_un_conferma(): void { $zona = Zona::create(['nome' => 'Sud', 'attivo' => true]); Livewire::actingAs($this->admin()) ->test(ZoneIndex::class) ->call('deleteZona', $zona->id) ->assertDispatched('avviso', tipo: 'ok'); $this->assertFalse(session()->has('success')); } public function test_nessun_componente_lascia_flash_senza_cambiare_pagina(): void { // Un flash senza redirect subito dopo non si vede fino alla pagina // successiva: in quei casi si usa il trait Avvisa. foreach (glob(app_path('Livewire') . '/{,*/}*.php', GLOB_BRACE) as $file) { $righe = file($file); foreach ($righe as $i => $riga) { if (! preg_match('/^\s*session\(\)->flash\(/', $riga)) { continue; } $seguito = implode('', array_slice($righe, $i + 1, 5)); $this->assertStringContainsString('redirect', $seguito, basename($file) . ':' . ($i + 1) . ' usa un flash senza redirect'); } } } }