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));
        }
        public void DoSumming_UsingMissingLeftOperand_DisplaysError()
        {
            SummingModel      summingModel      = new SummingModel();
            SummingController summingController = new SummingController();

            summingController.DoSumming(summingModel);
            Assert.IsTrue(summingController.ModelState.ContainsKey("LeftOperand"));
        }
        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"));
        }