public void ProperlyCompute_CompoundOrders(bool isSpeedy, decimal expectedTotal) { // arrange var smallParcelType = new MockSomethingSmallSizeParcel(); var weightBasedParcel = new MockWeightBasedParcel(); _mockParcelClassifier.Setup(p => p.ClassifyParcelBySize(It.IsAny <double>())) .Returns(smallParcelType); _mockParcelClassifier.Setup(p => p.ClassifyHeavyParcelByWeight(It.IsAny <double>())) .Returns(weightBasedParcel); var parcelOrder = new ParcelOrder { Speedy = isSpeedy, ParcelOrderItems = new List <ParcelOrderItem> { new ParcelOrderItem(1, 2, CalculationType.BySize), new ParcelOrderItem(1, 1, CalculationType.BySize), new ParcelOrderItem(1, 50, CalculationType.ByWeight), new ParcelOrderItem(1, 51, CalculationType.ByWeight) } }; // act var order = _parcelBuilder.BuildOrder(parcelOrder); // assert order.TotalCost.Should().Be(expectedTotal); }
[InlineData(5, 50, false, CalculationType.ByWeight, 100)] // cost would double coz discount is not supported public void ProperlyComputeCost(double size, double weight, bool isSpeedy, CalculationType calculationType, decimal expectedTotalCost) { // arrange var smallParcelType = new MockSomethingSmallSizeParcel(); var weightBasedParcel = new MockWeightBasedParcel(); _mockParcelClassifier.Setup(p => p.ClassifyParcelBySize(It.IsAny <double>())) .Returns(smallParcelType); _mockParcelClassifier.Setup(p => p.ClassifyHeavyParcelByWeight(It.IsAny <double>())) .Returns(weightBasedParcel); var parcelBuilderWithDiscount = new ParcelOrderBuilder(_mockParcelClassifier.Object, new DiscountCalculator(new List <IDiscount> { new MockDiscountConfiguration() })); var parcelOrder = new ParcelOrder { Speedy = isSpeedy, DiscountToApply = new List <DiscountTypes> { DiscountTypes.Small }, ParcelOrderItems = new List <ParcelOrderItem> { new ParcelOrderItem(size, weight, calculationType), new ParcelOrderItem(size, weight, calculationType) } }; // act var order = parcelBuilderWithDiscount.BuildOrder(parcelOrder); // assert order.TotalCost.Should().Be(expectedTotalCost); }