dotperms 0.1.0

A simple library for LuckPerms-like authorization using permission nodes.
Documentation
use super::*;

#[test]
fn simple_checks() {
    assert!(check_requirement(
        [pn!("meili.index-name.read")].iter(),
        [pn!("meili")].iter()
    ));
    assert!(check_requirement(
        [pn!("meili.index-name.read")].iter(),
        [pn!("meili.index-name")].iter()
    ));
    assert!(check_requirement(
        [pn!("meili")].iter(),
        [pn!("meili")].iter()
    ));
    assert!(check_requirement(
        [pn!("meili.asd")].iter(),
        [pn!("meili.asd")].iter()
    ));
    //assert!(check_requirement([pn!("")].iter(), [pn!("")].iter()));

    // Should not be allowed
    assert!(!check_requirement(
        [pn!("meili.asd")].iter(),
        [pn!("meili.bcd")].iter()
    ));
    assert!(!check_requirement(
        [pn!("meili.index-name2.read")].iter(),
        [pn!("meili.index-name")].iter()
    ));
    assert!(!check_requirement(
        [pn!("meili")].iter(),
        [pn!("meili.bcd")].iter()
    ));
    // assert!(!check_requirement([pn!("")].iter(), [pn!("meili")].iter()));
}

#[test]
fn context_works() {
    assert!(check_requirement(
        [pn!("meili").set_ctx("server", "home")].iter(),
        [pn!("meili")].iter()
    ));
    assert!(check_requirement(
        [pn!("meili").set_ctx("server", "home")].iter(),
        [pn!("meili").set_ctx("server", "home")].iter()
    ));
    assert!(!check_requirement(
        [pn!("meili")].iter(),
        [pn!("meili").set_ctx("server", "home")].iter()
    ));
    assert!(!check_requirement(
        [pn!("meili").set_ctx("server", "prod")].iter(),
        [pn!("meili").set_ctx("server", "home")].iter()
    ));
}

#[test]
fn multiple_requirements() {
    assert!(check_requirement(
        [pn!("meili"), pn!("otherstuff")].iter(),
        [pn!("otherstuff"), pn!("meili")].iter()
    ));

    assert!(!check_requirement(
        [pn!("meili"), pn!("otherstuff")].iter(),
        [pn!("meili")].iter()
    ));
}

#[test]
fn test_traits() {
    assert!(format!("{}", pn!("test.of.traits")) == "test.of.traits");
    assert!(format!("{}", pn!("test.of.*")) == "test.of");
    assert!(format!("{}", pn!("test.of.")) == "test.of");
}

#[test]
fn test_star_and_empty_rules() {
    assert!(!check_requirement([pn!("")].iter(), [pn!("*")].iter()));
    assert!(check_requirement(
        [pn!("asdasdasd"), pn!("qweqwe"), pn!("fghfgh"),].iter(),
        [pn!("*")].iter()
    ));

    let mut pn = pn!("");
    pn.push("");

    assert!(!check_requirement([pn].iter(), [pn!("*")].iter()));

    // star double push test

    let mut pn = pn!("");
    pn.push("*");

    assert!(check_requirement([pn.clone()].iter(), [pn!("*")].iter()));

    let mut pn_c = pn.clone();
    pn_c.push("*");

    assert_eq!(pn, pn_c);
}