예제 #1
0
        public static bool TryProcessRule(this ParcelRuleBase parcelRule, Parcel parcel, out decimal cost)
        {
            cost = 0;
            //No weight or volume limit. Price by volume only
            if (parcelRule.WeightLimit <= 0 && parcelRule.VolumeLimit <= 0)
            {
                cost = parcel.Volume() * parcelRule.Rate;
                return(true);
            }

            //Weight Limit. Price by weight
            if (parcelRule.WeightLimit > 0 && parcel.Weight > parcelRule.WeightLimit)
            {
                cost = parcel.Weight * parcelRule.Rate;
                return(true);
            }

            //Volume Limit. Price by volume
            if (parcelRule.VolumeLimit > 0 && parcel.Volume() < parcelRule.VolumeLimit)
            {
                cost = parcel.Volume() * parcelRule.Rate;
                return(true);
            }
            return(false);
        }
예제 #2
0
        public void TryProcessRule_returns_correct_cost(ParcelRuleBase parcelRule, Parcel parcel, decimal expectedCost)
        {
            //Given
            var sut = parcelRule;

            //When
            sut.TryProcessRule(parcel, out decimal cost);

            //Then
            Assert.Equal(expectedCost, cost);
        }