Files
k-mood/crates/adapters/auth/tests/api_token_secret_test.rs
Gabriel Kaszewski 23d052278a
All checks were successful
CI / ci (push) Successful in 19m38s
changes
2026-08-26 20:58:14 +02:00

63 lines
1.6 KiB
Rust

use domain::ports::ApiTokenSecretPort;
use auth::ApiTokenSecret;
const HEX_CHARACTERS_IN_A_SHA256: usize = 64;
#[test]
fn a_minted_secret_announces_itself_so_a_scanner_can_spot_it() {
let minted = ApiTokenSecret.mint();
assert!(minted.starts_with("kmood_"), "got {minted}");
assert!(minted.len() > 40, "a secret needs real entropy: {minted}");
}
#[test]
fn no_two_secrets_are_alike() {
let secrets: Vec<String> = (0..50).map(|_| ApiTokenSecret.mint()).collect();
let mut unique = secrets.clone();
unique.sort();
unique.dedup();
assert_eq!(unique.len(), secrets.len());
}
#[test]
fn the_same_secret_always_digests_the_same_way() {
let secret = ApiTokenSecret.mint();
assert_eq!(
ApiTokenSecret.digest(&secret).value(),
ApiTokenSecret.digest(&secret).value()
);
}
#[test]
fn different_secrets_digest_differently() {
let first = ApiTokenSecret.digest("kmood_one");
let second = ApiTokenSecret.digest("kmood_two");
assert_ne!(first.value(), second.value());
}
#[test]
fn a_digest_gives_nothing_of_the_secret_away() {
let secret = ApiTokenSecret.mint();
let digest = ApiTokenSecret.digest(&secret);
assert_eq!(digest.value().len(), HEX_CHARACTERS_IN_A_SHA256);
assert!(!digest.value().contains(&secret));
assert!(!secret.contains(digest.value()));
assert!(digest.value().chars().all(|c| c.is_ascii_hexdigit()));
}
#[test]
fn the_digest_matches_the_published_value_for_a_known_input() {
let digest = ApiTokenSecret.digest("abc");
assert_eq!(
digest.value(),
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
);
}