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) -> 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); }