folk-plugin-http 0.3.9

HTTP plugin for Folk — accepts connections via hyper and dispatches to PHP workers
Documentation
//! Tests for CompressionConfig validation.

use folk_plugin_http::config::{CompressionConfig, HttpConfig};
use folk_plugin_http::folk_plugin_factory;

#[test]
fn compression_min_size_default() {
    let config = CompressionConfig::default();
    assert_eq!(config.min_size, 256);
}

#[test]
fn compression_min_size_parse_valid() {
    let toml = r#"
        [compression]
        enabled = true
        min_size = 65535
    "#;
    let config: HttpConfig = toml::from_str(toml).unwrap();
    assert_eq!(config.compression.min_size, 65535);
}

#[test]
fn compression_min_size_parse_human() {
    let toml = r#"
        [compression]
        enabled = true
        min_size = "1kb"
    "#;
    let config: HttpConfig = toml::from_str(toml).unwrap();
    assert_eq!(config.compression.min_size, 1024);
}

/// Values exceeding u16::MAX must be rejected by PluginFactory::create with a clear error.
#[test]
fn compression_min_size_exceeds_u16_max_rejected() {
    let config = serde_json::json!({
        "compression": {
            "enabled": true,
            "min_size": u16::MAX as u64 + 1
        }
    });
    let err = folk_plugin_factory()
        .create(config)
        .err()
        .expect("expected an error for min_size > u16::MAX");
    let msg = err.to_string();
    assert!(
        msg.contains("compression.min_size"),
        "error should mention field name, got: {msg}"
    );
    assert!(
        msg.contains("65535"),
        "error should mention the max value, got: {msg}"
    );
}

/// u16::MAX itself must be accepted.
#[test]
fn compression_min_size_at_u16_max_accepted() {
    let config = serde_json::json!({
        "compression": {
            "enabled": true,
            "min_size": u16::MAX as u64
        }
    });
    assert!(folk_plugin_factory().create(config).is_ok());
}