netgescon-day0/tests/Feature/PhysicalArchiveXmlTest.php

86 lines
3.0 KiB
PHP

<?php
use App\Models\DocumentoArchivioFisicoItem;
use App\Models\Stabile;
use App\Models\User;
use App\Models\Amministratore;
use App\Filament\Pages\Strumenti\DocumentiArchivio;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
uses(RefreshDatabase::class);
test('it exports physical archive to xml and imports it back successfully', function () {
$user = User::factory()->create();
$user->assignRole('super-admin');
$this->actingAs($user);
$amministratore = Amministratore::create([
'user_id' => $user->id,
'nome' => 'Admin',
'cognome' => 'Test',
'denominazione' => 'Amministrazione Test',
'codice_fiscale' => '12345678901',
]);
$stabile = Stabile::create([
'amministratore_id' => $amministratore->id,
'codice_stabile' => '9999',
'denominazione' => 'Condominio Test XML',
'codice_fiscale' => '12345678901',
'indirizzo' => 'Via Test 1',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'codice_destinatario_sdi' => '0000000',
]);
// Simula resolveActiveStabile tramite mock o set nel contesto sessione
session(['netgescon.stabile_attivo_id' => $stabile->id]);
// Crea elementi di test (faldone -> cartellina -> documento)
$faldone = DocumentoArchivioFisicoItem::create([
'stabile_id' => $stabile->id,
'codice_univoco' => 'AF-' . $stabile->id . '-0001',
'tipo_item' => 'faldone_anelli',
'titolo' => 'Faldone Generale 2026',
'data_archiviazione' => now()->toDateString(),
'stato' => 'disponibile',
]);
$cartellina = DocumentoArchivioFisicoItem::create([
'stabile_id' => $stabile->id,
'parent_id' => $faldone->id,
'codice_univoco' => 'AF-' . $stabile->id . '-0002',
'tipo_item' => 'cartellina',
'titolo' => 'Cartellina Riscaldamento',
'data_archiviazione' => now()->toDateString(),
'stato' => 'disponibile',
]);
$page = new DocumentiArchivio();
$xml = $page->exportPhysicalArchiveToXml();
expect($xml)->toContain('netgescon_physical_archive')
->toContain('Faldone Generale 2026')
->toContain('Cartellina Riscaldamento');
// Cancella gli elementi per testare il re-import
DocumentoArchivioFisicoItem::query()->delete();
expect(DocumentoArchivioFisicoItem::count())->toBe(0);
// Re-importa
$importedCount = $page->importPhysicalArchiveFromXml($xml);
expect($importedCount)->toBe(2);
expect(DocumentoArchivioFisicoItem::count())->toBe(2);
$importedFaldone = DocumentoArchivioFisicoItem::where('tipo_item', 'faldone_anelli')->first();
$importedCartellina = DocumentoArchivioFisicoItem::where('tipo_item', 'cartellina')->first();
expect($importedFaldone->titolo)->toBe('Faldone Generale 2026');
expect($importedCartellina->titolo)->toBe('Cartellina Riscaldamento');
expect($importedCartellina->parent_id)->toBe($importedFaldone->id);
});