public void TestViewMyProductDetails_ServiceReturnsNull_ShouldNotCallFactoryCreateProductDetailsViewModel(int id)
        {
            var mockedView = new Mock <IProductDetailsView>();

            mockedView.Setup(v => v.Model).Returns(new ProductDetailsViewModel());

            var mockedProvider = new Mock <IAuthenticationProvider>();

            var mockedService = new Mock <IProductRatingService>();

            var mockedProductService = new Mock <IProductService>();
            var mockedFactory        = new Mock <IViewModelFactory>();

            var presenter = new ProductDetailsPresenter(mockedView.Object, mockedProductService.Object, mockedFactory.Object, mockedService.Object, mockedProvider.Object);

            var args = new ProductDetailsEventArgs(id);

            mockedView.Raise(v => v.MyProductDetails += null, args);

            mockedFactory.Verify(f => f.CreateProductDetailsViewModel(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(),
                                                                      It.IsAny <decimal>(),
                                                                      It.IsAny <double>(),
                                                                      It.IsAny <string>(),
                                                                      It.IsAny <string>(),
                                                                      It.IsAny <byte[]>()), Times.Never());
        }
        public void TestViewMyProductDetails_ServiceReturnsProduct_ShouldCallFactoryCreateProductDetailsViewModel(int id)
        {
            var mockedView = new Mock <IProductDetailsView>();

            mockedView.Setup(v => v.Model).Returns(new ProductDetailsViewModel());

            var mockedProvider = new Mock <IAuthenticationProvider>();

            var category = new Category();
            var product  = new Models.Product {
                Category = category
            };

            var mockedService = new Mock <IProductRatingService>();

            var mockedProductService = new Mock <IProductService>();

            mockedProductService.Setup(s => s.GetById(It.IsAny <int>()))
            .Returns(product);

            var mockedFactory = new Mock <IViewModelFactory>();

            var presenter = new ProductDetailsPresenter(mockedView.Object, mockedProductService.Object, mockedFactory.Object, mockedService.Object, mockedProvider.Object);

            var args = new ProductDetailsEventArgs(id);

            mockedView.Raise(v => v.MyProductDetails += null, args);

            mockedFactory.Verify(f => f.CreateProductDetailsViewModel(product.ProductId, product.Name, category.Name,
                                                                      product.Price,
                                                                      product.Volume,
                                                                      product.Maker,
                                                                      product.ImageMimeType,
                                                                      product.ImageBuffer), Times.Once);
        }
        public void TestViewMyProductDetails_ShouldCallServiceGetById(int id)
        {
            var mockedView = new Mock <IProductDetailsView>();

            mockedView.Setup(v => v.Model).Returns(new ProductDetailsViewModel());

            var mockedProvider = new Mock <IAuthenticationProvider>();

            var mockedService = new Mock <IProductRatingService>();

            var mockedProductService = new Mock <IProductService>();
            var mockedFactory        = new Mock <IViewModelFactory>();

            var presenter = new ProductDetailsPresenter(mockedView.Object, mockedProductService.Object, mockedFactory.Object, mockedService.Object, mockedProvider.Object);

            var args = new ProductDetailsEventArgs(id);

            mockedView.Raise(v => v.MyProductDetails += null, args);

            mockedProductService.Verify(s => s.GetById(id), Times.Once);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                ProductId = int.Parse(this.Request.QueryString[QueryId]);

                var args = new ProductDetailsEventArgs(ProductId);

                this.MyProductDetails?.Invoke(this, args);

                SqlCommand = string.Format(SqlCommandTemplate, ProductId);
            }
            catch (Exception)
            {
                this.ErrorLabel.Text = "Please provide an id";
                return;
            }

            this.SqlDataSourceComments.SelectCommand = SqlCommand;
            this.SqlDataSourceComments.DataBind();
            // TODO: Bind to model
        }