d2d.emegrendeles.hu/tests/Feature/FeatureFlagTest.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();
});