d2d.emegrendeles.hu/tests/Feature/Deployment/DeploymentPackagePageTest.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

91 lines
3.0 KiB
PHP

<?php
use App\Filament\Pages\DeploymentPackage;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\Client\Factory;
use Illuminate\Support\Facades\Http;
use Livewire\Livewire;
use Tests\TestCase;
require_once __DIR__.'/DeploymentTestHelpers.php';
uses(TestCase::class, RefreshDatabase::class);
// Az oldal betöltéskor lekérdezi a környezetek deploy-version.json-ját - a tesztek
// nem indíthatnak valódi kimenő kérést.
beforeEach(function () {
Http::fake();
});
test('a keresés a commit törzsében is talál, nem csak a tárgysorban', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
$this->actingAs(deploymentDeveloper());
Livewire::test(DeploymentPackage::class)
->set('data.search', 'árlista részlet')
->assertSee('második commit')
->assertDontSee('harmadik commit');
deploymentCleanup($repository['path']);
});
test('az oldal kilistázza a commitokat és a kijelölt tartomány fájljait', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[$first, , $third] = $repository['commits'];
$this->actingAs(deploymentDeveloper());
Livewire::test(DeploymentPackage::class)
->assertSuccessful()
->assertSee('harmadik commit')
->call('selectFrom', $first)
->call('selectTo', $third)
->assertSet('fromCommit', $first)
->assertSet('toCommit', $third)
->assertSee('app/Atnevezett.php')
->assertSee('app/Regi.php');
deploymentCleanup($repository['path']);
});
test('az oldal alapból a d2d környezetet ajánlja és betöltéskor lekérdezi az élő állapotot', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
[, , $third] = $repository['commits'];
// A beforeEach-ben regisztrált catch-all stub minden URL-re illeszkedik, és a
// Http factory az ELSŐ találatot adja vissza - ezért itt új factory kell, különben
// az üres törzsű alapértelmezett válasz nyerne a konkrét stub helyett.
Http::swap(new Factory);
Http::fake([
'*deploy-version.json' => Http::response(['target' => 'd2d', 'commit' => $third, 'branch' => 'main']),
]);
$this->actingAs(deploymentDeveloper());
$component = Livewire::test(DeploymentPackage::class);
expect($component->get('data')['target'])->toBe('d2d')
// A lekérdezés gomb nélkül, magától megtörténik.
->and($component->get('liveVersions')['d2d']['ok'])->toBeTrue()
->and($component->get('liveVersions')['d2d']['data']['commit'])->toBe($third);
deploymentCleanup($repository['path']);
});
test('az oldal nem fogad el kamu commit azonosítót', function () {
deploymentAllowEnvironment();
$repository = deploymentTestRepository();
$this->actingAs(deploymentDeveloper());
Livewire::test(DeploymentPackage::class)
->call('selectFrom', '../../etc/passwd')
->assertSet('fromCommit', null);
deploymentCleanup($repository['path']);
});