#![allow(clippy::unwrap_used)] use serde_json::json;
use crate::tenancy::TenantContext;
#[test]
fn test_tenant_isolation() {
let tenant_a = TenantContext::new("tenant_a");
let tenant_b = TenantContext::new("tenant_b");
assert_ne!(tenant_a.id(), tenant_b.id(), "Different tenants must have different IDs");
assert_eq!(tenant_a.id(), "tenant_a");
assert_eq!(tenant_b.id(), "tenant_b");
}
#[test]
fn test_tenant_id_preservation() {
let tenant = TenantContext::new("acme-corp");
assert_eq!(tenant.id(), "acme-corp");
}
#[test]
fn test_tenant_has_creation_timestamp() {
let tenant = TenantContext::new("tenant1");
assert!(tenant.created_at_iso8601().is_some());
let timestamp = tenant.created_at_iso8601().unwrap();
assert!(!timestamp.is_empty());
assert!(timestamp.contains('T')); }
#[test]
fn test_tenant_timestamps_close() {
let tenant_a = TenantContext::new("tenant_a");
let tenant_b = TenantContext::new("tenant_b");
let ts_a = tenant_a.created_at_iso8601().unwrap();
let ts_b = tenant_b.created_at_iso8601().unwrap();
assert!(!ts_a.is_empty());
assert!(!ts_b.is_empty());
}
#[test]
fn test_tenant_metadata() {
let mut tenant = TenantContext::new("acme");
tenant.set_metadata("industry", "technology");
tenant.set_metadata("employees", "500");
assert_eq!(tenant.get_metadata("industry"), Some("technology"));
assert_eq!(tenant.get_metadata("employees"), Some("500"));
assert_eq!(tenant.get_metadata("nonexistent"), None);
}
#[test]
fn test_tenant_equality() {
let tenant_a1 = TenantContext::new("tenant_a");
let tenant_a2 = TenantContext::new("tenant_a");
let tenant_b = TenantContext::new("tenant_b");
assert_eq!(tenant_a1.id(), tenant_a2.id());
assert_ne!(tenant_a1.id(), tenant_b.id());
}
#[test]
fn test_tenant_clone() {
let tenant_original = TenantContext::new("tenant_clone_test");
let tenant_cloned = tenant_original.clone();
assert_eq!(tenant_original.id(), tenant_cloned.id());
}
#[test]
fn test_empty_tenant_id() {
let system_tenant = TenantContext::new("");
assert_eq!(system_tenant.id(), "");
}
#[test]
fn test_tenant_id_special_chars() {
let tenant = TenantContext::new("tenant-123_abc.org");
assert_eq!(tenant.id(), "tenant-123_abc.org");
}
#[test]
fn test_tenant_id_uuid() {
let uuid_tenant = TenantContext::new("550e8400-e29b-41d4-a716-446655440000");
assert_eq!(uuid_tenant.id(), "550e8400-e29b-41d4-a716-446655440000");
}
#[test]
fn test_from_jwt_claims_success() {
let claims = json!({
"sub": "user123",
"tenant_id": "acme-corp",
"email": "alice@acme.com"
});
let tenant = TenantContext::from_jwt_claims(&claims).expect("Should create tenant from JWT");
assert_eq!(tenant.id(), "acme-corp");
}
#[test]
fn test_from_jwt_claims_missing_tenant_id() {
let claims = json!({
"sub": "user123",
"email": "alice@example.com"
});
let result = TenantContext::from_jwt_claims(&claims);
assert!(result.is_err(), "Should error when tenant_id is missing");
}
#[test]
fn test_from_jwt_claims_invalid_tenant_id_type() {
let claims = json!({
"sub": "user123",
"tenant_id": 12345 });
let result = TenantContext::from_jwt_claims(&claims);
assert!(result.is_err(), "Should error when tenant_id is not a string");
}
#[test]
fn test_from_jwt_claims_uuid_tenant() {
let uuid_tenant = "550e8400-e29b-41d4-a716-446655440000";
let claims = json!({
"sub": "user123",
"tenant_id": uuid_tenant
});
let tenant = TenantContext::from_jwt_claims(&claims).expect("Should create tenant from JWT");
assert_eq!(tenant.id(), uuid_tenant);
}
#[test]
fn test_from_jwt_claims_null_tenant_id() {
let claims = json!({
"sub": "user123",
"tenant_id": null
});
let result = TenantContext::from_jwt_claims(&claims);
assert!(result.is_err(), "Should error when tenant_id is null");
}