103 lines
3.0 KiB
Rust
103 lines
3.0 KiB
Rust
use super::*;
|
|
use crate::server::ids::ServerId;
|
|
|
|
// `ServerId::from_string_lossy` requires exactly 22 characters.
|
|
const TEST_WORKSPACE_UID: &str = "workspace_uid123456789";
|
|
|
|
fn make_workspace(policy: Option<UsageVisibilityPolicy>) -> Workspace {
|
|
let mut workspace = Workspace::from_local_cache(
|
|
ServerId::from_string_lossy(TEST_WORKSPACE_UID).into(),
|
|
"Test Workspace".to_string(),
|
|
None,
|
|
);
|
|
workspace.billing_metadata.tier.usage_visibility_policy = policy;
|
|
workspace
|
|
}
|
|
|
|
fn policy(
|
|
granularity: UsageVisibilityGranularity,
|
|
max_prior_cycles: MaxPriorCycles,
|
|
) -> UsageVisibilityPolicy {
|
|
UsageVisibilityPolicy {
|
|
admin_granularity: granularity,
|
|
max_prior_cycles,
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn missing_policy_returns_defaults_for_admin_and_non_admin() {
|
|
let workspace = make_workspace(None);
|
|
|
|
let as_admin = workspace.resolve_usage_visibility(true);
|
|
assert_eq!(as_admin.granularity, UsageVisibilityGranularity::OwnOnly);
|
|
assert_eq!(as_admin.max_prior_cycles, MaxPriorCycles::None);
|
|
|
|
let as_non_admin = workspace.resolve_usage_visibility(false);
|
|
assert_eq!(
|
|
as_non_admin.granularity,
|
|
UsageVisibilityGranularity::OwnOnly
|
|
);
|
|
assert_eq!(as_non_admin.max_prior_cycles, MaxPriorCycles::None);
|
|
}
|
|
|
|
#[test]
|
|
fn non_admin_collapses_granularity_but_keeps_max_prior_cycles() {
|
|
let workspace = make_workspace(Some(policy(
|
|
UsageVisibilityGranularity::FullBreakdown,
|
|
MaxPriorCycles::Limited(11),
|
|
)));
|
|
|
|
let resolved = workspace.resolve_usage_visibility(false);
|
|
|
|
assert_eq!(resolved.granularity, UsageVisibilityGranularity::OwnOnly);
|
|
assert_eq!(resolved.max_prior_cycles, MaxPriorCycles::Limited(11));
|
|
}
|
|
|
|
#[test]
|
|
fn admin_inherits_tier_team_aggregate_granularity() {
|
|
let workspace = make_workspace(Some(policy(
|
|
UsageVisibilityGranularity::TeamAggregate,
|
|
MaxPriorCycles::Limited(11),
|
|
)));
|
|
|
|
let resolved = workspace.resolve_usage_visibility(true);
|
|
|
|
assert_eq!(
|
|
resolved.granularity,
|
|
UsageVisibilityGranularity::TeamAggregate
|
|
);
|
|
assert_eq!(resolved.max_prior_cycles, MaxPriorCycles::Limited(11));
|
|
}
|
|
|
|
#[test]
|
|
fn admin_inherits_tier_per_user_totals_unlimited() {
|
|
let workspace = make_workspace(Some(policy(
|
|
UsageVisibilityGranularity::PerUserTotals,
|
|
MaxPriorCycles::Unlimited,
|
|
)));
|
|
|
|
let resolved = workspace.resolve_usage_visibility(true);
|
|
|
|
assert_eq!(
|
|
resolved.granularity,
|
|
UsageVisibilityGranularity::PerUserTotals
|
|
);
|
|
assert_eq!(resolved.max_prior_cycles, MaxPriorCycles::Unlimited);
|
|
}
|
|
|
|
#[test]
|
|
fn admin_inherits_tier_full_breakdown_unlimited() {
|
|
let workspace = make_workspace(Some(policy(
|
|
UsageVisibilityGranularity::FullBreakdown,
|
|
MaxPriorCycles::Unlimited,
|
|
)));
|
|
|
|
let resolved = workspace.resolve_usage_visibility(true);
|
|
|
|
assert_eq!(
|
|
resolved.granularity,
|
|
UsageVisibilityGranularity::FullBreakdown
|
|
);
|
|
assert_eq!(resolved.max_prior_cycles, MaxPriorCycles::Unlimited);
|
|
}
|