public ActionResult Save(CreateAdvertisementView newAdvertisement)
 {
     log.Debug("Run Save(Advertisement newAdvertisement)");
     if (ValidateNewAdvertisement(newAdvertisement))
     {
         repository.CreateAdvertisement(new Advertisement(newAdvertisement.Name, newAdvertisement.Description, Int32.Parse(newAdvertisement.Price), DateTime.Now, new Contacts(newAdvertisement.Contacts)));
         return RedirectToAction("List", "Advertisements");
     }
     else
     {
         return View("Create", newAdvertisement);
     }
 }
        private bool ValidateNewAdvertisement(CreateAdvertisementView newAdvertisement)
        {
            bool newAdvertisementValid = true;

            newAdvertisementValid &= CheckRuleAndSetErrMessage(() => !String.IsNullOrWhiteSpace(newAdvertisement.Name), "Name", "Ведите заголовок объявления.");

            newAdvertisementValid &= CheckRuleAndSetErrMessage(() => !String.IsNullOrWhiteSpace(newAdvertisement.Description), "Description", "Ведите описание объявления.");

            long price = 0;
            bool priceIsNumber = CheckRuleAndSetErrMessage(() => long.TryParse(newAdvertisement.Price, out price), "Price", "Цена задаётся неотрицательным числом.");
            newAdvertisementValid &= priceIsNumber;
            if (priceIsNumber)
            {
                newAdvertisementValid &= CheckRuleAndSetErrMessage(() => price >= 0, "Price", "Цена должна быть неотрицательна.");
                var maxPrice = Int32.MaxValue;
                newAdvertisementValid &= CheckRuleAndSetErrMessage(() => price < maxPrice, "Price", String.Format("Система не может обработать цены выше {0}", maxPrice));
            }

            newAdvertisementValid &= CheckRuleAndSetErrMessage(() => !String.IsNullOrWhiteSpace(newAdvertisement.Contacts), "Contacts", "Укажите способ забрать товар или связаться с вами.");

            return newAdvertisementValid;
        }
        public void Save_SetValidAdv_ItsOkReturnListAdv()
        {
            var controller = new AdvertisementsController();

            var advertisementView = new CreateAdvertisementView()
            {
                Contacts = "т. 5745773",
                Description = "Пример",
                Name = "Пример",
                Price = "1000"
            };
            var result = controller.Save(advertisementView);

            Assert.IsInstanceOf<RedirectToRouteResult>(result);

            Assert.IsTrue((result as RedirectToRouteResult).RouteValues.TryGetValue("action", "List"), "Контроллер должен быть Advertisements");
            Assert.IsTrue((result as RedirectToRouteResult).RouteValues.TryGetValue("action", "List"), "Действие должно быть List");
        }
        public void Save_SetFailAdv_ItsOkReturnCreatePage()
        {
            var controller = new AdvertisementsController();

            var advertisementView = new CreateAdvertisementView();
            advertisementView.Price = "-1";
            var result = controller.Save(advertisementView);

            Assert.IsInstanceOf<CreateAdvertisementView>((result as ViewResult).Model);
        }