alef 0.81.0

Opinionated polyglot binding generator for Rust libraries
Documentation
use super::test_case::{DartTestCaseContext, render_test_case};
use crate::core::config::ResolvedCrateConfig;
use crate::e2e::config::E2eConfig;
use crate::e2e::fixture::Fixture;

fn render_mock_url(input: serde_json::Value) -> String {
    let fixture = Fixture {
        id: "nested_mock_url".to_string(),
        description: "Nested mock URL".to_string(),
        input,
        preserve_input_urls: true,
        ..Fixture::default()
    };
    let mut e2e_config = E2eConfig::default();
    e2e_config.call.function = "fetch".to_string();
    e2e_config.call.args = serde_json::from_value(serde_json::json!([{
        "name": "endpoint",
        "field": "input.request.url",
        "type": "mock_url"
    }]))
    .expect("argument mapping");

    let config = ResolvedCrateConfig::default();
    let type_defs = Vec::new();
    let enums = Vec::new();
    let functions = Vec::new();
    let first_class_map = super::values::build_dart_first_class_map(&type_defs, &enums, &e2e_config);
    let mut out = String::new();
    render_test_case(
        &mut out,
        &fixture,
        DartTestCaseContext {
            e2e_config: &e2e_config,
            lang: "dart",
            bridge_class: &config.dart_bridge_class_name(),
            dart_first_class_map: &first_class_map,
            adapters: &config.adapters,
            config: &config,
            type_defs: &type_defs,
            enums: &enums,
            functions: &functions,
            errors: &[],
            native_typed_dtos: true,
            is_snippet: false,
        },
    );
    out
}

#[test]
fn nested_mock_url_uses_the_configured_field_path() {
    let out = render_mock_url(serde_json::json!({
        "request": { "url": "https://example.test/nested" }
    }));

    assert!(
        out.contains("final endpoint = 'https://example.test/nested';"),
        "the nested fixture value must be preserved instead of falling back: {out}"
    );
    assert!(
        !out.contains("final endpoint = _fixtureUrl("),
        "a present nested value must not use the mock-server fallback: {out}"
    );
}

#[test]
fn missing_nested_mock_url_keeps_the_fixture_url_fallback() {
    let out = render_mock_url(serde_json::json!({ "request": {} }));

    assert!(
        out.contains("final endpoint = _fixtureUrl(\"nested_mock_url\");"),
        "a missing configured path must retain the existing fallback: {out}"
    );
}