public void CalculateCostOfOverweightedParcel()
        {
            var costCalculator = new OrderDeliveryCostCalculator(
                _sizeCalculatorMock.Object,
                _parcelCostCalculatorMock.Object,
                _weightLimitCalculatorMock.Object,
                _overweightFeeCalculatorMock.Object);

            var overweightedParcel = new Parcel(new ParcelSize(1, 1, 1), 10);

            var overweightFee = 5m;
            var weightLimit   = 5;

            _sizeCalculatorMock.Setup(c => c.CalculateParcelSizeFactor(It.IsAny <ParcelSize>())).Returns(ParcelSizeFactor.Small);
            _parcelCostCalculatorMock.Setup(c => c.CalculateDeliveryCost(It.IsAny <ParcelSizeFactor>())).Returns(0);
            _weightLimitCalculatorMock.Setup(c => c.CalculateWeightLimit(It.IsAny <ParcelSizeFactor>())).Returns(weightLimit);
            _overweightFeeCalculatorMock.Setup(c => c.CalculateOverWeightFee(It.IsAny <ParcelSizeFactor>())).Returns(overweightFee);

            var deliverCost = costCalculator.CalculateParcelCost(overweightedParcel);

            Assert.AreEqual((overweightedParcel.Weight - weightLimit) * overweightFee, deliverCost);
        }