using PnvPanel.Application.Admin.Pricing; using PnvPanel.Application.Common.Interfaces; using Xunit; namespace PnvPanel.Application.Tests.Admin.Pricing; public class UpdatePricingSettingsCommandValidatorTests { private readonly UpdatePricingSettingsCommandValidator _validator = new(); private static UpdatePricingSettingsCommand Command(params DiscountTierDto[] tiers) => new(500, 450, 400, tiers); [Fact] public void Validate_WithEmptyTiers_IsValid() { var result = _validator.Validate(Command()); Assert.True(result.IsValid); } [Fact] public void Validate_WithProgressiveTiers_IsValid() { var result = _validator.Validate(Command(new DiscountTierDto(3, 5), new DiscountTierDto(6, 10))); Assert.True(result.IsValid); } [Fact] public void Validate_WithDuplicateThreshold_IsInvalid() { var result = _validator.Validate(Command(new DiscountTierDto(3, 5), new DiscountTierDto(3, 10))); Assert.False(result.IsValid); } [Fact] public void Validate_WhenHigherThresholdHasSmallerDiscount_IsInvalid() { var result = _validator.Validate(Command(new DiscountTierDto(3, 10), new DiscountTierDto(6, 5))); Assert.False(result.IsValid); } [Fact] public void Validate_WithDiscountPercentOutOfRange_IsInvalid() { var result = _validator.Validate(Command(new DiscountTierDto(3, 100))); Assert.False(result.IsValid); } [Fact] public void Validate_WithNonPositiveMinConfigs_IsInvalid() { var result = _validator.Validate(Command(new DiscountTierDto(0, 5))); Assert.False(result.IsValid); } }