public void AddBook(NewBookDTO bookDto) { bool bookAlreadyExists; lock (newBookLock) { bookAlreadyExists = _booksDbSet .Any(book => (bookDto.Isbn != null && book.Code == bookDto.Isbn && book.OrganizationId == bookDto.OrganizationId) || (bookDto.Isbn == null && book.OrganizationId == bookDto.OrganizationId && book.Title == bookDto.Title)); _bookServiceValidator.CheckIfBookAlreadyExists(bookAlreadyExists); ValidateQuantifiedOffices(bookDto.QuantityByOffice.Select(o => o.OfficeId)); ValidateQuantitiesValues(bookDto.QuantityByOffice.Select(o => o.BookQuantity)); var newBook = MapNewBookToEntity(bookDto); _booksDbSet.Add(newBook); bookDto.QuantityByOffice .Where(office => office.BookQuantity > BookQuantityZero) .ForEach(office => _bookOfficesDbSet.Add(MapBookDtoToBookOfficeEntity(newBook, office, bookDto.UserId))); _uow.SaveChanges(false); } }
public void Should_Throw_On_Add_Book_If_Quantity_Is_Zero() { _booksDbSet.SetDbSetData(new List <Book>()); var offices = new List <Office>() { new Office() { Id = 1 } }; _officesDbSet.SetDbSetData(offices); var newBookDto = new NewBookDTO { Author = "test", Isbn = "123", OrganizationId = 2, Title = "test", QuantityByOffice = new List <NewBookQuantityDTO> { new NewBookQuantityDTO { OfficeId = 1, BookQuantity = 0 } }, UserId = "testUserId" }; Assert.Throws <BookException>(() => _bookService.AddBook(newBookDto)); }
public void Should_Create_New_Book_And_Book_Office() { MockCreateNewBook(); var newBookDto = new NewBookDTO { Author = "test", Isbn = "123", OrganizationId = 2, Title = "test", QuantityByOffice = new List <NewBookQuantityDTO> { new NewBookQuantityDTO { OfficeId = 1, BookQuantity = 0 }, new NewBookQuantityDTO { OfficeId = 2, BookQuantity = 5 } }, UserId = "testUserId" }; _bookService.AddBook(newBookDto); _booksDbSet.Received(1).Add(Arg.Any <Book>()); _bookOfficesDbSet.Received(1).Add(Arg.Any <BookOffice>()); }
public void Should_Throw_On_Add_Book_If_Incorrect_Office_Is_Provided() { _booksDbSet.SetDbSetData(new List <Book>()); _officesDbSet.SetDbSetData(new List <Office>()); var newBookDto = new NewBookDTO { Author = "test", Isbn = "123", OrganizationId = 2, Title = "test", QuantityByOffice = new List <NewBookQuantityDTO> { new NewBookQuantityDTO { OfficeId = 1, BookQuantity = 0 }, new NewBookQuantityDTO { OfficeId = 2, BookQuantity = 0 } }, UserId = "testUserId" }; Assert.Throws <ArgumentException>(() => _bookService.AddBook(newBookDto)); }
private Book MapNewBookToEntity(NewBookDTO bookDto) { return(new Book { Author = bookDto.Author, Code = bookDto.Isbn, Created = DateTime.UtcNow, CreatedBy = bookDto.UserId, Modified = DateTime.UtcNow, OrganizationId = bookDto.OrganizationId, Title = bookDto.Title, Url = bookDto.Url, ApplicationUserId = bookDto.OwnerId, Note = bookDto.Note }); }