public void TestCreateProductRating_ShouldFactoryCreateCorrectly(int rating,
                                                                         string content,
                                                                         int productId,
                                                                         string userId)
        {
            var mockedUser = new Mock <User>();

            var mockedUserRepository = new Mock <IRepository <User> >();

            mockedUserRepository.Setup(x => x.GetById(It.IsAny <string>())).Returns(mockedUser.Object);

            var mockedProduct = new Mock <Product>();

            var mockedProductRepository = new Mock <IRepository <Product> >();

            mockedProductRepository.Setup(x => x.GetById(It.IsAny <int>())).Returns(mockedProduct.Object);

            var mockedProductRatingRepository = new Mock <IRepository <ProductRating> >();
            var mockedFactory    = new Mock <IProductRatingFactory>();
            var mockedUnitOfWork = new Mock <IUnitOfWork>();

            var service = new ProductRatingService(mockedUserRepository.Object,
                                                   mockedProductRepository.Object,
                                                   mockedProductRatingRepository.Object,
                                                   mockedUnitOfWork.Object,
                                                   mockedFactory.Object);

            service.CreateProductRating(rating, content, productId, userId);

            mockedFactory.Verify(x => x.CreateProductRating(rating, content, mockedProduct.Object, mockedUser.Object));
        }
        public void GetProductById_NonExistingItem_ReturnsEmpty()
        {
            string nonExistingId = "nonExistingId";
            var    result        = ProductRatingService.GetByProductId(nonExistingId);

            Assert.NotNull(result);
        }
        public void GetProductById_ExistingItem_ReturnsSameItem()
        {
            string testProductId = "testProductId";
            var    result        = ProductRatingService.GetByProductId(testProductId);

            Assert.NotNull(result);
            Assert.Equal(testProductId, result.ProductId);
        }
        public void TestConstructor_ShouldInitialiseCorrectly()
        {
            var mockedUserRepository          = new Mock <IRepository <User> >();
            var mockedProductRepository       = new Mock <IRepository <Product> >();
            var mockedProductRatingRepository = new Mock <IRepository <ProductRating> >();
            var mockedFactory    = new Mock <IProductRatingFactory>();
            var mockedUnitOfWork = new Mock <IUnitOfWork>();

            var service = new ProductRatingService(mockedUserRepository.Object,
                                                   mockedProductRepository.Object,
                                                   mockedProductRatingRepository.Object,
                                                   mockedUnitOfWork.Object,
                                                   mockedFactory.Object);

            Assert.IsNotNull(service);
        }
        public void TestCreateProductRating_ShouldCallUserRepositoryGetByIdCorrectly(int rating,
                                                                                     string content,
                                                                                     int productId,
                                                                                     string userId)
        {
            var mockedUserRepository          = new Mock <IRepository <User> >();
            var mockedProductRepository       = new Mock <IRepository <Product> >();
            var mockedProductRatingRepository = new Mock <IRepository <ProductRating> >();
            var mockedFactory    = new Mock <IProductRatingFactory>();
            var mockedUnitOfWork = new Mock <IUnitOfWork>();

            var service = new ProductRatingService(mockedUserRepository.Object,
                                                   mockedProductRepository.Object,
                                                   mockedProductRatingRepository.Object,
                                                   mockedUnitOfWork.Object,
                                                   mockedFactory.Object);

            service.CreateProductRating(rating, content, productId, userId);

            mockedUserRepository.Verify(x => x.GetById(userId), Times.Once);
        }
        public void GetProductById_Null_ThrowsArgumentNullException()
        {
            Action actual = () => ProductRatingService.GetByProductId(null);

            Assert.Throws <ArgumentNullException>(actual);
        }