d2d.emegrendeles.hu/tests/Feature/Deployment/DeploymentPackageCreationTest.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.3 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 felületről indított csomagolás létrehozza a mappát', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[$first, , $third] = $repository['commits'];
$this->actingAs(deploymentDeveloper());
$component = Livewire::test(DeploymentPackage::class)
->call('selectFrom', $first)
->call('selectTo', $third)
->call('toggleFile', 'app/Elso.php')
->call('createPackage');
$package = $component->get('lastPackage');
// Alapértelmezett célkörnyezet a d2d: azt frissítjük sűrűbben.
expect($package)->not->toBeNull()
->and($package['name'])->toStartWith('deploy_d2d_')
->and(File::isDirectory($package['path']))->toBeTrue()
->and($package['skipped'])->toBe(['app/Elso.php']);
deploymentCleanup($repository['path']);
});
test('a kirakottként megjelölt csomag adja a következő tartomány kezdetét', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[$first, $second] = $repository['commits'];
$this->actingAs(deploymentDeveloper());
// Az alapértelmezett célkörnyezetre készül, hogy a második oldalbetöltés is ezt töltse elő.
$record = DeploymentPackageRecord::create([
'name' => 'deploy_d2d_teszt',
'target' => 'd2d',
'branch' => 'main',
'from_commit' => $first,
'to_commit' => $second,
'folder' => $repository['path'],
]);
Livewire::test(DeploymentPackage::class)
->call('markDeployed', $record->id)
->assertSet('fromCommit', $second);
expect($record->refresh()->deployed_at)->not->toBeNull();
// Új oldalbetöltésnél is a kirakott commitról indul a tartomány.
Livewire::test(DeploymentPackage::class)->assertSet('fromCommit', $second);
deploymentCleanup($repository['path']);
});