once()->with( 'lit_mcp_limits', 'lit_mcp_limits', Mockery::on(static fn (array $args): bool => $args['sanitize_callback'] === [Limits::class, 'sanitize'] && $args['default'] === Limits::DEFAULTS) ); (new LimitsTab())->registerSettings(); } public function testRendersVisibleNumberFieldsWithShortLabelsUnitsAndDescriptions(): void { Functions\stubEscapeFunctions(); Functions\stubTranslationFunctions(); Functions\when('settings_fields')->justReturn(null); Functions\when('submit_button')->justReturn(null); Functions\when('get_option')->justReturn(['upload_mb' => 8, 'snapshot_count' => 42]); Functions\when('wp_max_upload_size')->justReturn(64 * 1024 * 1024); ob_start(); (new LimitsTab())->render(); $html = (string) ob_get_clean(); self::assertSame(2, substr_count($html, 'type="number"')); self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('class="small-text"', $html); self::assertStringContainsString('MB', $html); self::assertStringContainsString('Tage', $html); self::assertStringContainsString('aria-describedby="lit-mcp-upload_mb-description"', $html); self::assertStringContainsString('

Höchstens 32 MB; für Base64-Übertragungen höchstens 10 MB.

', $html); // The snapshot setting is hidden until its feature exists, but its saved value survives a save. self::assertStringNotContainsString('Designsystem', $html); self::assertStringNotContainsString('Etappe', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('name="lit_mcp_limits[upload_mb]" value="8"', $html); self::assertStringContainsString('name="lit_mcp_limits[log_retention_days]" value="90"', $html); self::assertStringContainsString('min="1" max="32"', $html); self::assertStringContainsString('Höchstens 32', $html); self::assertStringContainsString('10 MB', $html); self::assertStringContainsString('min="1" max="3650"', $html); } public function testWarnsWhenUploadMbExceedsTheServersOwnUploadLimit(): void { Functions\stubEscapeFunctions(); Functions\stubTranslationFunctions(); Functions\when('settings_fields')->justReturn(null); Functions\when('submit_button')->justReturn(null); Functions\when('get_option')->justReturn(['upload_mb' => 20]); Functions\when('wp_max_upload_size')->justReturn(2 * 1024 * 1024); ob_start(); (new LimitsTab())->render(); $html = (string) ob_get_clean(); self::assertStringContainsString('notice-warning inline', $html); self::assertMatchesRegularExpression('/20 MB.*2 MB/s', $html); } public function testNoWarningWhenUploadMbIsWithinTheServersOwnUploadLimit(): void { Functions\stubEscapeFunctions(); Functions\stubTranslationFunctions(); Functions\when('settings_fields')->justReturn(null); Functions\when('submit_button')->justReturn(null); Functions\when('get_option')->justReturn(['upload_mb' => 5]); Functions\when('wp_max_upload_size')->justReturn(64 * 1024 * 1024); ob_start(); (new LimitsTab())->render(); $html = (string) ob_get_clean(); self::assertStringNotContainsString('notice-warning', $html); } }