test(spaces): add multi-space scenario tests
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Failing after 6s
Update flake hashes / update-flake-hashes (pull_request) Failing after 6s
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Failing after 6s
Update flake hashes / update-flake-hashes (pull_request) Failing after 6s
Cover highest-wins PL logic across multiple parent spaces, OR-based join/kick qualification, edge cases (one space has no PL, neither has PL, user only in one space, same role different PLs across spaces).
This commit is contained in:
parent
982c01e562
commit
aae23a083b
1 changed files with 121 additions and 0 deletions
|
|
@ -78,3 +78,124 @@ fn qualifies_with_no_requirements() {
|
||||||
fn does_not_qualify_with_no_roles() {
|
fn does_not_qualify_with_no_roles() {
|
||||||
assert!(!roles_satisfy_requirements(&make_set(&["nsfw"]), &HashSet::new()));
|
assert!(!roles_satisfy_requirements(&make_set(&["nsfw"]), &HashSet::new()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Multi-space scenarios
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_highest_pl_wins() {
|
||||||
|
let space_a_roles = make_roles(&[("mod", Some(50))]);
|
||||||
|
let space_b_roles = make_roles(&[("admin", Some(100))]);
|
||||||
|
|
||||||
|
let user_roles_a = make_set(&["mod"]);
|
||||||
|
let user_roles_b = make_set(&["admin"]);
|
||||||
|
|
||||||
|
let pl_a = compute_user_power_level(&space_a_roles, &user_roles_a);
|
||||||
|
let pl_b = compute_user_power_level(&space_b_roles, &user_roles_b);
|
||||||
|
|
||||||
|
let effective = [pl_a, pl_b].into_iter().flatten().max();
|
||||||
|
assert_eq!(effective, Some(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_one_space_has_no_pl() {
|
||||||
|
let space_a_roles = make_roles(&[("nsfw", None)]);
|
||||||
|
let space_b_roles = make_roles(&[("mod", Some(50))]);
|
||||||
|
|
||||||
|
let user_roles_a = make_set(&["nsfw"]);
|
||||||
|
let user_roles_b = make_set(&["mod"]);
|
||||||
|
|
||||||
|
let pl_a = compute_user_power_level(&space_a_roles, &user_roles_a);
|
||||||
|
let pl_b = compute_user_power_level(&space_b_roles, &user_roles_b);
|
||||||
|
|
||||||
|
let effective = [pl_a, pl_b].into_iter().flatten().max();
|
||||||
|
assert_eq!(effective, Some(50));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_neither_has_pl() {
|
||||||
|
let space_a_roles = make_roles(&[("nsfw", None)]);
|
||||||
|
let space_b_roles = make_roles(&[("vip", None)]);
|
||||||
|
|
||||||
|
let user_roles_a = make_set(&["nsfw"]);
|
||||||
|
let user_roles_b = make_set(&["vip"]);
|
||||||
|
|
||||||
|
let pl_a = compute_user_power_level(&space_a_roles, &user_roles_a);
|
||||||
|
let pl_b = compute_user_power_level(&space_b_roles, &user_roles_b);
|
||||||
|
|
||||||
|
let effective = [pl_a, pl_b].into_iter().flatten().max();
|
||||||
|
assert_eq!(effective, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_user_only_in_one_space() {
|
||||||
|
let space_a_roles = make_roles(&[("admin", Some(100))]);
|
||||||
|
let space_b_roles = make_roles(&[("mod", Some(50))]);
|
||||||
|
|
||||||
|
let user_roles_a = make_set(&["admin"]);
|
||||||
|
let user_roles_b: HashSet<String> = HashSet::new();
|
||||||
|
|
||||||
|
let pl_a = compute_user_power_level(&space_a_roles, &user_roles_a);
|
||||||
|
let pl_b = compute_user_power_level(&space_b_roles, &user_roles_b);
|
||||||
|
|
||||||
|
let effective = [pl_a, pl_b].into_iter().flatten().max();
|
||||||
|
assert_eq!(effective, Some(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_join_or_logic_qualifies_in_any() {
|
||||||
|
let space_a_reqs = make_set(&["staff"]);
|
||||||
|
let space_b_reqs = make_set(&["nsfw"]);
|
||||||
|
|
||||||
|
let user_roles = make_set(&["nsfw"]);
|
||||||
|
|
||||||
|
let qualifies_a = roles_satisfy_requirements(&space_a_reqs, &user_roles);
|
||||||
|
let qualifies_b = roles_satisfy_requirements(&space_b_reqs, &user_roles);
|
||||||
|
|
||||||
|
assert!(!qualifies_a);
|
||||||
|
assert!(qualifies_b);
|
||||||
|
assert!(qualifies_a || qualifies_b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_kick_or_logic_qualifies_in_other() {
|
||||||
|
let space_a_reqs = make_set(&["nsfw"]);
|
||||||
|
let space_b_reqs = make_set(&["vip"]);
|
||||||
|
|
||||||
|
let user_roles_after_revoke = make_set(&["vip"]);
|
||||||
|
|
||||||
|
let qualifies_a = roles_satisfy_requirements(&space_a_reqs, &user_roles_after_revoke);
|
||||||
|
let qualifies_b = roles_satisfy_requirements(&space_b_reqs, &user_roles_after_revoke);
|
||||||
|
|
||||||
|
assert!(!qualifies_a);
|
||||||
|
assert!(qualifies_b);
|
||||||
|
assert!(qualifies_a || qualifies_b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_no_qualification_anywhere() {
|
||||||
|
let space_a_reqs = make_set(&["staff"]);
|
||||||
|
let space_b_reqs = make_set(&["admin"]);
|
||||||
|
|
||||||
|
let user_roles = make_set(&["nsfw"]);
|
||||||
|
|
||||||
|
let qualifies_a = roles_satisfy_requirements(&space_a_reqs, &user_roles);
|
||||||
|
let qualifies_b = roles_satisfy_requirements(&space_b_reqs, &user_roles);
|
||||||
|
|
||||||
|
assert!(!qualifies_a);
|
||||||
|
assert!(!qualifies_b);
|
||||||
|
assert!(!(qualifies_a || qualifies_b));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multi_space_same_role_different_pl() {
|
||||||
|
let space_a_roles = make_roles(&[("mod", Some(50))]);
|
||||||
|
let space_b_roles = make_roles(&[("mod", Some(75))]);
|
||||||
|
|
||||||
|
let user_roles = make_set(&["mod"]);
|
||||||
|
|
||||||
|
let pl_a = compute_user_power_level(&space_a_roles, &user_roles);
|
||||||
|
let pl_b = compute_user_power_level(&space_b_roles, &user_roles);
|
||||||
|
|
||||||
|
let effective = [pl_a, pl_b].into_iter().flatten().max();
|
||||||
|
assert_eq!(effective, Some(75));
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue