relay-knowledge 1.1.16

Graph-database-based knowledge graph project.
Documentation
//! Direct contracts for bounded code-graph context requests.

use super::*;

#[test]
fn context_request_rejects_empty_query() {
    let error = request(" ", 1, 1024).expect_err("empty query should fail");

    assert!(error.to_string().contains("query"));
}

#[test]
fn context_request_bounds_limit_and_context_bytes() {
    assert!(request("retry", 0, 1024).is_err());
    assert!(request("retry", CODEGRAPH_CONTEXT_MAX_LIMIT + 1, 1024).is_err());
    assert!(request("retry", 1, 0).is_err());
    assert!(request("retry", 1, CODEGRAPH_CONTEXT_MIN_BYTES - 1).is_err());
    assert!(request("retry", 1, CODEGRAPH_CONTEXT_MAX_BYTES + 1).is_err());
    assert!(
        request(
            "retry",
            CODEGRAPH_CONTEXT_MAX_LIMIT,
            CODEGRAPH_CONTEXT_MIN_BYTES
        )
        .is_ok()
    );
}

#[test]
fn context_request_defaults_optional_code_toggles_from_json() {
    let request: CodeGraphContextRequest = serde_json::from_value(serde_json::json!({
        "repository": {
            "repository": "repo",
            "ref_selector": "HEAD",
            "path_filters": [],
            "language_filters": []
        },
        "query": "retry",
        "limit": 1,
        "freshness_policy": "allow_stale",
        "max_context_bytes": CODEGRAPH_CONTEXT_MIN_BYTES
    }))
    .expect("request should deserialize with default toggles");

    assert!(request.include_code);
    assert!(!request.exclude_generated);
}

fn request(
    query: &str,
    limit: usize,
    max_context_bytes: usize,
) -> Result<CodeGraphContextRequest, DomainError> {
    CodeGraphContextRequest::new(
        CodeRepositorySelector::new("repo", "HEAD", Vec::new(), Vec::new())?,
        query,
        limit,
        FreshnessPolicy::AllowStale,
        max_context_bytes,
        true,
        false,
    )
}