plugin_test

Macro plugin_test 

Source
macro_rules! plugin_test {
    (
        test_name: $name:ident,
        plugin: $plugin:ty,
        context: $context:expr,
        request: $request:expr,
        config: $config:expr,
        assert: $assert:expr
    ) => { ... };
}
Expand description

Quick test macro for plugin functions

ยงExample

use axum::http::{HeaderMap, Method, Uri};
use mockforge_plugin_sdk::{
    mock_context, plugin_test, prelude::*, Result as PluginCoreResult,
};
use std::collections::HashMap;

#[derive(Default)]
struct TestPlugin;

#[async_trait]
impl AuthPlugin for TestPlugin {
    fn capabilities(&self) -> PluginCapabilities {
        PluginCapabilities::default()
    }

    async fn initialize(&self, _config: &AuthPluginConfig) -> PluginCoreResult<()> {
        Ok(())
    }

    async fn authenticate(
        &self,
        _context: &PluginContext,
        _request: &AuthRequest,
        _config: &AuthPluginConfig,
    ) -> PluginCoreResult<PluginResult<AuthResponse>> {
        let identity = UserIdentity::new("user");
        let response = AuthResponse::success(identity, HashMap::new());
        Ok(PluginResult::success(response, 0))
    }

    fn validate_config(&self, _config: &AuthPluginConfig) -> PluginCoreResult<()> {
        Ok(())
    }

    fn supported_schemes(&self) -> Vec<String> {
        vec!["basic".to_string()]
    }

    async fn cleanup(&self) -> PluginCoreResult<()> {
        Ok(())
    }
}

plugin_test! {
    test_name: authenticate_valid_user,
    plugin: TestPlugin,
    context: mock_context! {
        plugin_id: "test-plugin",
        request_id: "req-123",
    },
    request: AuthRequest::from_axum(
        Method::GET,
        Uri::from_static("/login"),
        HeaderMap::new(),
        None
    ),
    config: AuthPluginConfig::default(),
    assert: |result| {
        assert!(result.unwrap().is_success());
    }
}