Files
k-photos/crates/domain/tests/services/quota_checker.rs

54 lines
1.4 KiB
Rust

use domain::entities::{QuotaDefinition, TimePeriod, UsageType};
use domain::services::quota_checker::check_quota;
use domain::value_objects::SystemId;
fn make_quota(limit: u64) -> QuotaDefinition {
let mut q = QuotaDefinition::new(SystemId::new());
q.add_rule(UsageType::StorageBytes, limit, TimePeriod::Monthly);
q
}
#[test]
fn allows_within_limit() {
let q = make_quota(1000);
let r = check_quota(&q, UsageType::StorageBytes, 500, 400);
assert!(r.allowed);
assert!(!r.is_unlimited);
assert_eq!(r.limit, 1000);
assert_eq!(r.current_usage, 500);
}
#[test]
fn rejects_over_limit() {
let q = make_quota(1000);
let r = check_quota(&q, UsageType::StorageBytes, 800, 300);
assert!(!r.allowed);
assert_eq!(r.limit, 1000);
}
#[test]
fn unlimited_always_allowed() {
let mut q = QuotaDefinition::new(SystemId::new());
q.add_unlimited_rule(UsageType::StorageBytes);
let r = check_quota(&q, UsageType::StorageBytes, u64::MAX, 1);
assert!(r.allowed);
assert!(r.is_unlimited);
}
#[test]
fn unenforced_allows_all() {
let mut q = make_quota(100);
q.is_enforced = false;
let r = check_quota(&q, UsageType::StorageBytes, 9999, 9999);
assert!(r.allowed);
assert!(r.is_unlimited);
}
#[test]
fn missing_rule_allows() {
let q = make_quota(1000); // rule for StorageBytes only
let r = check_quota(&q, UsageType::ApiCalls, 9999, 9999);
assert!(r.allowed);
assert!(r.is_unlimited);
}