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

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

            Accommodation existingAccommodation = new Accommodation()
            {
                Id          = 2,
                Description = DEFAULT_ACCOMMODATION_DESCRIPTION,
                Name        = "Example Name",
                Country     = "Unknown",
                MaxPersons  = 2
            };

            await context.Accommodations.AddAsync(existingAccommodation);

            await context.SaveChangesAsync();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            // Change some values
            Accommodation accommodationToUpdate = new Accommodation()
            {
                Id          = 3,
                Country     = "The Netherlands",
                Name        = "Updated name",
                Description = "Updated description",
                MaxPersons  = 2
            };

            await Assert.ThrowsAsync <DbUpdateConcurrencyException>(() => repository.Save(accommodationToUpdate));
        }
        public async void TestSaveNullAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

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

            context.Accommodations.AddRange(
                new Accommodation()
            {
                Description = DEFAULT_ACCOMMODATION_DESCRIPTION
            }
                );

            await context.SaveChangesAsync();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            await Assert.ThrowsAsync <ArgumentNullException>(() => repository.Save(null));
        }
        public async void TestSaveUpdatedAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

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

            Accommodation accommodationToUpdate = new Accommodation()
            {
                Id          = 1,
                Description = DEFAULT_ACCOMMODATION_DESCRIPTION,
                Name        = "Example Name",
                Country     = "Unknown",
                MaxPersons  = 2
            };

            await context.Accommodations.AddAsync(accommodationToUpdate);

            await context.SaveChangesAsync();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            // Change some values
            accommodationToUpdate.Country     = "The Netherlands";
            accommodationToUpdate.Name        = "Updated name";
            accommodationToUpdate.Description = "Updated description";

            await repository.Save(accommodationToUpdate);

            // Check if the item was updated
            Accommodation updatedAccommodation = await context.Accommodations.FindAsync((long)1);

            Assert.NotNull(updatedAccommodation);
            Assert.Equal("Updated name", updatedAccommodation.Name);
            Assert.Equal("The Netherlands", updatedAccommodation.Country);
            Assert.Equal("Updated description", updatedAccommodation.Description);
            Assert.Equal(2, updatedAccommodation.MaxPersons);
        }
        public async void TestSaveNewAccommodation()
        {
            var optionsBuilder = new DbContextOptionsBuilder <HomeMyDayDbContext>();

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

            context.Accommodations.AddRange(
                new Accommodation()
            {
                Description = DEFAULT_ACCOMMODATION_DESCRIPTION
            }
                );

            await context.SaveChangesAsync();

            IAccommodationRepository repository = new EFAccommodationRepository(context);

            Accommodation accommodationToCreate = new Accommodation()
            {
                Description = DEFAULT_ACCOMMODATION_DESCRIPTION,
                Name        = "Example Name",
                Country     = "Unknown"
            };

            await repository.Save(accommodationToCreate);

            // Check if the item was created
            Accommodation foundAccommodation = await context.Accommodations.FirstOrDefaultAsync(x => x.Name == "Example Name");

            Assert.NotNull(foundAccommodation);
            Assert.Equal("Example Name", foundAccommodation.Name);
            Assert.NotEqual(0, foundAccommodation.Id);
            Assert.Equal("Unknown", foundAccommodation.Country);
            Assert.Equal(DEFAULT_ACCOMMODATION_DESCRIPTION, foundAccommodation.Description);
        }