relay-knowledge 1.1.16

Graph-database-based knowledge graph project.
Documentation
use std::collections::BTreeSet;

use super::materialize_express_routes;
use crate::code::parser::routes::detect::express::mounts::{
    DYNAMIC_EXPRESS_MOUNT_PREFIX, ExpressRouterMount,
};
use crate::code::parser::routes::detect::express::registrations::ExpressRouteInfo;

fn route(receiver_name: &str, local_url: &str) -> ExpressRouteInfo {
    ExpressRouteInfo {
        receiver_name: receiver_name.to_owned(),
        local_url: local_url.to_owned(),
        http_method: "get".to_owned(),
        handler_name: "listUsers".to_owned(),
        line: 7,
    }
}

#[test]
fn materializes_nested_mount_prefixes_and_deduplicates_routes() {
    let mounts = [
        ExpressRouterMount {
            receiver_name: "app".to_owned(),
            router_name: "api".to_owned(),
            local_prefix: "/api".to_owned(),
        },
        ExpressRouterMount {
            receiver_name: "api".to_owned(),
            router_name: "users".to_owned(),
            local_prefix: "/v1".to_owned(),
        },
    ];

    let routes = materialize_express_routes(
        vec![route("users", "/users"), route("users", "/users")],
        &mounts,
        &BTreeSet::from(["app".to_owned()]),
    );

    assert_eq!(routes.len(), 1);
    assert_eq!(routes[0].url, "/api/v1/users");
}

#[test]
fn drops_routes_with_dynamic_mount_prefixes() {
    let mounts = [ExpressRouterMount {
        receiver_name: "app".to_owned(),
        router_name: "users".to_owned(),
        local_prefix: DYNAMIC_EXPRESS_MOUNT_PREFIX.to_owned(),
    }];

    let routes = materialize_express_routes(
        vec![route("users", "/users")],
        &mounts,
        &BTreeSet::from(["app".to_owned()]),
    );

    assert!(routes.is_empty());
}