using PnvPanel.Domain.Pricing; using Xunit; namespace PnvPanel.Domain.Tests.Pricing; public class PricingDiscountTests { private static PricingDiscountTier Tier(int minConfigs, int percent) => PricingDiscountTier.Create(Guid.NewGuid(), minConfigs, percent); [Fact] public void ResolvePercent_WhenNoTiers_ReturnsZero() { var percent = PricingDiscount.ResolvePercent([], maxConfigs: 10); Assert.Equal(0, percent); } [Fact] public void ResolvePercent_WhenBelowAllThresholds_ReturnsZero() { var tiers = new[] { Tier(3, 5), Tier(6, 10) }; var percent = PricingDiscount.ResolvePercent(tiers, maxConfigs: 2); Assert.Equal(0, percent); } [Fact] public void ResolvePercent_PicksHighestApplicableTier_NotCumulative() { var tiers = new[] { Tier(3, 5), Tier(6, 10), Tier(12, 15) }; var percent = PricingDiscount.ResolvePercent(tiers, maxConfigs: 8); Assert.Equal(10, percent); } [Fact] public void ResolvePercent_ExactlyOnThreshold_Applies() { var tiers = new[] { Tier(3, 5) }; var percent = PricingDiscount.ResolvePercent(tiers, maxConfigs: 3); Assert.Equal(5, percent); } [Fact] public void Apply_WithZeroPercent_ReturnsAmountUnchanged() { var amount = PricingDiscount.Apply(1000, 0); Assert.Equal(1000, amount); } [Fact] public void Apply_WithPercent_RoundsToNearestInteger() { var amount = PricingDiscount.Apply(999, 10); Assert.Equal(899, amount); } }