vl-convert-server 2.0.0-rc2

HTTP server for converting Vega-Lite and Vega specifications to static images
mod common;

use common::*;
#[tokio::test]
async fn test_invalid_vl_version() {
    let server = &*DEFAULT_SERVER;
    let resp = server
        .client
        .post(format!("{}/vegalite/svg", server.base_url))
        .json(&serde_json::json!({"spec": simple_vl_spec(), "vl_version": "99.99"}))
        .send()
        .await
        .unwrap();
    assert_eq!(
        resp.status(),
        400,
        "expected 400 for invalid vl_version, got: {}",
        resp.status()
    );
}

#[tokio::test]
async fn test_missing_spec() {
    let server = &*DEFAULT_SERVER;
    let resp = server
        .client
        .post(format!("{}/vegalite/svg", server.base_url))
        .json(&serde_json::json!({"bundle": false}))
        .send()
        .await
        .unwrap();
    assert!(
        resp.status().is_client_error(),
        "expected client error for missing spec, got: {}",
        resp.status()
    );
}

#[tokio::test]
async fn test_unknown_field_rejected() {
    let server = &*DEFAULT_SERVER;
    let resp = server
        .client
        .post(format!("{}/vegalite/svg", server.base_url))
        .json(&serde_json::json!({"spec": simple_vl_spec(), "bogus_field": 123}))
        .send()
        .await
        .unwrap();
    assert!(
        resp.status().is_client_error(),
        "expected client error for unknown field, got: {}",
        resp.status()
    );
}

#[tokio::test]
async fn test_invalid_renderer() {
    let server = &*DEFAULT_SERVER;
    let resp = server
        .client
        .post(format!("{}/vegalite/html", server.base_url))
        .json(&serde_json::json!({"spec": simple_vl_spec(), "renderer": "invalid_renderer"}))
        .send()
        .await
        .unwrap();
    assert_eq!(resp.status(), 400);
}

#[tokio::test]
async fn test_google_fonts_blocked() {
    let server = &*DEFAULT_SERVER;
    let resp = server
        .client
        .post(format!("{}/vegalite/svg", server.base_url))
        .json(&serde_json::json!({"spec": simple_vl_spec(), "google_fonts": ["Roboto"]}))
        .send()
        .await
        .unwrap();
    assert_eq!(
        resp.status(),
        400,
        "google_fonts should be rejected when allow_google_fonts is false"
    );
}