Mengenrabatt: Staffel im Rechner und eine Seite im Web

agentd task 4027a3aa01be47e9b677e7c687e4b183
This commit is contained in:
agentd
2026-08-07 13:04:33 +00:00
parent 605a952f7a
commit 5d83ffaa76
11 changed files with 532 additions and 352 deletions

View File

@@ -33,4 +33,94 @@ public sealed class PriceCalculatorTests
{
Assert.Throws<ArgumentOutOfRangeException>(() => PriceCalculator.ApplyDiscount(100m, 101m));
}
[Fact]
public void Quantity_9_gets_no_quantity_discount()
{
Assert.Equal(0, PriceCalculator.GetQuantityDiscountPercent(9));
}
[Fact]
public void Quantity_10_gets_five_percent_quantity_discount()
{
Assert.Equal(5, PriceCalculator.GetQuantityDiscountPercent(10));
}
[Fact]
public void Quantity_49_gets_five_percent_quantity_discount()
{
Assert.Equal(5, PriceCalculator.GetQuantityDiscountPercent(49));
}
[Fact]
public void Quantity_50_gets_ten_percent_quantity_discount()
{
Assert.Equal(10, PriceCalculator.GetQuantityDiscountPercent(50));
}
[Fact]
public void Quantity_below_one_is_refused()
{
Assert.Throws<ArgumentOutOfRangeException>(() => PriceCalculator.GetQuantityDiscountPercent(0));
}
[Fact]
public void Total_applies_five_percent_quantity_discount()
{
Assert.Equal(950m, PriceCalculator.CalculateTotal(100m, 10, 0m));
}
[Fact]
public void Total_applies_percentage_discount_before_quantity_discount()
{
Assert.Equal(712.5m, PriceCalculator.CalculateTotal(100m, 10, 25m));
}
[Fact]
public void Total_applies_ten_percent_quantity_discount_for_fifty_pieces()
{
Assert.Equal(4500m, PriceCalculator.CalculateTotal(100m, 50, 0m));
}
[Fact]
public void Rounding_rounds_up_to_the_nearest_five_rappen()
{
Assert.Equal(1.25m, PriceCalculator.RoundToFiveRappen(1.23m));
}
[Fact]
public void Rounding_rounds_down_to_the_nearest_five_rappen()
{
Assert.Equal(1.20m, PriceCalculator.RoundToFiveRappen(1.21m));
}
[Fact]
public void Rounding_rounds_midpoints_away_from_zero()
{
Assert.Equal(1.15m, PriceCalculator.RoundToFiveRappen(1.125m));
}
[Fact]
public void Total_rounds_after_the_quantity_discount()
{
Assert.Equal(15.85m, PriceCalculator.CalculateTotal(1.67m, 10, 0m));
}
[Fact]
public void Total_refuses_a_negative_unit_price()
{
Assert.Throws<ArgumentOutOfRangeException>(() => PriceCalculator.CalculateTotal(-1m, 1, 0m));
}
[Fact]
public void Total_refuses_a_quantity_below_one()
{
Assert.Throws<ArgumentOutOfRangeException>(() => PriceCalculator.CalculateTotal(10m, 0, 0m));
}
[Fact]
public void Total_refuses_a_discount_above_100_percent()
{
Assert.Throws<ArgumentOutOfRangeException>(() => PriceCalculator.CalculateTotal(10m, 1, 101m));
}
}