public ActionResult Edit(CharacterEditModel model)
        {
            var operationResult = characterOperationService.Save(model);
            if (operationResult.IsValid)
            {
                return RedirectToAction("Index");
            }

            operationResult.ToModelErrors(ModelState);
            return View(model);
        }
        public void Save_should_create_new_character()
        {
            var validationService = new Mock<IValidationService>();
            validationService.Setup(x => x.Validate(It.IsAny<CharacterEditModel>())).Returns(new List<ValidationError>());

            var characterDao = new Mock<ICharacterDao>();

            ICharacterOperationService operationService = new CharacterOperationService(validationService.Object, characterDao.Object);
            var model = new CharacterEditModel {Name = "Zeratul"};
            var result = operationService.Save(model);
            Assert.IsTrue(result.IsValid);
            characterDao.Verify(x => x.Load(It.IsAny<Guid>()), Times.Never);
            characterDao.Verify(x => x.Save(It.Is<Character>(c => ReferenceEquals(c.Name, model.Name))), Times.Once);
        }
        ValidationResult ICharacterOperationService.Save(CharacterEditModel model)
        {
            var validaitonErrors = validationService.Validate(model);
            if (validaitonErrors.Any())
            {
                return new ValidationResult(validaitonErrors);
            }

            var character = model.Id == Guid.Empty
                ? new Character() :
                characterDao.Load(model.Id);

            if (character == null)
            {
                throw new InvalidOperationException("Character does not exist anymore");
            }

            model.MapTo(ref character);
            characterDao.Save(character);

            return ValidationResult.Ok;
        }
 public ActionResult Add(CharacterEditModel model)
 {
     return Edit(model);
 }
 ICollection<ValidationError> IValidationService.Validate(CharacterEditModel model)
 {
     return characterEditModelValidator.Validate(model).Errors.ToValidationResultItem();
 }