first pass of merging in warp (doesn't build)
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user