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>
71 lines
2.1 KiB
PHP
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']);
|
|
});
|