public async Task InsertAsyncTest_NullBookCopy_ExceptionalCase()
        {
            //arrange
            _mapper.WithMap(BookCopyMapTestUtils.GenerateValidBookCopyMap());
            _access.WithInsertResult(true);

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.InsertAsync(null);

            //assert
            Assert.IsFalse(result);
            _access.Verify(m => m.InsertOneAsync(It.IsAny <BookCopyMap>()), Times.Never);
        }
        public async Task GetAllAsync_HappyPath()
        {
            //arrange
            _access.WithGetAllAsyncResult(BookCopyMapTestUtils.GenerateValidBookCopyMapEnumerable());
            _mapper.WithUnmap(BookCopyTestUtils.GenerateValidBookCopy());

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.GetAllAsync();

            //assert
            Assert.IsNotNull(result);
            _access.Verify(m => m.SelectAllAsync(), Times.Once);
        }
        public async Task InsertAsyncTest_ValidBookCopy_HappyPath()
        {
            //arrange
            _mapper.WithMap(BookCopyMapTestUtils.GenerateValidBookCopyMap());
            _access.WithInsertResult(true);

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.InsertAsync(BookCopyTestUtils.GenerateValidBookCopy());

            //assert
            Assert.IsTrue(result);
            _access.Verify(m => m.InsertOneAsync(It.IsAny <BookCopyMap>()), Times.Once);
        }
        public async Task GetWithIsbnAsync_NullIsbn_Fails()
        {
            //arrange
            var invalidBooks = BookCopyMapTestUtils.GenerateValidBookCopyMapEnumerable();

            _access.WithGetByIsbnAsyncResult(invalidBooks);

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.GetByIsbnAsync(null);

            //assert
            _access.Verify(m => m.GetByIsbnAsync(It.IsAny <string>()), Times.Never);
            Assert.IsNull(result);
        }
        public async Task GetAsyncTest_ValidId_HappyPath()
        {
            //arrange
            const int validId = 25;

            _access.WithGetByIdAsyncResult(BookCopyMapTestUtils.GenerateValidBookCopyMap() as IBookCopyMap);
            _mapper.WithUnmap(BookCopyTestUtils.GenerateValidBookCopy());

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.GetAsync(validId);

            //assert
            Assert.IsNotNull(result);
            _access.Verify(m => m.GetByIdAsync(It.IsAny <int>()), Times.Once);
        }
        public async Task GetWithIsbnAsync_ValidIsbn_HappyPath()
        {
            //arrange
            var validBooks = BookCopyMapTestUtils.GenerateValidBookCopyMapEnumerable();
            var isbn       = BookTestUtils.GenerateValidBook().Isbn;

            _access.WithGetByIsbnAsyncResult(validBooks);

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.GetByIsbnAsync(isbn);

            //assert
            _access.Verify(m => m.GetByIsbnAsync(It.IsAny <string>()), Times.Once);
            Assert.IsNotNull(result);
        }
        public async Task GetByIdAsync_NegativeBookCopyId_ExceptionalCase()
        {
            //arrange
            const int invalidId = -10;

            _access.WithGetByIdAsyncResult(BookCopyMapTestUtils.GenerateValidBookCopyMap() as IBookCopyMap);
            _mapper.WithUnmap(BookCopyTestUtils.GenerateValidBookCopy());

            _sut = new BookCopyRepository(_access.Object, _mapper.Object);

            //act
            var result = await _sut.GetByIdAsync(invalidId);

            //assert
            Assert.IsNull(result);
            _access.Verify(m => m.GetByIdAsync(It.IsAny <int>()), Times.Never);
        }