public void TestSearchLocationSpacesReturnAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            HomeMyDayDbContext context = new HomeMyDayDbContext(optionsBuilder.Options);

            context.Accommodations.Add(new Accommodation()
            {
                NotAvailableDates = new List <DateEntity>()
                {
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 11)
                    },
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 23)
                    },
                },
                Location   = "Amsterdam",
                MaxPersons = 4
            });

            context.SaveChanges();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            IEnumerable <Accommodation> searchResults = repository.Search("   Amsterdam   ", new DateTime(2017, 10, 11), new DateTime(2017, 10, 23), 4);

            Assert.NotEmpty(searchResults);
        }
        public void TestSearchDepartureAndArrivalReturnNoAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            HomeMyDayDbContext context = new HomeMyDayDbContext(optionsBuilder.Options);

            context.Accommodations.Add(new Accommodation()
            {
                NotAvailableDates = new List <DateEntity>()
                {
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 12)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 13)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 14)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 15)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 16)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 17)
                    },
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 18)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 19)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 20)
                    }, new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 21)
                    },
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 22)
                    },
                },
                Name       = "Amsterdam",
                MaxPersons = 4
            });

            context.SaveChanges();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            IEnumerable <Accommodation> searchResults = repository.Search("Amsterdam", new DateTime(2017, 10, 13), new DateTime(2017, 10, 19), 4);

            Assert.Empty(searchResults);
        }
        public void TestSearchReturnAfterDeparture()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            HomeMyDayDbContext       context    = new HomeMyDayDbContext(optionsBuilder.Options);
            IAccommodationRepository repository = new EFAccommodationRepository(context);

            Assert.Throws <ArgumentOutOfRangeException>(() => repository.Search("Amsterdam", new DateTime(2017, 10, 12), new DateTime(2017, 10, 11), 4));
        }
        public void TestSearchEmptyGuests()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            HomeMyDayDbContext       context    = new HomeMyDayDbContext(optionsBuilder.Options);
            IAccommodationRepository repository = new EFAccommodationRepository(context);

            Assert.Throws <ArgumentNullException>(() => repository.Search("Amsterdam", DateTime.Now, DateTime.Now, 0));
        }
        public void TestSearchDepartureAndArrivalReturnExistingAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            HomeMyDayDbContext context = new HomeMyDayDbContext(optionsBuilder.Options);

            context.Accommodations.Add(new Accommodation()
            {
                NotAvailableDates = new List <DateEntity>()
                {
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 11)
                    },
                    new DateEntity()
                    {
                        Date = new DateTime(2017, 10, 23)
                    },
                },
                Location   = "Amsterdam",
                MaxPersons = 4
            });

            context.SaveChanges();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            IEnumerable <Accommodation> searchResults = repository.Search("Amsterdam", new DateTime(2017, 10, 11), new DateTime(2017, 10, 23), 4);

            Assert.NotEmpty(searchResults);

            Accommodation firstResult = searchResults.FirstOrDefault();

            Assert.NotNull(firstResult);
            Assert.True(firstResult.MaxPersons == 4);
            Assert.True(firstResult.Location == "Amsterdam");
        }