public async Task AddOwnedBookAsync(IOwnedBook ownedBook, GoogleBooks googleBooks) { if (googleBooks is null) { throw new ArgumentNullException(nameof(googleBooks)); } var user = await _context.Users.SingleAsync(u => u.Id == ownedBook.OwnerId); var book = await _context.Books.SingleOrDefaultAsync(b => b.Isbn == ownedBook.Isbn.IsbnValue); if (book is null) { IBook bookObj = await googleBooks.GetBookFromIsbn(ownedBook.Isbn.IsbnValue); if (bookObj is null) { throw new AggregateException("Unable to retrieve book from Google Books."); } book = await AddBook(bookObj); } var ownedBookData = new OwnedBook() { User = user, Book = book, ConditionId = (int)ownedBook.Condition, AvailabilityStatusId = (int)ownedBook.Availability }; await _context.OwnedBooks.AddAsync(ownedBookData); }
public UsersController(IUserRepository usersRepo, IWishlistRepository wishlistRepo, IOwnedBookRepository ownedBookRepo, ILoanRepository loanRepo, GoogleBooks googleBooks) { _usersRepo = usersRepo; _wishlistRepo = wishlistRepo; _ownedBookRepo = ownedBookRepo; _loanRepo = loanRepo; _googleBooks = googleBooks; }
public async Task OwnedBookRepository_AddOwnedBook() { // arrange const int userId = 1; const string username = "******"; const string title = "The Martian"; const string author = "Beyonce"; long isbn = 9780804139038; using var contextFactory = new TestLooseLeafContextFactory(); using (LooseLeafContext arrangeContext = contextFactory.CreateContext()) { await contextFactory.CreateUser(arrangeContext, username); isbn = await contextFactory.CreateBook(arrangeContext, title, author); await arrangeContext.SaveChangesAsync(); } Mock <IIsbnData> mockIsbn = new Mock <IIsbnData>(); mockIsbn.Setup(x => x.IsbnValue).Returns(isbn); Mock <IBook> fakeBook = new Mock <IBook>(); fakeBook.Setup(x => x.Title).Returns(title); fakeBook.Setup(x => x.Author).Returns(author); fakeBook.Setup(x => x.Genres).Returns(new List <string>() { "Test" }); fakeBook.Setup(x => x.Isbn).Returns(isbn); Mock <IOwnedBook> fakeOwnedBook = new Mock <IOwnedBook>(); fakeOwnedBook.Setup(x => x.Availability).Returns(Availability.Available); fakeOwnedBook.Setup(x => x.Condition).Returns(PhysicalCondition.LikeNew); fakeOwnedBook.Setup(x => x.OwnerId).Returns(userId); fakeOwnedBook.Setup(x => x.Isbn).Returns(mockIsbn.Object); GoogleBooks googleBooks = new GoogleBooks(new HttpClient(), null); // act using (LooseLeafContext actContext = contextFactory.CreateContext()) { IOwnedBookRepository ownedBookRepo = new OwnedBookRepository(actContext); await ownedBookRepo.AddOwnedBookAsync(fakeOwnedBook.Object, googleBooks); await actContext.SaveChangesAsync(); } // assert using LooseLeafContext assertContext = contextFactory.CreateContext(); var ownedBook = await assertContext.OwnedBooks.Include(x => x.User).Include(x => x.Book).SingleAsync(); Assert.Equal(isbn, ownedBook.Book.Isbn); Assert.Equal(username, ownedBook.User.Username); }
public async Task <List <Book> > Get(string q) { var fetcher = new Fetcher(new HttpClient(), new JsonIO()); var googleBookJsonParser = new GoogleBookJsonParser(); var googleBooks = new GoogleBooks(fetcher, googleBookJsonParser); var books = await googleBooks.Search(q); return(books); }
public async Task GoogleBooks_GetBookByIsbn_GetIBook(long isbn, string expectedTitle) { // arrange HttpClient client = new HttpClient(); GoogleBooks googleBooks = new GoogleBooks(client, null); // act IBook data = await googleBooks.GetBookFromIsbn(isbn); // assert Assert.Equal(expectedTitle, data.Title); }
public async Task Start_Should_Exit_Given_2() { var mockFetchReturn = new JObject(); var googleBooks = new GoogleBooks(new FetcherMock(mockFetchReturn), new GoogleBookJsonParser()); var envExit = new EnvExitMock(); var appLoop = new AppLoop( new TextIOMock("2"), googleBooks, new BookStringFormatter(), envExit ); await appLoop.Start(); Assert.AreEqual(0, envExit.LastExitCode); Assert.AreEqual(1, envExit.ExitCallCount); }
public async Task Start_Should_Ask_To_Search_Given_1() { var mockFetchReturn = new JObject(); var googleBooks = new GoogleBooks(new FetcherMock(mockFetchReturn), new GoogleBookJsonParser()); var envExit = new EnvExitMock(); var textIO = new TextIOMock(new List <string> { "1", "a search term", "2" }); var appLoop = new AppLoop( textIO, googleBooks, new BookStringFormatter(), envExit ); await appLoop.Start(); int methodCallIdx = textIO.MockCalls.FindMethodCall("Prompt", "Enter search term..."); Assert.GreaterOrEqual(methodCallIdx, 0); }