public void ProcessRule_returns_correct_values(Parcel parcel, decimal cost)
        {
            //Given
            var rules = new ParcelRuleCollection
            {
                ParcelRules = new List <ParcelRule>
                {
                    new ParcelRule {
                        Rate = 0, WeightLimit = 50, VolumeLimit = 0
                    },
                    new ParcelRule {
                        Rate = 15, WeightLimit = 10, VolumeLimit = 0
                    },
                    new ParcelRule {
                        Rate = 0.05M, WeightLimit = 0, VolumeLimit = 1500
                    },
                    new ParcelRule {
                        Rate = 0.04M, WeightLimit = 0, VolumeLimit = 2500
                    },
                    new ParcelRule {
                        Rate = 0.03M, WeightLimit = 0, VolumeLimit = 0
                    },
                }
            };

            var ruleProcessor = new ParcelRuleProcessor(rules);
            var sut           = ruleProcessor.FirstRule;

            //When
            var actual = sut.ProcessRule(parcel);

            //Then
            Assert.IsType <ParcelCost>(actual);
            Assert.Equal(cost, actual.CostOfDelivery);
        }
        public void FirstRule_returns_correct_firstHandler(ParcelRuleCollection rules, int firstPriority)
        {
            //Given
            var sut = new ParcelRuleProcessor(rules);

            //When
            var actual = sut.FirstRule;

            //Then
            Assert.IsAssignableFrom <ParcelRuleBase>(actual);
            Assert.Equal(firstPriority, actual.Priority);
        }