gobby-code 1.3.3

Fast Rust CLI for Gobby's code index — AST-aware search, symbol navigation, and dependency graph
Documentation
use super::*;
use serde_json::json;

#[test]
fn embedding_request_response() {
    let (base_url, handle) = spawn_http_responses(vec![(
        200,
        json!({"data": [{"embedding": [0.25, 0.5, 0.75]}]}),
    )]);
    let config = EmbeddingConfig {
        api_base: format!("{base_url}/v1"),
        model: "embed-small".to_string(),
        api_key: Some("embedding-key".to_string()),
        query_prefix: None,
        timeout_seconds: 10,
    };

    let client = embedding_client(&config).expect("embedding client");
    let embedding = embed_text(&client, &config, "dimension_probe").expect("embedding response");
    let requests = handle.join().expect("server thread");

    assert_eq!(embedding, vec![0.25, 0.5, 0.75]);
    assert_eq!(requests.len(), 1);
    assert!(requests[0].contains("POST /v1/embeddings HTTP/1.1"));
    assert!(requests[0].contains("authorization: Bearer embedding-key"));
    assert!(requests[0].contains(r#""model":"embed-small""#));
    assert!(requests[0].contains(r#""input":"dimension_probe""#));
}

#[test]
fn embedding_batch_preserves_response_index_order() {
    let (base_url, handle) = spawn_http_responses(vec![(
        200,
        json!({
            "data": [
                {"index": 1, "embedding": [0.2, 0.22]},
                {"index": 0, "embedding": [0.1, 0.11]}
            ]
        }),
    )]);
    let config = EmbeddingConfig {
        api_base: format!("{base_url}/v1"),
        model: "embed-small".to_string(),
        api_key: None,
        query_prefix: None,
        timeout_seconds: 10,
    };
    let client = embedding_client(&config).expect("embedding client");

    let embeddings = embed_text_batch(
        &client,
        &config,
        &["first".to_string(), "second".to_string()],
    )
    .expect("batch embedding response");
    let requests = handle.join().expect("server thread");

    assert_eq!(embeddings, vec![vec![0.1, 0.11], vec![0.2, 0.22]]);
    assert!(requests[0].contains(r#""input":["first","second"]"#));
}