d2d.emegrendeles.hu/tests/Feature/Deployment/DeploymentPackageDownloadTest.php
E98Developer 98cf955354 FIX DeploymentPackageTest felbontása hat fájlra a párhuzamos futtatáshoz
A paratest FÁJLONKÉNT osztja szét a munkát, ezért egyetlen 28 tesztes fájlból
nem tudott párhuzamosítani: egy processz vitte a teljes 137 mp-et, a másik öt
üresjáratban állt. A --parallel emiatt korábban egyenesen lassabb volt
(136 -> 143 mp), a teljes suite-on pedig csak 11%-ot hozott.

A felosztás témák szerint történt, de mért időkre kalibrálva, hogy egyik fájl
se domináljon (a leghosszabb a Builder, ~35 mp):

  AccessTest    6 teszt  ~7 mp   jogosultság, feature flag, 403
  GitTest       5 teszt ~18 mp   GitRepository, ChangeSetAnalyzer
  BuilderTest   9 teszt ~35 mp   csomagépítés, _TEENDOK, _torles.sh, verzió
  PageTest      4 teszt ~21 mp   commitlista, keresés, kiválasztás
  CreationTest  2 teszt ~32 mp   felületről indított csomagolás, kirakottnak jelölés
  DownloadTest  2 teszt ~25 mp   naplóbejegyzés, ZIP letöltés, útvonal-ellenőrzés

A két legdrágább teszt (21,7 és 20,4 mp) szándékosan külön fájlba került,
együtt hagyva ők adnák a padlót.

A közös segédfüggvények a DeploymentTestHelpers.php-ba kerültek. Ez nem
*Test.php, ezért a phpunit nem szedi fel teszt-fájlként. A minta-repót takarító
afterAll() helyére register_shutdown_function lépett: az afterAll fájlonként
futna le, és a következő fájl alól húzná ki a mintát.

Mért eredmény (6 mag): ezek a tesztek sorosan 137,00 mp, párhuzamosan
67,88 mp. Teljes suite párhuzamosan 149,78 -> 77,52 mp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 10:48:31 +02:00

71 lines
2.1 KiB
PHP

<?php
use App\Filament\Pages\DeploymentPackage;
use App\Models\DeploymentPackage as DeploymentPackageRecord;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Livewire\Livewire;
use Tests\TestCase;
require_once __DIR__.'/DeploymentTestHelpers.php';
uses(TestCase::class, RefreshDatabase::class);
beforeEach(function () {
Http::fake();
});
test('a csomagolás naplóbejegyzést és letölthető ZIP-et hagy maga után', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[$first, , $third] = $repository['commits'];
$this->actingAs(deploymentDeveloper());
Livewire::test(DeploymentPackage::class)
->call('selectFrom', $first)
->call('selectTo', $third)
->call('createPackage');
$record = DeploymentPackageRecord::query()->latest('id')->first();
expect($record)->not->toBeNull()
->and($record->target)->toBe('d2d')
->and($record->to_commit)->toBe($third)
->and($record->deployed_at)->toBeNull()
->and(File::exists($record->zip_path))->toBeTrue();
Livewire::test(DeploymentPackage::class)
->call('downloadPackage', $record->id)
->assertFileDownloaded();
deploymentCleanup($repository['path']);
});
test('a kimeneti mappán kívüli ZIP útvonal nem tölthető le', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[$first, , $third] = $repository['commits'];
$this->actingAs(deploymentDeveloper());
// Elrontott (vagy szándékosan átírt) rekord: a fájl létezik, de a csomagoló
// kimeneti mappáján kívül van.
$record = DeploymentPackageRecord::create([
'name' => 'deploy_e2e_hamis',
'target' => 'e2e',
'branch' => 'main',
'from_commit' => $first,
'to_commit' => $third,
'folder' => $repository['path'],
'zip_path' => base_path('composer.json'),
]);
Livewire::test(DeploymentPackage::class)
->call('downloadPackage', $record->id)
->assertNoFileDownloaded();
deploymentCleanup($repository['path']);
});