104 lines
3.5 KiB
PHP
104 lines
3.5 KiB
PHP
<?php
|
|
|
|
use App\Filament\Resources\FeatureFlagOverrides\FeatureFlagOverrideResource;
|
|
use App\Filament\Resources\FeatureFlagOverrides\Pages\ListFeatureFlagOverrides;
|
|
use App\Filament\Resources\FeatureFlags\Pages\EditFeatureFlag;
|
|
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\Gate;
|
|
use Laravel\Pennant\Feature;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class, RefreshDatabase::class);
|
|
|
|
function actAsDeveloper(): User
|
|
{
|
|
$devRole = Role::firstOrCreate(['name' => 'developer'], ['display_name' => 'Developer']);
|
|
$developer = User::factory()->create();
|
|
$developer->addRole($devRole);
|
|
|
|
FeatureFlag::firstOrCreate(
|
|
['name' => 'FeatureFlagAdmin'],
|
|
['label' => 'Feature flag admin felület', 'enabled' => true, 'stages' => null, 'roles' => ['developer']],
|
|
);
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
return $developer;
|
|
}
|
|
|
|
test('a flag szerkesztő oldalán megjelenik az egyéni felülbírálások relation manager', function () {
|
|
$developer = actAsDeveloper();
|
|
|
|
$flag = FeatureFlag::create([
|
|
'name' => 'rm-test-flag',
|
|
'label' => 'RM teszt flag',
|
|
'enabled' => true,
|
|
]);
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
$targetUser = User::factory()->create();
|
|
FeatureFlagOverride::create([
|
|
'feature_flag_id' => $flag->id,
|
|
'user_id' => $targetUser->id,
|
|
'active' => true,
|
|
]);
|
|
|
|
$this->actingAs($developer);
|
|
|
|
Livewire::test(EditFeatureFlag::class, ['record' => $flag->getRouteKey()])
|
|
->assertSuccessful();
|
|
});
|
|
|
|
test('a globális felülbírálás lista renderel, és csak fejlesztők érik el', function () {
|
|
$developer = actAsDeveloper();
|
|
|
|
$adminRole = Role::firstOrCreate(['name' => 'admin'], ['display_name' => 'Admin']);
|
|
$admin = User::factory()->create();
|
|
$admin->addRole($adminRole);
|
|
|
|
expect(Gate::forUser($admin)->allows('viewAny', FeatureFlagOverride::class))->toBeFalse();
|
|
expect(Gate::forUser($developer)->allows('viewAny', FeatureFlagOverride::class))->toBeTrue();
|
|
|
|
$this->actingAs($admin);
|
|
$this->get(FeatureFlagOverrideResource::getUrl())->assertForbidden();
|
|
|
|
$this->actingAs($developer);
|
|
Livewire::test(ListFeatureFlagOverrides::class)->assertSuccessful();
|
|
});
|
|
|
|
test('az "örökölt"-re állítás (mass delete) is érvényteleníti a gyorsítótárazott Pennant-feloldást', function () {
|
|
actAsDeveloper();
|
|
|
|
$flag = FeatureFlag::create([
|
|
'name' => 'purge-test-flag',
|
|
'label' => 'Purge teszt flag',
|
|
'enabled' => false,
|
|
]);
|
|
app(FeatureFlagRegistrar::class)->registerAll();
|
|
|
|
$user = User::factory()->create();
|
|
|
|
FeatureFlagOverride::create([
|
|
'feature_flag_id' => $flag->id,
|
|
'user_id' => $user->id,
|
|
'active' => true,
|
|
]);
|
|
Feature::for($user)->forget('purge-test-flag');
|
|
expect(Feature::for($user)->active('purge-test-flag'))->toBeTrue();
|
|
|
|
// ugyanaz a mintázat, mint amit a FeatureFlagsTable "Egyéni felülbírálás"
|
|
// akciója az "örökölt" választásnál használ - model-instance delete()-en
|
|
// keresztül, hogy a FeatureFlagOverrideObserver kiváltódjon
|
|
FeatureFlagOverride::where('feature_flag_id', $flag->id)
|
|
->where('user_id', $user->id)
|
|
->first()
|
|
?->delete();
|
|
|
|
expect(Feature::for($user)->active('purge-test-flag'))->toBeFalse();
|
|
});
|