// [TestMethod]
        public void ShouldSetIsValid()
        {
            var wrapper = new ClienteWrapper(_cliente);

            Assert.IsTrue(wrapper.IsValid);

            wrapper.Nome = "";
            Assert.IsFalse(wrapper.IsValid);

            wrapper.Nome = "Julia";
            Assert.IsTrue(wrapper.IsValid);
        }
        public void ShouldSetErrorsAndIsValidAfterInitialization()
        {
            _cliente.Nome = "";
            var wrapper = new ClienteWrapper(_cliente);

            Assert.IsFalse(wrapper.IsValid);
            Assert.IsTrue(wrapper.HasErrors);

            var errors = wrapper.GetErrors(nameof(wrapper.Nome)).Cast <string>().ToList();

            Assert.AreEqual(1, errors.Count);
            Assert.AreEqual("Nome requerido", errors.First());
        }
        //  [TestMethod]
        public void ShouldReturnValidationErrorIfFirstNameIsEmpty()
        {
            var wrapper = new ClienteWrapper(_cliente);

            Assert.IsFalse(wrapper.HasErrors);

            wrapper.Nome = "";
            Assert.IsTrue(wrapper.HasErrors);

            var errors = wrapper.GetErrors(nameof(wrapper.Nome)).Cast <string>().ToList();

            Assert.AreEqual(1, errors.Count);
            Assert.AreEqual("Firstname is required", errors.First());

            wrapper.Nome = "Julia";
            Assert.IsFalse(wrapper.HasErrors);
        }
        // [TestMethod]
        public void ShouldRefreshErrorsAndIsValidWhenRejectingChanges()
        {
            var wrapper = new ClienteWrapper(_cliente);

            Assert.IsTrue(wrapper.IsValid);
            Assert.IsFalse(wrapper.HasErrors);

            wrapper.Nome = "";

            Assert.IsFalse(wrapper.IsValid);
            Assert.IsTrue(wrapper.HasErrors);

            wrapper.RejectChanges();

            Assert.IsTrue(wrapper.IsValid);
            Assert.IsFalse(wrapper.HasErrors);
        }
        public void ShouldRaisePropertyChangedEventForIsValid()
        {
            var fired   = false;
            var wrapper = new ClienteWrapper(_cliente);

            wrapper.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(wrapper.IsValid))
                {
                    fired = true;
                }
            };

            wrapper.Nome = "";
            Assert.IsTrue(fired);

            fired        = false;
            wrapper.Nome = "Julia";
            Assert.IsTrue(fired);
        }
        public void ShouldRaiseErrorsChangedEventWhenFirstNameIsSetToEmptyAndBack()
        {
            var fired   = false;
            var wrapper = new ClienteWrapper(_cliente);

            wrapper.ErrorsChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(wrapper.Nome))
                {
                    fired = true;
                }
            };

            wrapper.Nome = "";
            Assert.IsTrue(fired);

            fired        = false;
            wrapper.Nome = "Julia";
            Assert.IsTrue(fired);
        }