public void ThrowArgumentOutOfRangeException_WhenInvokedWithIncorrectBookId()
        {
            var mapperMock     = new Mock <IMapper>();
            var unitOfWorkMock = new Mock <IUnitOfWork>();

            var wishlistService = new WishlistService(unitOfWorkMock.Object, mapperMock.Object);

            Assert.ThrowsException <ArgumentOutOfRangeException>(() => wishlistService.AddBookToWishlist(-1, 1));
        }
        public void AddsBookToWishlist_WhenInvokedWithCorrectParams()
        {
            var mapperMock     = new Mock <IMapper>();
            var unitOfWorkMock = new Mock <IUnitOfWork>();
            var repoMock       = new Mock <IRepository <Wishlist> >();
            var repoMock1      = new Mock <IRepository <BookstoreUser> >();
            var author1        = new Author {
                Id = 1, AuthorName = "Author1"
            };
            var book1 = new Book()
            {
                Id         = 1,
                Isbn       = "123",
                Title      = "C# Unleashed",
                Author     = author1,
                CategoryId = 1,
            };
            var book2 = new Book()
            {
                Id         = 2,
                Isbn       = "12233",
                Title      = "Java Unleashed",
                Author     = author1,
                CategoryId = 2,
            };
            var books = new Collection <Book>()
            {
                book1, book2
            };
            var user1 = new BookstoreUser()
            {
                FirstName    = "Pesho",
                LastName     = "Petrov",
                Id           = 5,
                PasswordHash = "secret",
                Email        = "email",
                PhoneNumber  = "0888888",
                UserAddress  = "asd",
                UserName     = "******"
            };
            var wishlist = new Wishlist()
            {
                Books  = books,
                Id     = 1,
                User   = user1,
                UserId = 2
            };
            var wishlists = new List <Wishlist>()
            {
                wishlist
            };

            mapperMock.Setup(x =>
                             x.Map <List <WishlistViewModel> >(It.IsAny <List <Wishlist> >()))
            .Returns(new List <WishlistViewModel>());

            mapperMock.Setup(x =>
                             x.Map <List <BookViewModel> >(It.IsAny <List <Book> >()))
            .Returns(new List <BookViewModel>());

            repoMock.Setup(x => x.All()).Returns(wishlists.AsQueryable);

            unitOfWorkMock.Setup(x => x.Wishlists).Returns(repoMock.Object);
            unitOfWorkMock.Setup(x => x.Users).Returns(repoMock1.Object);
            unitOfWorkMock.Setup(x => x.Books.GetById(1)).Returns(book1);

            var wishlistService = new WishlistService(unitOfWorkMock.Object, mapperMock.Object);

            unitOfWorkMock.Object.Users.Add(user1);

            wishlistService.AddBookToWishlist(book1.Id, user1.Id);

            var actualBookCountInWishlist = wishlist.Books.Count;

            Assert.AreEqual(2, actualBookCountInWishlist);
        }