/// <summary>
        /// Prints a list of sites matching given criteria
        /// </summary>
        /// <param name="startDate">Reservation start date</param>
        /// <param name="endDate">Reservation end date</param>
        /// <param name="campgrounds">List of campgrounds to search in</param>
        /// <param name="occupants">Required number of occupants</param>
        /// <param name="isAccessible">Desired handicap accessibility</param>
        /// <param name="RVLength">Length of RV </param>
        /// <param name="hasUtilities">Desired existance of utilities</param>
        /// <returns>The list of sites.</returns>
        private List <Site> PrintSiteList(DateTime startDate, DateTime endDate, List <Campground> campgrounds, int occupants, bool isAccessible, int RVLength, bool hasUtilities)
        {
            // Initialize working variables
            List <string> screenOutput = new List <string>();
            List <Site>   allSites     = new List <Site>();
            int           menuNumber   = 1;

            // Create a header and add it to the screen output
            string header = "Site No.  Max Occup.  Accessible?  Max RV Length  Utility  Cost";

            if (campgrounds.Count > 1)
            {
                header = "Campground".PadRight(32) + header;
            }
            header = "     " + header;
            screenOutput.Add(header);

            // Find each relevant site in each campsite
            foreach (Campground campground in campgrounds)
            {
                List <Site> sites = siteDAL.FindAvailableSites(startDate, endDate, campground, occupants, isAccessible, RVLength, hasUtilities);
                foreach (Site site in sites)
                {
                    // Creaete a line to display info about each site and add it to the screen output
                    string line = site.ToString() + CLIHelper.GetTripTotal(startDate, endDate, campground.DailyFee).ToString("C");

                    if (campgrounds.Count > 1)
                    {
                        line = campground.Name.PadRight(32) + line;
                    }
                    line = $"{menuNumber,2})  " + line;
                    screenOutput.Add(line);

                    // Add the site to the output list
                    allSites.Add(site);

                    // Increment the number next to the site
                    menuNumber++;
                }
            }

            // If there are sites, write them to the screen
            if (allSites.Count != 0)
            {
                foreach (string line in screenOutput)
                {
                    Console.WriteLine(line);
                }
            }
            Console.WriteLine();

            // Return the list of found sites
            return(allSites);
        }
        public void FindAvailableSitesAdvanced(int campgroundID, int expectedOutput)
        {
            // Arrange
            SiteDAL site = new SiteDAL(ConnectionString);

            // Act
            var listOfReservations = site.FindAvailableSites(new DateTime(2019, 6, 10), new DateTime(2019, 6, 15), new Campground()
            {
                CampgroundId = campgroundID
            }, 6, true, 0, false);

            // Assert
            Assert.AreEqual(expectedOutput, listOfReservations.Count);
        }
        public void FindAvailableSites(int campgroundID, int expectedOutput)
        {
            // Arrange
            SiteDAL site = new SiteDAL(ConnectionString);

            // Act
            var listOfReservations = site.FindAvailableSites(new DateTime(2018, 4, 25), new DateTime(2018, 6, 19), new Campground()
            {
                CampgroundId = campgroundID
            });

            // Assert
            Assert.AreEqual(expectedOutput, listOfReservations.Count);
        }