63 lines
2.3 KiB
Rust
63 lines
2.3 KiB
Rust
/*
|
|
* Copyright (C) 2026 Mateusz Gruszczyński @linuxiarz.pl
|
|
* Source-Available Code / Dual-Licensed.
|
|
*
|
|
* Free for non-commercial and evaluation use under terms of BSL/GPLv3.
|
|
* Commercial or production use requires a valid paid license.
|
|
* See LICENSE file in repository root for details.
|
|
*/
|
|
|
|
use super::*;
|
|
|
|
fn headers_with_guest_id(guest_id: &str) -> HeaderMap {
|
|
let mut headers = HeaderMap::new();
|
|
headers.insert(
|
|
header::COOKIE,
|
|
HeaderValue::from_str(&format!("rustpad_guest_id={guest_id}"))
|
|
.expect("valid cookie header"),
|
|
);
|
|
headers
|
|
}
|
|
|
|
#[test]
|
|
fn guest_owner_requires_the_original_browser_identifier() {
|
|
let owner_id = "0123456789abcdef0123456789abcdef";
|
|
let owner_headers = headers_with_guest_id(owner_id);
|
|
let visitor_headers = headers_with_guest_id("fedcba9876543210fedcba9876543210");
|
|
|
|
assert!(guest_owner_is_requester(&owner_headers, Some(owner_id)));
|
|
assert!(!guest_owner_is_requester(&visitor_headers, Some(owner_id)));
|
|
assert!(!guest_owner_is_requester(&HeaderMap::new(), Some(owner_id)));
|
|
}
|
|
|
|
#[test]
|
|
fn invalid_guest_identifier_does_not_grant_ownership() {
|
|
let headers = headers_with_guest_id("too-short");
|
|
assert!(!guest_owner_is_requester(&headers, Some("too-short")));
|
|
}
|
|
|
|
#[test]
|
|
fn only_an_owner_can_set_the_first_password() {
|
|
assert!(can_set_resource_password(false, true, false));
|
|
assert!(can_set_resource_password(false, false, true));
|
|
assert!(!can_set_resource_password(false, false, false));
|
|
assert!(!can_set_resource_password(true, true, true));
|
|
}
|
|
|
|
#[test]
|
|
fn settings_allow_owner_or_verified_password_holder() {
|
|
assert!(can_manage_resource_settings(true, false, false));
|
|
assert!(can_manage_resource_settings(false, true, false));
|
|
assert!(can_manage_resource_settings(false, false, true));
|
|
assert!(!can_manage_resource_settings(false, false, false));
|
|
}
|
|
|
|
#[test]
|
|
fn workspace_note_deletion_follows_rw_protection_rules() {
|
|
assert!(can_delete_workspace_note(AccessLevel::Write, false, false));
|
|
assert!(can_delete_workspace_note(AccessLevel::Write, true, true));
|
|
assert!(!can_delete_workspace_note(AccessLevel::Write, true, false));
|
|
assert!(!can_delete_workspace_note(AccessLevel::Read, false, true));
|
|
assert!(!can_delete_workspace_note(AccessLevel::None, false, true));
|
|
}
|