relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use serde_json::json;

use super::*;
use crate::domain::{CodeRepositorySelector, CodeWorkspaceDetectionConfig};

fn payload() -> Value {
    json!({
        "alias": "relay",
        "ref": "main",
        "path_filters": [],
        "language_filters": []
    })
}

#[test]
fn defaults_workspace_detection_when_absent() {
    let request = code_index_request(&payload(), CodeIndexMode::Full).expect("request");
    assert_eq!(
        request.workspace_detection,
        CodeWorkspaceDetectionConfig::default()
    );
    assert!(!request.reuse_historical);
}

#[test]
fn parses_historical_reuse_flag() {
    let mut payload = payload();
    payload["reuse_historical"] = json!(true);

    let request = code_index_request(&payload, CodeIndexMode::Full).expect("request");

    assert!(request.reuse_historical);
}

#[test]
fn rejects_non_boolean_historical_reuse_flag() {
    let mut payload = payload();
    payload["reuse_historical"] = json!("yes");

    let error = code_index_request(&payload, CodeIndexMode::Full).expect_err("error");

    assert!(error.message.contains("reuse_historical must be a boolean"));
}

#[test]
fn parses_workspace_detection_config() {
    let mut payload = payload();
    payload["workspace_detection"] = json!({
        "enabled": true,
        "supported_formats": ["pnpm", "go_modules"]
    });

    let request = code_index_request(&payload, CodeIndexMode::Full).expect("request");

    assert!(request.workspace_detection.enabled);
    assert_eq!(
        request.workspace_detection.supported_formats,
        vec![
            CodeMonorepoWorkspaceFormat::Pnpm,
            CodeMonorepoWorkspaceFormat::GoModules,
        ]
    );
    assert_eq!(
        request.repository,
        CodeRepositorySelector::new("relay", "main", Vec::new(), Vec::new()).expect("selector")
    );
}

#[test]
fn maps_worktree_ref_to_overlay_request() {
    let mut payload = payload();
    payload["ref"] = json!("worktree");

    let request = code_index_request(&payload, CodeIndexMode::Full).expect("request");

    assert_eq!(request.mode, CodeIndexMode::WorktreeOverlay);
    assert_eq!(
        request.repository,
        CodeRepositorySelector::new("relay", "HEAD", Vec::new(), Vec::new()).expect("selector")
    );
}

#[test]
fn rejects_unsupported_workspace_detection_format() {
    let mut payload = payload();
    payload["workspace_detection"] = json!({
        "enabled": true,
        "supported_formats": ["unknown"]
    });

    let error = code_index_request(&payload, CodeIndexMode::Full).expect_err("error");
    assert!(
        error
            .message
            .contains("unsupported workspace_detection.supported_formats")
    );
}