pub use axess_identity::{DeviceId, IdError, TenantId, UserId, ensure_user_id_not_reserved};
#[cfg(any(test, feature = "testing"))]
pub use axess_identity::testing;
#[cfg(test)]
mod tests {
use super::*;
use axess_identity::Uuid;
#[test]
fn system_tenant_is_nil() {
assert!(TenantId::SYSTEM.is_nil());
assert_eq!(TenantId::SYSTEM_STR, TenantId::SYSTEM.to_string());
}
#[test]
fn system_user_distinct_from_system_tenant() {
assert_ne!(UserId::SYSTEM.as_uuid(), TenantId::SYSTEM.as_uuid());
}
#[test]
fn try_new_rejects_empty() {
assert_eq!(TenantId::try_new(""), Err(IdError::Empty("TenantId")));
assert_eq!(UserId::try_new(""), Err(IdError::Empty("UserId")));
}
#[test]
fn try_new_accepts_uuid_shape() {
let t = TenantId::try_new("1f0a7b2e-4c91-4e3f-9b2a-8d0123456789").unwrap();
assert!(!t.is_nil());
assert_eq!(t.as_uuid().get_version_num(), 4);
}
#[test]
fn try_new_rejects_non_uuid() {
assert!(matches!(
TenantId::try_new("ab\nc"),
Err(IdError::NotAUuid(_))
));
assert!(matches!(
UserId::try_new("ab\0c"),
Err(IdError::NotAUuid(_))
));
}
#[test]
fn serde_round_trip_is_hyphenated_uuid() {
let t = TenantId::try_new("1f0a7b2e-4c91-4e3f-9b2a-8d0123456789").unwrap();
let json = serde_json::to_string(&t).unwrap();
assert_eq!(json, "\"1f0a7b2e-4c91-4e3f-9b2a-8d0123456789\"");
let back: TenantId = serde_json::from_str(&json).unwrap();
assert_eq!(t, back);
}
#[test]
fn from_str_works() {
use std::str::FromStr;
assert!(TenantId::from_str("1f0a7b2e-4c91-4e3f-9b2a-8d0123456789").is_ok());
assert!(TenantId::from_str("").is_err());
}
#[test]
fn ensure_user_id_not_reserved_blocks_system_user() {
let res = ensure_user_id_not_reserved(&UserId::SYSTEM, &TenantId::from_uuid(Uuid::nil()));
assert!(matches!(res, Err(IdError::Reserved(_))));
}
#[test]
fn ensure_user_id_not_reserved_accepts_normal_pair() {
let user = UserId::try_new("1f0a7b2e-4c91-4e3f-9b2a-8d0123456789").unwrap();
let tenant = TenantId::try_new("2a0b7b2e-4c91-4e3f-9b2a-8d0123456789").unwrap();
assert!(ensure_user_id_not_reserved(&user, &tenant).is_ok());
}
#[test]
fn device_id_round_trips_via_uuid() {
let d = DeviceId::try_new("00000000-0000-4000-8000-000000000abc").unwrap();
let json = serde_json::to_string(&d).unwrap();
assert_eq!(json, "\"00000000-0000-4000-8000-000000000abc\"");
let back: DeviceId = serde_json::from_str(&json).unwrap();
assert_eq!(d, back);
}
}