relay-knowledge 1.1.16

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

use super::{
    express_namespace_names, express_router_factory_names, js_assignment_variable_name,
    parse_express_application_alias, parse_express_router_alias,
};

#[test]
fn discovers_esm_and_commonjs_router_factory_bindings() {
    let source = "
        import { Router, Router as ExpressRouter } from 'express';
        const { Router: CommonRouter } = require('express');
        import { Router as OtherRouter } from 'other';
    ";

    assert_eq!(
        express_router_factory_names(source),
        BTreeSet::from([
            "CommonRouter".to_owned(),
            "ExpressRouter".to_owned(),
            "Router".to_owned(),
        ])
    );
}

#[test]
fn discovers_default_namespace_and_required_express_names() {
    let source = "
        import web from 'express';
        import * as expressNamespace from \"express\";
        const common$ = require(`express`);
        const fake = \"import ignored from 'express'\";
    ";

    assert_eq!(
        express_namespace_names(source),
        BTreeSet::from([
            "common$".to_owned(),
            "express".to_owned(),
            "expressNamespace".to_owned(),
            "web".to_owned(),
        ])
    );
}

#[test]
fn assignment_binding_accepts_exported_and_typed_identifiers() {
    assert_eq!(
        js_assignment_variable_name("export const users: Router"),
        Some("users".to_owned())
    );
    assert_eq!(
        js_assignment_variable_name("let api$"),
        Some("api$".to_owned())
    );
    assert_eq!(js_assignment_variable_name("const users-router"), None);
}

#[test]
fn alias_parsing_requires_known_express_factories() {
    let express_names = BTreeSet::from(["express".to_owned(), "web".to_owned()]);
    let router_factories = BTreeSet::from(["ExpressRouter".to_owned()]);

    assert_eq!(
        parse_express_application_alias("const app = web()", &express_names),
        Some("app".to_owned())
    );
    assert_eq!(
        parse_express_router_alias(
            "export const users = ExpressRouter()",
            &router_factories,
            &express_names,
        ),
        Some("users".to_owned())
    );
    assert_eq!(
        parse_express_router_alias(
            "const fake = OtherRouter()",
            &router_factories,
            &express_names,
        ),
        None
    );
}