コード例 #1
0
        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);
        }
コード例 #2
0
 public UsersController(IUserRepository usersRepo, IWishlistRepository wishlistRepo, IOwnedBookRepository ownedBookRepo, ILoanRepository loanRepo, GoogleBooks googleBooks)
 {
     _usersRepo     = usersRepo;
     _wishlistRepo  = wishlistRepo;
     _ownedBookRepo = ownedBookRepo;
     _loanRepo      = loanRepo;
     _googleBooks   = googleBooks;
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }