netgescon-day0/tests/Feature/AssembleaMobileTest.php

277 lines
8.7 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Assemblea;
use App\Models\Convocazione;
use App\Models\OrdineGiorno;
use App\Models\Stabile;
use App\Models\Soggetto;
use App\Models\UnitaImmobiliare;
use App\Models\Amministratore;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Cache;
use Tests\TestCase;
class AssembleaMobileTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
config(['netgescon.database.use_observers' => true]);
}
public function test_public_assemblea_mobile_view()
{
$user = User::create([
'name' => 'Admin User',
'email' => 'admin.user@example.com',
'password' => bcrypt('password'),
]);
$amministratore = Amministratore::create([
'user_id' => $user->id,
'nome' => 'Admin',
'cognome' => 'Test',
'denominazione' => 'Amministrazione Test',
'codice_fiscale' => '12345678901',
]);
$stabile = Stabile::create([
'amministratore_id' => $amministratore->id,
'denominazione' => 'Condominio Test',
'codice_fiscale' => '12345678901',
'indirizzo' => 'Via Test 1',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'codice_stabile' => 'STAB-001',
]);
$unita = UnitaImmobiliare::create([
'stabile_id' => $stabile->id,
'interno' => '1A',
'codice_unita' => 'UI-TEST-001',
'millesimi_generali' => 50.000,
]);
$soggetto = Soggetto::create([
'nome' => 'Mario',
'cognome' => 'Rossi',
'codice_fiscale' => 'RSSMRA80A01H501U',
'email' => 'mario.rossi@example.com',
'telefono' => '+393331234567',
'tipo' => 'persona_fisica',
]);
$assemblea = Assemblea::create([
'stabile_id' => $stabile->id,
'tipo' => 'ordinaria',
'stato' => 'convocata',
'data_prima_convocazione' => now()->addDays(5),
'data_seconda_convocazione' => now()->addDays(6),
]);
$convocazione = Convocazione::create([
'assemblea_id' => $assemblea->id,
'unita_immobiliare_id' => $unita->id,
'soggetto_id' => $soggetto->id,
'ruolo' => 'C',
'consegnato_canale' => 'email',
'token_accesso' => 'test-token-12345',
]);
$response = $this->get(route('public.assemblea.show', ['token' => $convocazione->token_accesso]));
$response->assertStatus(200);
$response->assertSee($soggetto->nome_completo);
$response->assertSee($stabile->denominazione);
}
public function test_public_assemblea_conferma_ricezione()
{
$user = User::create([
'name' => 'Admin User 2',
'email' => 'admin.user2@example.com',
'password' => bcrypt('password'),
]);
$amministratore = Amministratore::create([
'user_id' => $user->id,
'nome' => 'Admin',
'cognome' => 'Test',
'denominazione' => 'Amministrazione Test',
'codice_fiscale' => '12345678901',
]);
$stabile = Stabile::create([
'amministratore_id' => $amministratore->id,
'denominazione' => 'Condominio Test',
'codice_fiscale' => '12345678901',
'indirizzo' => 'Via Test 1',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'codice_stabile' => 'STAB-002',
]);
$unita = UnitaImmobiliare::create([
'stabile_id' => $stabile->id,
'interno' => '1A',
'codice_unita' => 'UI-TEST-001',
]);
$soggetto = Soggetto::create([
'nome' => 'Mario',
'cognome' => 'Rossi',
'codice_fiscale' => 'RSSMRA80A01H501U',
'tipo' => 'persona_fisica',
]);
$assemblea = Assemblea::create([
'stabile_id' => $stabile->id,
'tipo' => 'ordinaria',
'stato' => 'convocata',
]);
$convocazione = Convocazione::create([
'assemblea_id' => $assemblea->id,
'unita_immobiliare_id' => $unita->id,
'soggetto_id' => $soggetto->id,
'token_accesso' => 'test-token-receipt',
]);
$response = $this->post(route('public.assemblea.ricezione', ['token' => $convocazione->token_accesso]));
$response->assertJson(['success' => true]);
$this->assertNotNull($convocazione->fresh()->ricezione_confermata_at);
}
public function test_public_assemblea_voto_live()
{
$user = User::create([
'name' => 'Admin User 3',
'email' => 'admin.user3@example.com',
'password' => bcrypt('password'),
]);
$amministratore = Amministratore::create([
'user_id' => $user->id,
'nome' => 'Admin',
'cognome' => 'Test',
'denominazione' => 'Amministrazione Test',
'codice_fiscale' => '12345678901',
]);
$stabile = Stabile::create([
'amministratore_id' => $amministratore->id,
'denominazione' => 'Condominio Test',
'codice_fiscale' => '12345678901',
'indirizzo' => 'Via Test 1',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'codice_stabile' => 'STAB-003',
]);
$unita = UnitaImmobiliare::create([
'stabile_id' => $stabile->id,
'interno' => '1A',
'codice_unita' => 'UI-TEST-001',
'millesimi_generali' => 45.500,
]);
$soggetto = Soggetto::create([
'nome' => 'Mario',
'cognome' => 'Rossi',
'codice_fiscale' => 'RSSMRA80A01H501U',
'tipo' => 'persona_fisica',
]);
$assemblea = Assemblea::create([
'stabile_id' => $stabile->id,
'tipo' => 'ordinaria',
'stato' => 'convocata',
]);
$odg = OrdineGiorno::create([
'assemblea_id' => $assemblea->id,
'numero_punto' => 1,
'titolo' => 'Punto test',
'descrizione' => 'Descrizione test',
]);
$convocazione = Convocazione::create([
'assemblea_id' => $assemblea->id,
'unita_immobiliare_id' => $unita->id,
'soggetto_id' => $soggetto->id,
'token_accesso' => 'test-token-vote',
]);
Cache::put("assemblea.{$assemblea->id}.attivo_odg_id", $odg->id);
$response = $this->post(route('public.assemblea.vota', ['token' => $convocazione->token_accesso]), [
'ordine_giorno_id' => $odg->id,
'voto' => 'favorevole',
]);
$response->assertJson(['success' => true]);
$this->assertDatabaseHas('assemblee_voti', [
'assemblea_id' => $assemblea->id,
'ordine_giorno_id' => $odg->id,
'soggetto_id' => $soggetto->id,
'unita_immobiliare_id' => $unita->id,
'voto' => 'favorevole',
'millesimi_voto' => 45.500,
]);
}
public function test_admin_gestione_assemblea_page_rendering()
{
$user = User::create([
'name' => 'Admin User X',
'email' => 'admin.x@test.com',
'password' => bcrypt('password'),
]);
\Spatie\Permission\Models\Role::create(['name' => 'amministratore']);
$user->assignRole('amministratore');
$amministratore = Amministratore::create([
'user_id' => $user->id,
'nome' => 'Admin',
'cognome' => 'Test',
'denominazione' => 'Amministrazione Test',
'codice_fiscale' => '12345678901',
]);
$stabile = Stabile::create([
'amministratore_id' => $amministratore->id,
'denominazione' => 'Condominio Test',
'codice_fiscale' => '12345678901',
'indirizzo' => 'Via Test 1',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'codice_stabile' => 'STAB-001',
]);
$assemblea = Assemblea::create([
'stabile_id' => $stabile->id,
'tipo' => 'ordinaria',
'stato' => 'convocata',
'data_prima_convocazione' => now()->addDays(5),
'data_seconda_convocazione' => now()->addDays(6),
]);
$url = \App\Filament\Pages\Condomini\GestioneAssemblea::getUrl(['record' => $assemblea->id], panel: 'admin-filament');
$response = $this->actingAs($user)->get($url);
$response->assertStatus(200);
}
}