public void DoSumming_UsingRomanNumbersAsLeftAndRightOperand_DisplaysSummingResult()
 {
     SummingModel summingModel = new SummingModel {LeftOperand = "MD", RightOperand = "LX"};
     SummingController summingController = new SummingController();
     ViewResult viewResult = (ViewResult) summingController.DoSumming(summingModel);
     Assert.AreEqual("MDLX", viewResult.ViewBag.SummingResult);
 }
 public void DoSumming_UsingInvalidRomanNumberAsRightOperand_DisplaysError()
 {
     SummingModel summingModel = new SummingModel {LeftOperand = "MD", RightOperand = "IIII"};
     SummingController summingController = new SummingController();
     summingController.DoSumming(summingModel);
     Assert.IsTrue(summingController.ModelState.ContainsKey("RightOperand"));
 }
 public void DoSumming_UsingMissingRightOperand_DisplaysError()
 {
     SummingModel summingModel = new SummingModel {LeftOperand = "leftoperand"};
     SummingController summingController = new SummingController();
     summingController.DoSumming(summingModel);
     Assert.IsTrue(summingController.ModelState.ContainsKey("RightOperand"));
 }
        public ActionResult DoSumming(SummingModel model)
        {
            if (ModelState.IsValid)
            {
                bool hasErrors = false;
                RomanNumber leftOperand;
                RomanNumber rightOperand;

                if (!RomanNumber.TryParse(model.LeftOperand, out leftOperand))
                {
                    ModelState.AddModelError("LeftOperand", string.Format("'{0}' is not a valid Roman number", model.LeftOperand));
                    hasErrors = true;
                }

                if (!RomanNumber.TryParse(model.RightOperand, out rightOperand))
                {
                    ModelState.AddModelError("RightOperand", string.Format("'{0}' is not a valid Roman number", model.RightOperand));
                    hasErrors = true;
                }

                if (!hasErrors)
                {
                    Abacus abacus = new RomanAbacus(100); // Roman abacus wil be able to handle hundreds of thousands
                    ViewBag.SummingResult = abacus.PerformSumming(model.LeftOperand, model.RightOperand);
                }
            }

            InitSummingView();
            return View("Index", model);
        }