allows('name')->andReturn($name); $ability->allows('label')->andReturn('Label ' . $name); $ability->allows('isDirect')->andReturn($direct); $abilities[] = $ability; } $integration = Mockery::mock(Integration::class); $integration->allows('isAvailable')->andReturn(true); $integration->allows('abilities')->andReturn($abilities); return new IntegrationRegistry($integration); } public function testRegistersTheExposureOptionWithThePolicySanitizer(): void { Functions\expect('register_setting')->once()->with( 'lit_mcp_tools', 'lit_mcp_exposure', Mockery::on(static fn (array $args): bool => $args['sanitize_callback'] === [ExposurePolicy::class, 'sanitize']) ); (new ToolsTab($this->registry(), new ExposurePolicy()))->registerSettings(); } public function testRendersOneSelectPerAbilityWithOnlyAllowedModes(): void { Functions\stubEscapeFunctions(); Functions\stubTranslationFunctions(); Functions\when('settings_fields')->justReturn(null); Functions\when('submit_button')->justReturn(null); Functions\when('selected')->alias(static fn ($a, $b = true, $echo = true): string => (string) $a === (string) $b ? ' selected="selected"' : ''); ob_start(); (new ToolsTab($this->registry(), new ExposurePolicy(['lit/menu-list' => 'disabled'])))->render(); $html = (string) ob_get_clean(); $selects = array_slice(explode('