mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-08-28 05:27:41 +00:00
104 lines
2.7 KiB
Rust
104 lines
2.7 KiB
Rust
#![expect(
|
|
clippy::disallowed_methods,
|
|
reason = "integration tests that exercise sync dev-token file operations"
|
|
)]
|
|
|
|
use std::fs;
|
|
|
|
use fabro_util::dev_token::{
|
|
DEV_TOKEN_PREFIX, generate_dev_token, read_dev_token_or_err,
|
|
read_or_mint_dev_token_for_install, validate_dev_token_format,
|
|
};
|
|
|
|
#[test]
|
|
fn generate_has_correct_prefix_and_length() {
|
|
let token = generate_dev_token();
|
|
|
|
assert!(token.starts_with(DEV_TOKEN_PREFIX));
|
|
assert_eq!(token.len(), 74);
|
|
assert!(validate_dev_token_format(&token));
|
|
}
|
|
|
|
#[test]
|
|
fn generate_is_unique() {
|
|
assert_ne!(generate_dev_token(), generate_dev_token());
|
|
}
|
|
|
|
#[test]
|
|
fn validate_format_accepts_valid() {
|
|
let token = format!("{DEV_TOKEN_PREFIX}{}", "ab".repeat(32));
|
|
|
|
assert!(validate_dev_token_format(&token));
|
|
}
|
|
|
|
#[test]
|
|
fn validate_format_rejects_short() {
|
|
let token = format!("{DEV_TOKEN_PREFIX}{}", "ab".repeat(31));
|
|
|
|
assert!(!validate_dev_token_format(&token));
|
|
}
|
|
|
|
#[test]
|
|
fn validate_format_rejects_non_hex() {
|
|
let token = format!("{DEV_TOKEN_PREFIX}{}zz", "ab".repeat(31));
|
|
|
|
assert!(!validate_dev_token_format(&token));
|
|
}
|
|
|
|
#[test]
|
|
fn validate_format_rejects_wrong_prefix() {
|
|
let token = format!("fabro_nope_{}", "ab".repeat(32));
|
|
|
|
assert!(!validate_dev_token_format(&token));
|
|
}
|
|
|
|
#[test]
|
|
fn read_or_mint_for_install_creates_file() {
|
|
let dir = tempfile::tempdir().unwrap();
|
|
let path = dir.path().join("dev-token");
|
|
|
|
let token = read_or_mint_dev_token_for_install(&path).unwrap();
|
|
|
|
assert!(validate_dev_token_format(&token));
|
|
assert_eq!(fs::read_to_string(&path).unwrap(), token);
|
|
#[cfg(unix)]
|
|
{
|
|
use std::os::unix::fs::PermissionsExt;
|
|
|
|
let mode = fs::metadata(&path).unwrap().permissions().mode() & 0o777;
|
|
assert_eq!(mode, 0o600);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn read_or_mint_for_install_reads_existing() {
|
|
let dir = tempfile::tempdir().unwrap();
|
|
let path = dir.path().join("dev-token");
|
|
let token = format!("{DEV_TOKEN_PREFIX}{}", "cd".repeat(32));
|
|
fs::write(&path, &token).unwrap();
|
|
|
|
let loaded = read_or_mint_dev_token_for_install(&path).unwrap();
|
|
|
|
assert_eq!(loaded, token);
|
|
}
|
|
|
|
#[test]
|
|
fn read_dev_token_or_err_rejects_malformed_file() {
|
|
let dir = tempfile::tempdir().unwrap();
|
|
let path = dir.path().join("dev-token");
|
|
fs::write(&path, "not-a-token").unwrap();
|
|
|
|
let error = read_dev_token_or_err(&path).unwrap_err();
|
|
|
|
assert!(error.to_string().contains("invalid"));
|
|
}
|
|
|
|
#[test]
|
|
fn read_dev_token_or_err_reports_missing_file() {
|
|
let dir = tempfile::tempdir().unwrap();
|
|
let path = dir.path().join("missing-dev-token");
|
|
|
|
let error = read_dev_token_or_err(&path).unwrap_err();
|
|
|
|
assert!(error.to_string().contains("read dev token"));
|
|
}
|