public static void Main()
        {
            ICalculateTollFees calculateTollFees = new CalculateTollFees();
            HandleInput        handleInput       = new HandleInput(calculateTollFees);

            fee = handleInput.RunTextFile(Path);

            Console.Write($"The total fee for valid dates the inputfile is {fee}");
        }
        public void SetStartingInterval_should_Change_to_date_if_startInterval_is_within_chargeble_hour_and_minutes()
        {
            //Arrange
            var sut              = new CalculateTollFees();
            var date             = new DateTime(2020, 4, 1).AddHours(7).AddMinutes(31);
            var startingInterval = new DateTime(2020, 4, 2).AddHours(6).AddMinutes(42);

            //Act
            var actual = sut.SetStartingInterval(startingInterval, date);

            //Assert
            actual.Should().Be(date);
        }
        public void If_startingInterval_and_dates_does_not_have_the_same_year_month_and_day_PassedTollSameDay_should_return_false()
        {
            //Arrange
            var sut              = new CalculateTollFees();
            var date             = new DateTime(2020, 4, 1).AddHours(7).AddMinutes(31);
            var startingInterval = new DateTime(2020, 4, 2).AddHours(9).AddMinutes(31);

            //Act
            var actual = sut.PassedTollSameDay(date, startingInterval);

            //Assert
            actual.Should().Be(false);
        }
        public void If_Input_in_Validate_Toll_Has_Length_of_one_and_TollFree_is_false_Fee_should_be_correct()
        {
            //Arrange
            var sut   = new CalculateTollFees();
            var fee   = CalculateTollFees.Price.MaxFee;
            var input = new DateTime[]
            {
                new DateTime(2020, 4, 1).AddHours(7).AddMinutes(31),
            };
            //Act
            var actual = sut.ValidateToll(input);

            //Assert
            sut.dailyFee.Should().Be((int)fee);
        }
        public void If_TollFree_is_false_CalculateTimeBetweenTollStops_should_calculate_correct_differnce_inMinutes()
        {
            //Arrange
            var sut   = new CalculateTollFees();
            var input = new DateTime[]
            {
                new DateTime(2020, 4, 1).AddHours(6).AddMinutes(59),
                new DateTime(2020, 4, 1).AddHours(7).AddMinutes(59),
            };
            //Act
            var actual = sut.ValidateToll(input);

            //Assert
            sut._minutesBetweenTollStops.Should().Be(60);
        }
        public void If__minutesBetweenTollStops_is_less_than_LimitToJustPayOneTollFee__fee_should_be_correct()
        {
            //Arrange
            var sut   = new CalculateTollFees();
            var fee   = CalculateTollFees.Price.MinFee;
            var input = new DateTime[]
            {
                new DateTime(2020, 4, 1).AddHours(8).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(8).AddMinutes(59),
            };
            //Act
            var actual = sut.ValidateToll(input);

            //Assert
            sut.dailyFee.Should().Be((int)fee);
        }
        public void If_TollFree_is_valid___fee_should_be_null()
        {
            //Arrange
            var sut   = new CalculateTollFees();
            var input = new DateTime[]
            {
                new DateTime(2020, 7, 10),
                new DateTime(2020, 4, 1).AddHours(5).AddMinutes(59),
                new DateTime(2020, 3, 1).AddHours(18).AddMinutes(31),
                new DateTime(2020, 3, 7).AddHours(6).AddMinutes(15),
                new DateTime(2020, 3, 6).AddHours(6).AddMinutes(15)
            };

            //Act
            sut.ValidateToll(input);
            //Assert
            sut.totalFee.Should().Be(0);
        }
        public void If__fee_is_equal_or_greater_than_Max_Amount__fee_should_be_equal_to_max_amount()
        {
            //Arrange
            var sut   = new CalculateTollFees();
            var input = new DateTime[]
            {
                new DateTime(2020, 4, 1).AddHours(7).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(8).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(9).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(10).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(11).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(12).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(13).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(14).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(15).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(16).AddMinutes(31),
                new DateTime(2020, 4, 1).AddHours(17).AddMinutes(31),
            };
            //Act
            var actual = sut.ValidateToll(input);

            //Assert
            sut.dailyFee.Should().Be(CalculateTollFees.MaxDailyTollFeeAmount);
        }