public async Task CreateAsyncReturnsTheRightId()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            var audio1 = new AudioFile
            {
                Title  = "Audio1",
                Url    = "sdsdffsdf1",
                BookId = bookId,
            };

            await repository.AddAsync(audio1);

            await repository.SaveChangesAsync();

            var expectedId = 2;
            var actualId   = await service.CreateAsync("Audio2", "asdsad2", bookId);

            Assert.Equal(expectedId, actualId);
        }
        public async Task IncrementViewsShouldIncrement()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            var audio = new AudioFile
            {
                Title  = "Audio",
                Url    = "sdsdffsdf",
                BookId = bookId,
            };

            await repository.AddAsync(audio);

            await repository.SaveChangesAsync();

            await service.IncrementViews(audio.Id);

            await service.IncrementViews(audio.Id);

            await service.IncrementViews(audio.Id);

            await service.IncrementViews(audio.Id);

            var expectedViewsCount = 4;

            Assert.Equal(expectedViewsCount, audio.Views);
        }
        public async Task EditAsyncChangesTitle()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            var audio1 = new AudioFile
            {
                Title  = "Audio1",
                Url    = "sdsdffsdf1",
                BookId = bookId,
            };

            await repository.AddAsync(audio1);

            await repository.SaveChangesAsync();

            await service.EditAsync(audio1.Id, "New Audio Title");

            var expectedTitle = "New Audio Title";

            var actualTitle = repository.All().Where(x => x.Id == audio1.Id).FirstOrDefault();

            Assert.Equal(expectedTitle, actualTitle.Title);
        }
        public async Task DeleteAsyncDeletesOneAudioFile()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            var audio1 = new AudioFile
            {
                Title  = "Audio1",
                Url    = "sdsdffsdf1",
                BookId = bookId,
            };

            var audio2 = new AudioFile
            {
                Title  = "Audio2",
                Url    = "sdsdffsdf2",
                BookId = bookId,
            };

            var audio3 = new AudioFile
            {
                Title  = "Audio3",
                Url    = "sdsdffsdf3",
                BookId = bookId,
            };

            await repository.AddAsync(audio1);

            await repository.AddAsync(audio2);

            await repository.AddAsync(audio3);

            await repository.SaveChangesAsync();

            await service.DeleteAsync(audio1.Id);

            var expectedCount = 2;
            var actualCount   = repository.All().Count();

            Assert.Equal(expectedCount, actualCount);
        }
        public async Task DeleteAsyncDeletesTheRightFile()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            var audio1 = new AudioFile
            {
                Title  = "Audio1",
                Url    = "sdsdffsdf1",
                BookId = bookId,
            };

            var audio2 = new AudioFile
            {
                Title  = "Audio2",
                Url    = "sdsdffsdf2",
                BookId = bookId,
            };

            var audio3 = new AudioFile
            {
                Title  = "Audio3",
                Url    = "sdsdffsdf3",
                BookId = bookId,
            };

            await repository.AddAsync(audio1);

            await repository.AddAsync(audio2);

            await repository.AddAsync(audio3);

            await repository.SaveChangesAsync();

            await service.DeleteAsync(audio1.Id);

            var actualAudioFile = repository.All().Where(x => x.Id == audio1.Id).FirstOrDefault();

            Assert.Null(actualAudioFile);
        }
        public async Task CreateAsyncAddsThreeAudioFilesToBook()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <AudioFile>(dbContext);
            var service    = new AudioFilesService(repository);

            var bookId = 5;

            await service.CreateAsync("1", "asdafdsfadfsdf1", bookId);

            await service.CreateAsync("2", "asdafdsfadfsdf2", bookId);

            await service.CreateAsync("3", "asdafdsfadfsdf3", bookId);

            var expectedCount = 3;
            var actualCount   = repository.All().Count();

            Assert.Equal(expectedCount, actualCount);
        }