relay-knowledge 1.1.16

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

use super::{DYNAMIC_EXPRESS_MOUNT_PREFIX, parse_express_router_mounts};

fn router_names() -> BTreeSet<String> {
    BTreeSet::from([
        "app".to_owned(),
        "authRouter".to_owned(),
        "usersRouter".to_owned(),
    ])
}

#[test]
fn parses_multiple_paths_and_nested_router_arrays() {
    let mounts = parse_express_router_mounts(
        "app.use(['/api', '/v1'], [authRouter, usersRouter]);",
        &router_names(),
    );

    let records = mounts
        .iter()
        .map(|mount| {
            (
                mount.receiver_name.as_str(),
                mount.router_name.as_str(),
                mount.local_prefix.as_str(),
            )
        })
        .collect::<BTreeSet<_>>();

    assert_eq!(records.len(), 4);
    assert!(records.contains(&("app", "authRouter", "/api")));
    assert!(records.contains(&("app", "usersRouter", "/v1")));
}

#[test]
fn marks_dynamic_mount_paths_without_guessing_a_prefix() {
    let mounts = parse_express_router_mounts("app.use(apiPrefix, usersRouter);", &router_names());

    assert_eq!(mounts.len(), 1);
    assert_eq!(mounts[0].local_prefix, DYNAMIC_EXPRESS_MOUNT_PREFIX);
}

#[test]
fn ignores_mount_calls_on_unknown_receivers() {
    let mounts = parse_express_router_mounts("client.use('/api', usersRouter);", &router_names());

    assert!(mounts.is_empty());
}