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

58 lines
1.4 KiB
Rust

use domain::api_token::{ApiToken, MintedApiToken, TokenDigest, TokenScope};
use domain::provider::ProviderName;
use domain::user::UserId;
fn a_token() -> ApiToken {
ApiToken::new(
UserId::generate(),
ProviderName::new("iphone-shortcuts").unwrap(),
TokenDigest::from_persistence("digest-of-the-secret".into()),
)
}
#[test]
fn a_fresh_token_has_never_been_used() {
let token = a_token();
assert!(token.last_used_at().is_none());
assert_eq!(token.scope(), TokenScope::WriteMetrics);
}
#[test]
fn a_token_remembers_when_it_was_last_used() {
let mut token = a_token();
token.mark_used();
assert!(token.last_used_at().is_some());
}
#[test]
fn the_name_a_token_carries_is_the_provider_its_writes_are_attributed_to() {
let token = a_token();
assert_eq!(token.name().value(), "iphone-shortcuts");
}
#[test]
fn every_scope_survives_a_round_trip_through_its_name() {
assert_eq!(
TokenScope::from_name(TokenScope::WriteMetrics.name()),
Some(TokenScope::WriteMetrics)
);
assert_eq!(TokenScope::from_name("read-everything"), None);
}
#[test]
fn a_minted_token_keeps_the_secret_out_of_its_debug_output() {
let minted = MintedApiToken::new(a_token(), "kmood_supersecretvalue".into());
let printed = format!("{minted:?}");
assert!(
!printed.contains("supersecret"),
"the secret leaked: {printed}"
);
assert_eq!(minted.secret(), "kmood_supersecretvalue");
}