lfsx-server 1.23.3

A fast, lightweight, secure Git LFS server
Documentation
use super::*;

#[test]
fn ordinary_names_are_accepted() {
    let ns = Namespace::new("FerrLabs", "LFSX").unwrap();

    assert_eq!(ns.org(), "FerrLabs");
    assert_eq!(ns.repo(), "LFSX");
}

#[test]
fn traversal_segments_are_rejected() {
    for (org, repo) in [
        ("..", "LFSX"),
        ("FerrLabs", ".."),
        ("FerrLabs", "."),
        ("FerrLabs", "sub/dir"),
        ("FerrLabs", "..%2Fetc"),
        ("", "LFSX"),
        ("FerrLabs", ""),
    ] {
        assert!(
            Namespace::new(org, repo).is_err(),
            "{org}/{repo} escaped validation"
        );
    }
}

#[test]
fn absurdly_long_names_are_rejected() {
    assert!(Namespace::new("FerrLabs", "a".repeat(101)).is_err());
    assert!(Namespace::new("FerrLabs", "a".repeat(100)).is_ok());
}

#[test]
fn the_default_forge_keeps_the_layout_it_always_had() {
    let ns = Namespace::new("FerrLabs", "LFSX").unwrap();

    assert_eq!(ns.forge(), None);
    assert_eq!(ns.stored_org(), "FerrLabs");
    assert_eq!(ns.to_string(), "FerrLabs/LFSX");
    assert_eq!(ns.upstream(), "FerrLabs/LFSX");
    assert_eq!(ns.url_path(), "FerrLabs/LFSX");
}

#[test]
fn a_named_forge_is_stored_apart_and_asked_about_as_itself() {
    let ns = Namespace::on("work", "FerrLabs", "LFSX").unwrap();

    assert_eq!(ns.forge(), Some("work"));
    assert_eq!(ns.org(), "FerrLabs");
    assert_eq!(ns.stored_org(), "work~FerrLabs");
    assert_eq!(ns.to_string(), "work~FerrLabs/LFSX");
    assert_eq!(ns.upstream(), "FerrLabs/LFSX");
    assert_eq!(ns.url_path(), "-/work/FerrLabs/LFSX");
    assert_ne!(ns, Namespace::new("FerrLabs", "LFSX").unwrap());
}

#[test]
fn no_org_can_be_mistaken_for_one_on_a_named_forge() {
    assert!(Namespace::new("work~FerrLabs", "LFSX").is_err());
}

#[test]
fn forge_names_cannot_shadow_the_dashboard_or_escape_a_path() {
    for forge in [
        "",
        "api",
        "dashboard",
        "Work",
        "-work",
        "a/b",
        "..",
        "a~b",
        &"a".repeat(33),
    ] {
        assert!(
            Namespace::on(forge, "FerrLabs", "LFSX").is_err(),
            "{forge} was accepted"
        );
    }
    for forge in ["work", "gitea-2", "1"] {
        assert!(Namespace::on(forge, "FerrLabs", "LFSX").is_ok(), "{forge}");
    }
}