fix: allineamento percorsi dinamici e isolamento nei test unitari SisterCatasto
This commit is contained in:
parent
054379ca93
commit
e9a6e1fe8b
180
tests/Unit/SisterCatastoServiceTest.php
Normal file
180
tests/Unit/SisterCatastoServiceTest.php
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use Tests\TestCase;
|
||||
use App\Models\Amministratore;
|
||||
use App\Models\FeCassettoServiceConfig;
|
||||
use App\Models\Stabile;
|
||||
use App\Services\SisterCatastoService;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use ZipArchive;
|
||||
|
||||
class SisterCatastoServiceTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
Storage::fake('public');
|
||||
}
|
||||
|
||||
public function test_it_resolves_inherited_credentials_successfully()
|
||||
{
|
||||
// Pulisce eventuali config preesistenti
|
||||
FeCassettoServiceConfig::query()->truncate();
|
||||
|
||||
// Crea la configurazione globale
|
||||
FeCassettoServiceConfig::query()->create([
|
||||
'password_script' => 'fallback_script',
|
||||
'base_url' => 'https://thenetworksolution.it/FattureCorrispettivi/ScaricaFatture/CassettoFiscale.php',
|
||||
'username' => 'fallback_user',
|
||||
'password' => 'fallback_pass',
|
||||
'pin' => '12345',
|
||||
]);
|
||||
|
||||
$service = new SisterCatastoService();
|
||||
$reflector = new \ReflectionClass(SisterCatastoService::class);
|
||||
$method = $reflector->getMethod('resolveCredentials');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$creds = $method->invoke($service, 1);
|
||||
|
||||
$this->assertEquals('fallback_script', $creds['passwordScript']);
|
||||
$this->assertEquals('https://thenetworksolution.it/FattureCorrispettivi/ScaricaFatture/CassettoFiscale.php', $creds['base_url']);
|
||||
$this->assertNotEmpty($creds['app_url']);
|
||||
}
|
||||
|
||||
public function test_it_resolves_credentials_fallback_to_admin_id_4()
|
||||
{
|
||||
FeCassettoServiceConfig::query()->truncate();
|
||||
Amministratore::query()->where('id', 4)->delete();
|
||||
|
||||
// Crea amministratore ID 4
|
||||
$admin = Amministratore::factory()->create([
|
||||
'id' => 4,
|
||||
'fe_cassetto_password_script' => 'admin_4_script_key',
|
||||
]);
|
||||
|
||||
$service = new SisterCatastoService();
|
||||
$reflector = new \ReflectionClass(SisterCatastoService::class);
|
||||
$method = $reflector->getMethod('resolveCredentials');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$creds = $method->invoke($service, 1);
|
||||
|
||||
$this->assertEquals('admin_4_script_key', $creds['passwordScript']);
|
||||
}
|
||||
|
||||
public function test_it_calculates_correct_isolated_storage_paths()
|
||||
{
|
||||
$admin = Amministratore::factory()->create([
|
||||
'codice_amministratore' => 'HWFGITXK',
|
||||
]);
|
||||
|
||||
$stabile = Stabile::factory()->create([
|
||||
'codice_stabile' => '0021',
|
||||
'denominazione' => 'Milizie 3',
|
||||
'amministratore_id' => $admin->id,
|
||||
]);
|
||||
|
||||
$service = new SisterCatastoService();
|
||||
$path = $service->getStoragePath($stabile->id);
|
||||
|
||||
$this->assertEquals('AMMINISTRATORE_HWFGITXK/STABILE_0021_Milizie_3/catasto', $path);
|
||||
}
|
||||
|
||||
public function test_it_skips_api_call_when_cache_is_valid()
|
||||
{
|
||||
$admin = Amministratore::factory()->create([
|
||||
'codice_amministratore' => 'HWFGITXK',
|
||||
]);
|
||||
|
||||
$stabile = Stabile::factory()->create([
|
||||
'codice_stabile' => '0021',
|
||||
'amministratore_id' => $admin->id,
|
||||
]);
|
||||
|
||||
$service = new SisterCatastoService();
|
||||
$dirPath = $service->getStoragePath($stabile->id);
|
||||
$localFilename = "visura_F_12_34_sub5.pdf";
|
||||
|
||||
Storage::disk('public')->put("{$dirPath}/{$localFilename}", "Fake PDF Content");
|
||||
|
||||
// Effettua la richiesta con cache=24. Dovrebbe ritornare cached = true senza chiamare HTTP
|
||||
$res = $service->acquistaEPrelevaVisura(
|
||||
$stabile->id,
|
||||
'F',
|
||||
'ROMA Territorio-RM',
|
||||
'H501#ROMA#0#0',
|
||||
'12',
|
||||
'34',
|
||||
'5',
|
||||
null,
|
||||
null,
|
||||
'PDF',
|
||||
'completa',
|
||||
24
|
||||
);
|
||||
|
||||
$this->assertTrue($res['cached']);
|
||||
$this->assertEquals("{$dirPath}/{$localFilename}", $res['file_path']);
|
||||
}
|
||||
|
||||
public function test_it_extracts_zip_archives_for_omoimmobili()
|
||||
{
|
||||
Http::fake([
|
||||
'*/mashVisuraI.php' => Http::response([
|
||||
'url' => 'https://thenetworksolution.it/sister/acquistate/multiple_visure.zip'
|
||||
], 200),
|
||||
'*/acquistate/multiple_visure.zip' => Http::response($this->generateFakeZipContent(), 200)
|
||||
]);
|
||||
|
||||
$admin = Amministratore::factory()->create([
|
||||
'codice_amministratore' => 'HWFGITXK',
|
||||
]);
|
||||
|
||||
$stabile = Stabile::factory()->create([
|
||||
'codice_stabile' => '0021',
|
||||
'amministratore_id' => $admin->id,
|
||||
]);
|
||||
|
||||
$service = new SisterCatastoService();
|
||||
$dirPath = $service->getStoragePath($stabile->id);
|
||||
$res = $service->acquistaEPrelevaVisura(
|
||||
$stabile->id,
|
||||
'F',
|
||||
'ROMA Territorio-RM',
|
||||
'H501#ROMA#0#0',
|
||||
'12',
|
||||
'34',
|
||||
'5',
|
||||
null,
|
||||
null,
|
||||
'PDF',
|
||||
'completa',
|
||||
0 // Disabilita cache per forzare chiamata http fake
|
||||
);
|
||||
|
||||
$this->assertTrue($res['zip_extracted']);
|
||||
$this->assertTrue(Storage::disk('public')->exists("{$dirPath}/visura1.pdf"));
|
||||
$this->assertTrue(Storage::disk('public')->exists("{$dirPath}/visura2.pdf"));
|
||||
}
|
||||
|
||||
protected function generateFakeZipContent(): string
|
||||
{
|
||||
$tempZipPath = tempnam(sys_get_temp_dir(), 'test_zip_');
|
||||
$zip = new ZipArchive();
|
||||
if ($zip->open($tempZipPath, ZipArchive::CREATE) === true) {
|
||||
$zip->addFromString('visura1.pdf', 'Content of visura 1');
|
||||
$zip->addFromString('visura2.pdf', 'Content of visura 2');
|
||||
$zip->close();
|
||||
}
|
||||
$content = file_get_contents($tempZipPath);
|
||||
unlink($tempZipPath);
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user