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>
93 lines
3.1 KiB
PHP
93 lines
3.1 KiB
PHP
<?php
|
|
|
|
use App\Filament\Pages\DeploymentPackage;
|
|
use App\Models\FeatureFlag;
|
|
use App\Models\Role;
|
|
use App\Models\User;
|
|
use App\Services\Deployment\DeploymentGuard;
|
|
use App\Services\FeatureFlagRegistrar;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Illuminate\Support\Facades\Http;
|
|
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 kikapcsolt env kapcsoló mindenkitől elveszi a hozzáférést', function () {
|
|
deploymentAllowEnvironment();
|
|
Config::set('deployment.enabled', false);
|
|
|
|
$developer = deploymentDeveloper();
|
|
|
|
expect(app(DeploymentGuard::class)->isAllowed($developer))->toBeFalse()
|
|
->and(app(DeploymentGuard::class)->denialReason($developer))->toContain('DEPLOYMENT_PACKAGE_ENABLED');
|
|
});
|
|
|
|
test('a nem fejlesztői stage-en akkor sem érhető el, ha a kapcsoló be van kapcsolva', function () {
|
|
deploymentAllowEnvironment();
|
|
Config::set('app.stage', 'PROD');
|
|
|
|
$developer = deploymentDeveloper();
|
|
|
|
expect(app(DeploymentGuard::class)->isAllowed($developer))->toBeFalse()
|
|
->and(app(DeploymentGuard::class)->denialReason($developer))->toContain('fejlesztői környezetben');
|
|
});
|
|
|
|
test('a developer szerep nélküli felhasználó nem éri el', function () {
|
|
deploymentAllowEnvironment();
|
|
|
|
Role::create(['name' => 'admin', 'display_name' => 'Admin']);
|
|
$admin = User::factory()->create();
|
|
$admin->addRole(Role::where('name', 'admin')->first());
|
|
|
|
FeatureFlag::create([
|
|
'name' => 'DeploymentPackage',
|
|
'label' => 'Deployment csomagoló',
|
|
'enabled' => true,
|
|
'stages' => null,
|
|
'roles' => null,
|
|
]);
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
expect(app(DeploymentGuard::class)->isAllowed($admin))->toBeFalse();
|
|
});
|
|
|
|
test('a kikapcsolt feature flag elrejti a felületet a fejlesztő elől is', function () {
|
|
deploymentAllowEnvironment();
|
|
|
|
$developer = deploymentDeveloper(flagEnabled: false);
|
|
|
|
expect(app(DeploymentGuard::class)->isAllowed($developer))->toBeFalse()
|
|
->and(DeploymentPackage::canAccess())->toBeFalse();
|
|
});
|
|
|
|
test('minden feltétel teljesülése esetén engedélyezett', function () {
|
|
deploymentAllowEnvironment();
|
|
|
|
$developer = deploymentDeveloper();
|
|
|
|
expect(app(DeploymentGuard::class)->isAllowed($developer))->toBeTrue()
|
|
->and(app(DeploymentGuard::class)->denialReason($developer))->toBeNull();
|
|
});
|
|
|
|
test('a jogosulatlan felhasználó 403-at kap az oldal betöltésekor', function () {
|
|
deploymentAllowEnvironment();
|
|
|
|
$developer = deploymentDeveloper(flagEnabled: false);
|
|
|
|
// Szándékosan valódi HTTP kérés: a Livewire::test() a HttpException-t válasszá
|
|
// alakítja (RequestBroker: withoutExceptionHandling([HttpException::class])), így
|
|
// ott nem a tényleges belépési pontot mérnénk.
|
|
$this->actingAs($developer)
|
|
->get(DeploymentPackage::getUrl())
|
|
->assertForbidden();
|
|
});
|