public void ProperlyGenerateOrderLines()
        {
            // arrange
            var smallParcelType = new MockSomethingSmallSizeParcel();

            _mockParcelClassifier.Setup(p => p.ClassifyParcelBySize(It.IsAny <double>()))
            .Returns(smallParcelType);

            var parcelOrder = new ParcelOrder
            {
                ParcelOrderItems = new List <ParcelOrderItem>
                {
                    new ParcelOrderItem(5, 1, CalculationType.BySize)
                },
            };

            // act
            var order = _parcelBuilder.BuildOrder(parcelOrder);


            // assert
            order.LineItems.Count.Should().Be(1);
            order.LineItems.Single().Cost.Should().Be(smallParcelType.Cost);
            order.LineItems.Single().ParcelType.Should().Be(smallParcelType.ParcelType.ToString());
        }
        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);
        }
Exemple #3
0
        public void ProperlyDetermine_CorrectCost_By_ParcelSize()
        {
            // arrange
            var smallParcel = new MockSomethingSmallSizeParcel();

            // act
            var parcel = _parcelClassifier.ClassifyParcelBySize(5);

            // assert
            parcel.Should().BeEquivalentTo(smallParcel);
        }
        public void ProperlyComputeWeightAddOn()
        {
            // arrange
            var smallParcelType = new MockSomethingSmallSizeParcel();

            _mockParcelClassifier.Setup(p => p.ClassifyParcelBySize(It.IsAny <double>()))
            .Returns(smallParcelType);

            var parcelOrder = new ParcelOrder
            {
                ParcelOrderItems = new List <ParcelOrderItem>
                {
                    new ParcelOrderItem(5, 2, CalculationType.BySize),
                    new ParcelOrderItem(5, 1, CalculationType.BySize)
                }
            };

            // act
            var order = _parcelBuilder.BuildOrder(parcelOrder);

            // assert
            order.TotalCost.Should().Be(24);
        }
        [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);
        }