relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use super::{
    DYNAMIC_PYTHON_MOUNT_PREFIX, extract_methods_from_flask_args,
    extract_python_add_url_rule_positional_handler, extract_python_keyword_value,
    extract_python_route_path, extract_python_router_argument, parse_flask_methods_decorator,
    python_handler_name_from_value, python_prefix_argument, trim_one_trailing_paren,
};

#[test]
fn splits_nested_keyword_values_without_losing_following_arguments() {
    let args = r#"path="/items", defaults={"filter": (1, 2)}, methods=["GET", "POST"]"#;

    assert_eq!(
        extract_python_keyword_value(args, "defaults"),
        Some(r#"{"filter": (1, 2)}"#)
    );
    assert_eq!(
        extract_methods_from_flask_args(args),
        vec!["get".to_owned(), "post".to_owned()]
    );
}

#[test]
fn extracts_static_and_dynamic_prefix_arguments() {
    assert_eq!(python_prefix_argument(r#"prefix="/api""#, "prefix"), "/api");
    assert_eq!(
        python_prefix_argument("prefix=SETTINGS.api_prefix", "prefix"),
        DYNAMIC_PYTHON_MOUNT_PREFIX
    );
    assert_eq!(python_prefix_argument("tags=['items']", "prefix"), "");
}

#[test]
fn accepts_keyword_or_positional_router_identifiers() {
    assert_eq!(
        extract_python_router_argument("router=items_router, prefix='/api'", "router"),
        Some("items_router".to_owned())
    );
    assert_eq!(
        extract_python_router_argument("items_router, prefix='/api'", "router"),
        Some("items_router".to_owned())
    );
    assert_eq!(
        extract_python_router_argument("lambda: router", "router"),
        None
    );
}

#[test]
fn extracts_route_path_with_keyword_precedence() {
    assert_eq!(
        extract_python_route_path(r#""/fallback", path="/preferred""#),
        Some("/preferred".to_owned())
    );
    assert_eq!(
        extract_python_route_path(r#"rule="/rule""#),
        Some("/rule".to_owned())
    );
}

#[test]
fn extracts_named_handlers_and_rejects_inline_callbacks() {
    assert_eq!(
        python_handler_name_from_value("views.ItemView.as_view('items')"),
        Some("ItemView".to_owned())
    );
    assert_eq!(python_handler_name_from_value("lambda: response"), None);
    assert_eq!(
        extract_python_add_url_rule_positional_handler(
            r#""/items", "items", handlers.list_items, methods=["GET"]"#
        ),
        Some("list_items".to_owned())
    );
}

#[test]
fn parses_methods_decorators_and_default_route_methods() {
    assert_eq!(
        parse_flask_methods_decorator(r#"@app.methods(["POST", "PATCH"])"#),
        Some(vec!["post".to_owned(), "patch".to_owned()])
    );
    assert_eq!(
        extract_methods_from_flask_args(r#""/items""#),
        vec!["get".to_owned()]
    );
    assert_eq!(
        extract_methods_from_flask_args(r#""/items", methods=METHODS"#),
        vec!["any".to_owned()]
    );
    assert!(parse_flask_methods_decorator("@app.methods").is_none());
}

#[test]
fn removes_at_most_one_trailing_call_parenthesis() {
    assert_eq!(trim_one_trailing_paren("call())  "), "call()");
    assert_eq!(trim_one_trailing_paren("value"), "value");
}