public void ReaderService_AddAsync_ThrowsExceptionIfModelIsIncorrect()
        {
            //arrange
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork.Setup(m => m.ReaderRepository.AddAsync(It.IsAny <Reader>()));
            var readerService = new ReaderService(mockUnitOfWork.Object, UnitTestHelper.CreateMapperProfile());

            // Name is empty
            var reader = new ReaderModel {
                Name  = "", Email = "*****@*****.**",
                Phone = "999999999", Address = "Glasgow"
            };

            Assert.ThrowsAsync <LibraryException>(async() => await readerService.AddAsync(reader));

            // Email is empty
            reader.Name  = "Scrooge McDuck";
            reader.Email = "";
            Assert.ThrowsAsync <LibraryException>(async() => await readerService.AddAsync(reader));

            // Phone is empty
            reader.Email = "*****@*****.**";
            reader.Phone = "";
            Assert.ThrowsAsync <LibraryException>(async() => await readerService.AddAsync(reader));

            // Address is empty
            reader.Phone   = "999999999";
            reader.Address = "";
            Assert.ThrowsAsync <LibraryException>(async() => await readerService.AddAsync(reader));
        }
        public async Task ReaderService_AddAsync_AddModel()
        {
            //arrange
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork.Setup(m => m.ReaderRepository.AddAsync(It.IsAny <Reader>()));
            var readerService = new ReaderService(mockUnitOfWork.Object, UnitTestHelper.CreateMapperProfile());
            var newReader     = new ReaderModel()
            {
                Id      = 10,
                Name    = "Test_Adding",
                Email   = "*****@*****.**",
                Phone   = "123789456",
                Address = "Kyiv, 10"
            };

            //act
            await readerService.AddAsync(newReader);

            //assert
            mockUnitOfWork.Verify(x => x.ReaderRepository.AddAsync(
                                      It.Is <Reader>(r => r.Id == newReader.Id && r.Name == newReader.Name &&
                                                     r.Email == newReader.Email && r.ReaderProfile.Phone == newReader.Phone &&
                                                     r.ReaderProfile.Address == newReader.Address)), Times.Once);
            mockUnitOfWork.Verify(x => x.SaveAsync(), Times.Once);
        }