Skip to main content

forge_core/testing/context/
mod.rs

1//! Test context builders for all FORGE function types.
2//!
3//! Each test context provides:
4//! - Authentication configuration (user ID, roles, claims)
5//! - Optional database pool for integration tests
6//! - Mocking capabilities (HTTP, job dispatch, workflow dispatch)
7//! - Context-specific fields (job_id, attempt, cron schedule, etc.)
8
9use crate::function::AuthContext;
10use std::collections::HashMap;
11use uuid::Uuid;
12
13mod cron;
14mod daemon;
15mod job;
16mod mcp_tool;
17mod mutation;
18mod query;
19mod webhook;
20mod workflow;
21
22pub use cron::{TestCronContext, TestCronContextBuilder};
23pub use daemon::{TestDaemonContext, TestDaemonContextBuilder};
24pub use job::{TestJobContext, TestJobContextBuilder, TestProgressUpdate};
25pub use mcp_tool::{TestMcpToolContext, TestMcpToolContextBuilder};
26pub use mutation::{TestMutationContext, TestMutationContextBuilder};
27pub use query::{TestQueryContext, TestQueryContextBuilder};
28pub use webhook::{TestWebhookContext, TestWebhookContextBuilder};
29pub use workflow::{TestWorkflowContext, TestWorkflowContextBuilder};
30
31/// Build an AuthContext from test builder fields.
32/// Handles UUID-based users, subject-based auth (Firebase/Clerk), and unauthenticated.
33pub(crate) fn build_test_auth(
34    user_id: Option<Uuid>,
35    roles: Vec<String>,
36    claims: HashMap<String, serde_json::Value>,
37) -> AuthContext {
38    if let Some(user_id) = user_id {
39        AuthContext::authenticated(user_id, roles, claims)
40    } else if claims.contains_key("sub") {
41        AuthContext::authenticated_without_uuid(roles, claims)
42    } else {
43        AuthContext::unauthenticated()
44    }
45}