コード例 #1
0
        public ProductBuildingContext(
            ProductViewData productViewData, 
            ModelStateDictionary modelStateDictionary,
            HttpRequestBase httpRequestBase)
        {
            if (productViewData == null)
            {
                throw new ArgumentNullException("productViewData");
            }
            if (modelStateDictionary == null)
            {
                throw new ArgumentNullException("modelStateDictionary");
            }
            if (httpRequestBase == null)
            {
                throw new ArgumentNullException("httpRequestBase");
            }

            ProductViewData = productViewData;
            ModelStateDictionary = modelStateDictionary;
            HttpRequestBase = httpRequestBase;
        }
コード例 #2
0
        public Product ProductFromProductViewData(
            ProductViewData productViewData, 
            ModelStateDictionary modelStateDictionary, 
            HttpRequestBase httpRequestBase)
        {
            if (productViewData == null)
            {
                throw new ArgumentNullException("productViewData");
            }
            if (modelStateDictionary == null)
            {
                throw new ArgumentNullException("modelStateDictionary");
            }

            var context = new ProductBuildingContext(productViewData, modelStateDictionary, httpRequestBase);

            foreach (var contributor in contributors.OrderBy(x => x.Order))
            {
                if(!context.ModelStateDictionary.IsValid) continue;
                contributor.ContributeTo(context);
            }

            return context.Product;
        }
コード例 #3
0
    	public void NewWithPost_ShouldRenderViewWhenThereAreBindingErrors()
    	{
    		productController.ModelState.AddModelError("foo", "bar");
    		var product = new Product();
            var productViewData = new ProductViewData();
            productBuilder.Stub(
                x => x.ProductFromProductViewData(productViewData, productController.ModelState, productController.Request))
                .Return(product);

			productController.New(productViewData)
				.ReturnsViewResult()
				.ForView("Edit")
                .WithModel<ProductViewData>();
    	}
コード例 #4
0
    	public void NewWithPost_ShouldInsertNewProduct()
    	{
			var product = new Product { Id = 5};

            var productViewData = new ProductViewData();
            productBuilder.Stub(
                x => x.ProductFromProductViewData(productViewData, productController.ModelState, productController.Request))
                .Return(product);

			productController.New(productViewData)
				.ReturnsRedirectToRouteResult()
				.ToAction("Edit")
				.WithRouteValue("id", "5");

			productRepository.AssertWasCalled(x => x.SaveOrUpdate(product));
    	}
コード例 #5
0
    	public void EditWithPost_ShouldRenderViewWhenBindingFails()
    	{
			productController.ModelState.AddModelError("foo", "bar");
			var product = new Product();
            var productViewData = new ProductViewData();
            productBuilder.Stub(
                x => x.ProductFromProductViewData(productViewData, productController.ModelState, productController.Request))
                .Return(product);

			productController.Edit(productViewData)
				.ReturnsViewResult()
				.ForView("Edit")
                .WithModel<ProductViewData>()
				.AssertAreSame(productViewData, x => x);
    	}
コード例 #6
0
    	public void EditWithPost_ShouldRedirectOnSucessfulBinding()
    	{
			var product = new Product { Id = 5};
            var productViewData = new ProductViewData();
            productBuilder.Stub(
    	        x => x.ProductFromProductViewData(productViewData, productController.ModelState, productController.Request))
                .Return(product);

			productController.Edit(productViewData)
				.ReturnsRedirectToRouteResult()
				.ToAction("Edit")
				.WithRouteValue("id", "5");
    	}
コード例 #7
0
        public ActionResult Edit(ProductViewData productViewData)
		{
            var product = productBuilder.ProductFromProductViewData(productViewData, ModelState, Request);
		    if (ModelState.IsValid)
			{
				return this.RedirectToAction(x => x.Edit(product.Id));
			}
            return View("Edit", productViewData.WithErrorMessage("There were errors, please correct them and resubmit."));
		}
コード例 #8
0
		public ActionResult New(ProductViewData productViewData)
		{
		    var product = productBuilder.ProductFromProductViewData(productViewData, ModelState, Request);
		    if (ModelState.IsValid)
			{
				productRepository.SaveOrUpdate(product);
				uow.Commit(); //Need explicit commit in order to get the product id.
				return this.RedirectToAction(x => x.Edit(product.Id));
			}
            return View("Edit", productViewData.WithErrorMessage("There were errors, please correct them and resubmit."));
		}
コード例 #9
0
 public void SetUp()
 {
     productViewData = new ProductViewData();
     modelStateDictionary = new ModelStateDictionary();
 }