public void Then_An_Error_Message_Should_Be_Displayed()
                    {
                        using (var stringWriter = new StringWriter())
                        {
                            Console.SetOut(stringWriter);

                            CarparkRateCalculationEngine.Main(new string[] { DateTime.Now.ToString(), "InvalidDate" });

                            var output = stringWriter.ToString();

                            Assert.AreEqual($"The exit date and time is not valid.{Environment.NewLine}", output);
                        }
                    }
            public void Then_An_Error_Message_Should_Be_Displayed()
            {
                using (var stringWriter = new StringWriter())
                {
                    Console.SetOut(stringWriter);

                    CarparkRateCalculationEngine.Main(new string[] { "argument1" });

                    var output = stringWriter.ToString();

                    Assert.AreEqual($"Please provide the exit date and time as the second argument.{Environment.NewLine}", output);
                }
            }
                        public void Then_An_Error_Message_Should_Be_Displayed()
                        {
                            var now = DateTime.Now;

                            using (var stringWriter = new StringWriter())
                            {
                                Console.SetOut(stringWriter);

                                CarparkRateCalculationEngine.Main(new string[] { now.ToString(), now.AddMinutes(-1).ToString() });

                                var output = stringWriter.ToString();

                                Assert.AreEqual($"The entry date and time should be earlier than the exit date and time.{Environment.NewLine}", output);
                            }
                        }
                            public void Then_The_Standard_Rate_Name_And_Price_Should_Be_Displayed()
                            {
                                var entryDateTime = TestUtilities.MapDayOfWeekToDate(DayOfWeek.Monday).AddHours(11).AddMinutes(30);

                                using (var stringWriter = new StringWriter())
                                {
                                    Console.SetOut(stringWriter);

                                    CarparkRateCalculationEngine.Main(new string[] { entryDateTime.ToString(), entryDateTime.ToString() });

                                    var output = stringWriter.ToString();

                                    Assert.AreEqual($"Rate: Standard Rate. Price: $5.00.{Environment.NewLine}", output);
                                }
                            }
                            public void Then_The_Early_Bird_Rate_Name_And_Price_Should_Be_Displayed(DayOfWeek dayOfWeek)
                            {
                                var entryDateTime = TestUtilities.MapDayOfWeekToDate(dayOfWeek).AddHours(new Random().Next(6, 9)).AddMinutes(new Random().Next(0, 60));
                                var exitDateTime  = TestUtilities.MapDayOfWeekToDate(dayOfWeek).AddHours(new Random().Next(15, 23)).AddMinutes(new Random().Next(0, 60)).AddMinutes(30);

                                using (var stringWriter = new StringWriter())
                                {
                                    Console.SetOut(stringWriter);

                                    CarparkRateCalculationEngine.Main(new string[] { entryDateTime.ToString(), exitDateTime.ToString() });

                                    var output = stringWriter.ToString();

                                    Assert.AreEqual($"Rate: Early Bird Rate. Price: $13.00.{Environment.NewLine}", output);
                                }
                            }
                            public void Then_The_Weekend_Rate_Name_And_Price_Should_Be_Displayed()
                            {
                                var entryDateTime = TestUtilities.MapDayOfWeekToDate(DayOfWeek.Sunday).AddHours(new Random().Next(0, 24)).AddMinutes(new Random().Next(0, 60));
                                var exitDateTime  = entryDateTime.AddMinutes(new Random().Next(0, (int)entryDateTime.AddDays(1).Date.Subtract(entryDateTime).TotalMinutes));

                                using (var stringWriter = new StringWriter())
                                {
                                    Console.SetOut(stringWriter);

                                    CarparkRateCalculationEngine.Main(new string[] { entryDateTime.ToString(), exitDateTime.ToString() });

                                    var output = stringWriter.ToString();

                                    Assert.AreEqual($"Rate: Weekend Rate. Price: $10.00.{Environment.NewLine}", output);
                                }
                            }