ex-int-04-shipping-cost/ShippingCosts.Test/LuxuryShippingCostCalculatorTests.cs
github-classroom[bot] 5db225db88
Initial commit
2025-04-29 15:01:53 +00:00

58 lines
1.9 KiB
C#

using ShippingCosts.Contracts;
using ShippingCosts.Implementations;
namespace ShippingCosts.Test;
public sealed class LuxuryShippingCostCalculatorTests : ShippingCostCalculatorBaseTestBase
{
private readonly LuxuryShippingCostCalculator _calculator = new(CreateDefaultProvider());
[Fact]
public void CarrierName()
{
_calculator.CarrierName.Should()
.NotBeNullOrWhiteSpace()
.And.Be("LuxuryShipping");
}
[Theory]
[MemberData(nameof(CalculateShippingCostsData))]
public void CalculateShippingCosts(string targetCountry, IMeasuredBox box, decimal? expectedCost)
{
decimal? shippingCosts = _calculator.CalculateShippingCosts(targetCountry, box);
if (expectedCost is null)
{
shippingCosts.Should().BeNull();
}
else
{
shippingCosts.Should().NotBeNull()
.And.Be(expectedCost);
}
}
public static TheoryData<string, IMeasuredBox, decimal?> CalculateShippingCostsData() =>
new()
{
{ "France", CreateBox(5, 10, 15, 2.2), 501.1875M },
{ "Brazil", CreateBox(30, 20, 10, 0.85), 4444M },
{ "Portugal", CreateBox(30, 20, 10, 0.85), null }
};
private static ICountryDistanceProvider CreateDefaultProvider()
{
const string France = "France";
const string Brazil = "Brazil";
var provider = Substitute.For<ICountryDistanceProvider>();
provider.IsPossibleCountry(Arg.Is<string>(c => c == France || c == Brazil))
.Returns(true);
provider.GetDistanceTo(Arg.Is(France))
.Returns(new CountryDistanceInformation(891, true, false));
provider.GetDistanceTo(Arg.Is(Brazil))
.Returns(new CountryDistanceInformation(7432, false, false));
return provider;
}
}