Exemplo n.º 1
0
        public async Task Should_Throw_Exception_Given_TimeEntry_Greater_Than_TimeExit()
        {
            var service   = new ParkingFeeCalculator(new InMemoryRepository(new InMemoryStore()));
            var timeEntry = DateTime.Now;
            var timeExit  = timeEntry.AddHours(-2);

            Func <Task> act = async() => await service.GetFeeAmount(timeEntry, timeExit);

            await act.Should()
            .ThrowAsync <ProcessException>()
            .WithMessage("Exit time is greater than entry time.");
        }
Exemplo n.º 2
0
        public async Task Should_Return_ExpectedFeeAmount_Given_TimeEntry_And_TimeExit(TestData testData)
        {
            var service   = new ParkingFeeCalculator(new InMemoryRepository(new InMemoryStore()));
            var timeEntry = DateTime.Now.DayOfTheWeek(testData.DayOfWeek)
                            .AddHours((double)testData.Duration.Min);
            var timeExit = DateTime.Now.DayOfTheWeek(testData.DayOfWeek)
                           .AddHours((double)testData.Duration.Max);

            var feeAmount = await service.GetFeeAmount(timeEntry, timeExit);

            feeAmount.Should().Be(testData.ExpectedPrice);
        }
Exemplo n.º 3
0
        public async Task Should_Throw_Exception_Given_No_DefaultFlatRate()
        {
            var store = new InMemoryStore();

            store.DefaultFlatRates.Clear();
            var repository = new InMemoryRepository(store);
            var service    = new ParkingFeeCalculator(repository);
            var timeEntry  = DateTime.Parse("2020-07-07").AddHours(10);
            var timeExit   = timeEntry.AddHours(4);

            Func <Task> act = async() => await service.GetFeeAmount(timeEntry, timeExit);

            await act.Should().ThrowAsync <ProcessException>().WithMessage("Internal data error.");
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            DateTime start;
            DateTime end;

            Console.WriteLine("Enter a Start date (Format: YYYY/MM/DD HH:MM): ");

            if (DateTime.TryParse(Console.ReadLine(), out start))
            {
                Console.WriteLine("The day of the week is: " + start.DayOfWeek);
            }
            else
            {
                Console.WriteLine("You have entered an incorrect start value.");
                Console.ReadLine();
                return;
            }

            Console.WriteLine("Enter a End date (Format: YYYY/MM/DD HH:MM): ");

            if (DateTime.TryParse(Console.ReadLine(), out end))
            {
                Console.WriteLine("The day of the week is: " + end.DayOfWeek);
            }
            else
            {
                Console.WriteLine("You have entered an incorrect Enddate value.");
                Console.ReadLine();
                return;
            }



            if (start < end)
            {
                Console.WriteLine("Start Date " + start.ToLongDateString() + " Time " + start.ToShortTimeString());
                Console.WriteLine("End Date " + end.ToLongDateString() + " Time " + end.ToShortTimeString());

                try

                {
                    var Api     = new ParkingFeeCalculator();
                    var charges = Api.CalculateParkingFee(start, end);


                    //Display all the applied rates when a car is parked for more than 1 day.
                    Console.WriteLine("============ Parking Rates Applied ===================");
                    foreach (var rate in charges.ApplicableRates)
                    {
                        Console.WriteLine($" Rate Name : {rate.Name} ||  Charge : {rate.Charge}  || {(rate.ActualDate.HasValue ? "On " + rate.ActualDate.Value.DayOfWeek.ToString() : string.Empty)}");
                    }
                    Console.WriteLine("=======================================================");
                    Console.WriteLine("=======================================================");
                    Console.WriteLine($"Total Charges : {charges.TotalCharge.ToString()}");
                    Console.WriteLine("=======================================================");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Fatal error occurred : { ex.Message}");
                    Console.ReadKey();
                    return;
                }
            }
            else
            {
                Console.WriteLine($"Start Date : {start} can not be greater than End Date : {end} ");
            }

            Console.ReadLine();
        }