public async Task CheckedOutBooksReturnsSuccess() { var bookServiceMock = new Mock<IBooksService>(); var checkedOutBook = new CheckedOutBookDTO { State = CheckedOutBookState.Success }; bookServiceMock.Setup(bs => bs.CheckOutBook(It.IsAny<int>())) .ReturnsAsync(checkedOutBook); var controller = new BooksController(bookServiceMock.Object); var result = await controller.CheckoutBook(1) as OkResult; Assert.IsNotNull(result); }
public async Task<CheckedOutBookDTO> CheckOutBook(int bookId) { var userId = _userService.UserId; var book = await _repository.GetBook(bookId); if (book == null) { return new CheckedOutBookDTO { State = CheckedOutBookState.BookNotFound }; } var checkedOutBookDTO = new CheckedOutBookDTO { Author = book.Author, BookId = book.BookId, Title = book.Title }; var booksCheckedOut = await _repository.GetCheckedOutBooks(userId); if (booksCheckedOut != null && booksCheckedOut.Count() >= 3) { checkedOutBookDTO.State = CheckedOutBookState.TooManyBooksCheckedOut; return checkedOutBookDTO; } var physicalBookToCheckOut = book.PhysicalBooks.FirstOrDefault(pb => pb.UserId == null); if (physicalBookToCheckOut == null) { checkedOutBookDTO.State = CheckedOutBookState.BookIsNotAvailable; return checkedOutBookDTO; } await _repository.CheckoutBook(physicalBookToCheckOut, userId); checkedOutBookDTO.State = CheckedOutBookState.Success; checkedOutBookDTO.PhysicalBookId = physicalBookToCheckOut.Id; return checkedOutBookDTO; }