netgescon-day0/tests/Feature/ElectronicReadingsTest.php

67 lines
2.3 KiB
PHP

<?php
use App\Models\Stabile;
use App\Models\StabileServizio;
use App\Models\StabileServizioLettura;
use App\Models\UnitaImmobiliare;
use App\Models\User;
use App\Filament\Pages\Condomini\ServiziStabileArchivio;
use Illuminate\Http\UploadedFile;
use Livewire\Livewire;
test('it imports electronic readings from CSV and maps correctly', function () {
$user = User::factory()->create();
$user->assignRole('super-admin');
$this->actingAs($user);
$stabile = Stabile::factory()->create();
$servizio = StabileServizio::query()->create([
'stabile_id' => $stabile->id,
'tipo' => 'acqua',
'attivo' => true,
'nome' => 'Acqua Potabile'
]);
$unit1 = UnitaImmobiliare::factory()->create([
'stabile_id' => $stabile->id,
'interno' => '6',
'acqua_gateway_device_id' => null
]);
$unit2 = UnitaImmobiliare::factory()->create([
'stabile_id' => $stabile->id,
'interno' => '7',
'acqua_gateway_device_id' => '22919618'
]);
\App\Support\StabileContext::setActiveStabileId($user, $stabile->id);
\App\Support\AnnoGestioneContext::setActiveAnno(2024);
$csvContent = "#ID,Modulo n°,Contatore n°,Nome,Cognome,Indirizzo,Interno,Lettura,Auto-lettura,Tensione,Date e tipo Frode,Flusso inverso (m3),Data allarme perdita,Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre\n" .
"22919617,,,,,,6,\"411,560 m3\",0,,,\"0,000 m3\",,,,,\n" .
"22919618,,,,,,7,\"662,184 m3\",0,,,\"0,000 m3\",,,,,";
$file = UploadedFile::fake()->createWithContent('readings.csv', $csvContent);
Livewire::test(ServiziStabileArchivio::class)
->set('electronicReadingsFile', $file)
->call('importElectronicReadings')
->assertHasNoErrors();
$unit1->refresh();
expect($unit1->acqua_gateway_device_id)->toBe('22919617');
$readings = StabileServizioLettura::query()
->where('stabile_id', $stabile->id)
->get();
expect($readings)->toHaveCount(2);
$r1 = $readings->firstWhere('unita_immobiliare_id', $unit1->id);
expect((float)$r1->lettura_fine)->toEqual(411.560);
expect($r1->tipologia_lettura)->toBe('elettronica_remota');
$r2 = $readings->firstWhere('unita_immobiliare_id', $unit2->id);
expect((float)$r2->lettura_fine)->toEqual(662.184);
});