public void GetTollFee_Handle_Date_With_Same_Month()
        {
            var expectedTollFee = 10;
            var monthNumber     = 5;
            var vehicle         = new Mock <IVehicle>();
            var date            = new DateTime(2018, monthNumber, 22, 1, 1, 1);
            var checkDate       = date.AddHours(1);
            var rule            = new MonthRule(expectedTollFee, monthNumber);

            var actualTollFee = rule.GetTollFee(vehicle.Object, checkDate);

            Assert.Equal(expectedTollFee, actualTollFee, 0);
        }
        public void GetTollFee_Do_Not_Handle_Date_With_Other_Month()
        {
            var expectedNextTollFee = 20;
            var monthNumber         = 5;
            var handledDate         = new DateTime(2018, monthNumber, 22);
            var checkedDate         = handledDate.AddMonths(1);

            var vehicle  = new Mock <IVehicle>();
            var nextRule = new Mock <IRule>();

            nextRule.Setup(r => r.GetTollFee(vehicle.Object, checkedDate))
            .Returns(expectedNextTollFee);

            var rule = new MonthRule(0, monthNumber);

            rule.SetNextRule(nextRule.Object);

            var actualTollFee = rule.GetTollFee(vehicle.Object, checkedDate);

            Assert.Equal(expectedNextTollFee, actualTollFee, 0);
        }