public void When_visiting_the_bing_dot_com_home_page__should_list_all_upcoming_developer_events()
        {
            //Arrange
            var seededEvent = new DeveloperEvent("event1", new DateTime(2012, 1, 1));
            Database.RunWithAnOpenConnection(x => x.Execute("INSERT INTO DeveloperEvents(EventName, EventDate) VALUES(@EventName, @EventDate)", seededEvent));
            var controller = new HomeController();

            //Act
            var result = controller.Index();

            //Assert
            Assert.IsNotNull(result.ViewBag.DeveloperEvents);
            Assert.IsTrue(result.ViewBag.DeveloperEvents is IEnumerable<DeveloperEvent>);
            var events = (IEnumerable<DeveloperEvent>)result.ViewBag.DeveloperEvents;
            Assert.AreEqual(1, events.Count());
            var developerEvent = events.First();
            Assert.AreEqual(seededEvent.EventName, developerEvent.EventName);
            Assert.AreEqual(seededEvent.EventDate, developerEvent.EventDate);
        }
        public RedirectToRouteResult AddDeveloperEvent(string name, string date)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                var routeValueDictionary = new RouteValueDictionary();
                routeValueDictionary.Add("errorMessage", "The developer event name is empty.");
                return RedirectToAction("Error", "Home", routeValueDictionary);
            }

            if (string.IsNullOrWhiteSpace(date))
            {
                var routeValueDictionary = new RouteValueDictionary();
                routeValueDictionary.Add("errorMessage", "The event date is blank.");
                return RedirectToAction("Error", "Home", routeValueDictionary);
            }

            DateTime dateTime;
            var success = DateTime.TryParse(date, out dateTime);
            if (!success)
            {
                var routeValueDictionary = new RouteValueDictionary();
                routeValueDictionary.Add("errorMessage", "The event date is unrecognizable. Please use the ISO date format (YYYY-MM-DD) to help our computer system out, thanks in advance.");
                return RedirectToAction("Error", "Home", routeValueDictionary);
            }

            var developerEvent = new DeveloperEvent(name.Trim(), dateTime);

            using (var connection = Database.CreateConnection())
            {
                connection.Open();
                var sql = "INSERT INTO DeveloperEvents(EventName, EventDate) VALUES (@EventName, @EventDate)";
                connection.Execute(sql, developerEvent);
            }

            return RedirectToAction("Index", "Home");
        }