'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(); });