124 lines
3.4 KiB
PHP
124 lines
3.4 KiB
PHP
<?php
|
|
|
|
use App\Models\FeatureFlag;
|
|
use App\Models\FeatureFlagOverride;
|
|
use App\Models\Role;
|
|
use App\Models\User;
|
|
use App\Services\FeatureFlagRegistrar;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Laravel\Pennant\Feature;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class, RefreshDatabase::class);
|
|
|
|
function defineFlag(array $attributes): FeatureFlag
|
|
{
|
|
$flag = FeatureFlag::create(array_merge([
|
|
'name' => 'test-flag',
|
|
'label' => 'Test flag',
|
|
'enabled' => true,
|
|
'stages' => null,
|
|
'roles' => null,
|
|
], $attributes));
|
|
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
return $flag;
|
|
}
|
|
|
|
test('a kikapcsolt flag mindenkinek inaktív', function () {
|
|
defineFlag(['enabled' => false]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeFalse();
|
|
});
|
|
|
|
test('a stage-mismatch inaktívvá teszi a flaget', function () {
|
|
Config::set('app.stage', 'PROD');
|
|
|
|
defineFlag(['stages' => ['TEST']]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeFalse();
|
|
});
|
|
|
|
test('a stage-match aktívvá teszi a flaget', function () {
|
|
Config::set('app.stage', 'TEST');
|
|
|
|
defineFlag(['stages' => ['TEST']]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeTrue();
|
|
});
|
|
|
|
test('a role-mismatch inaktívvá teszi a flaget', function () {
|
|
Role::create(['name' => 'admin', 'display_name' => 'Admin']);
|
|
|
|
defineFlag(['roles' => ['admin']]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeFalse();
|
|
});
|
|
|
|
test('a role-match aktívvá teszi a flaget', function () {
|
|
$role = Role::create(['name' => 'admin', 'display_name' => 'Admin']);
|
|
|
|
defineFlag(['roles' => ['admin']]);
|
|
|
|
$user = User::factory()->create();
|
|
$user->addRole($role);
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeTrue();
|
|
});
|
|
|
|
test('a user-szintű explicit felülbírálás felülír mindent', function () {
|
|
$flag = defineFlag(['enabled' => false]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
FeatureFlagOverride::create([
|
|
'feature_flag_id' => $flag->id,
|
|
'user_id' => $user->id,
|
|
'active' => true,
|
|
]);
|
|
Feature::for($user)->forget('test-flag');
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeTrue();
|
|
});
|
|
|
|
test('a flag admin-mentése nem törli az egyéni felülbírálásokat', function () {
|
|
$flag = defineFlag(['enabled' => true]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
FeatureFlagOverride::create([
|
|
'feature_flag_id' => $flag->id,
|
|
'user_id' => $user->id,
|
|
'active' => false,
|
|
]);
|
|
Feature::for($user)->forget('test-flag');
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeFalse();
|
|
|
|
// Admin módosítja a flaget (pl. leírás) - ez kiváltja a FeatureFlagObserver purge-öt
|
|
$flag->update(['description' => 'módosítva']);
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
expect(FeatureFlagOverride::where('feature_flag_id', $flag->id)->where('user_id', $user->id)->exists())
|
|
->toBeTrue();
|
|
expect(Feature::for($user)->active('test-flag'))->toBeFalse();
|
|
});
|
|
|
|
test('üres stages/roles esetén mindenkinek aktív', function () {
|
|
defineFlag([]);
|
|
|
|
$user = User::factory()->create();
|
|
|
|
expect(Feature::for($user)->active('test-flag'))->toBeTrue();
|
|
});
|