public void IsInvalidWhen_PrincipalIdentityName_DoesNotMatchUser()
            {
                const string principalIdentityName = "*****@*****.**";
                var          principal             = principalIdentityName.AsPrincipal();
                var          command = new UpdateMyNameCommand
                {
                    Principal = principal,
                };
                var entities = new Mock <ICommandEntities>(MockBehavior.Strict).Initialize();

                entities.Setup(m => m.Query <User>()).Returns(new User[] { }.AsQueryable);
                var validator = new UpdateMyNameValidator(entities.Object);

                var results = validator.Validate(command);

                results.IsValid.ShouldBeFalse();
                results.Errors.Count.ShouldBeInRange(1, int.MaxValue);
                var error = results.Errors.SingleOrDefault(e => e.PropertyName == "Principal");

                error.ShouldNotBeNull();
                // ReSharper disable PossibleNullReferenceException
                error.ErrorMessage.ShouldEqual(string.Format(
                                                   ValidatePrincipal.FailedBecauseIdentityNameMatchedNoUser,
                                                   command.Principal.Identity.Name));
                // ReSharper restore PossibleNullReferenceException
            }
            public void IsValidWhen_DisplayName_IsNotEmpty()
            {
                var command = new UpdateMyNameCommand {
                    DisplayName = "Adam West"
                };
                var validator = new UpdateMyNameValidator(null);

                var results = validator.Validate(command);

                var error = results.Errors.SingleOrDefault(e => e.PropertyName == "DisplayName");

                error.ShouldBeNull();
            }
            public void IsInvalidWhen_DisplayName_IsWhiteSpace()
            {
                var command = new UpdateMyNameCommand {
                    DisplayName = "\t"
                };
                var validator = new UpdateMyNameValidator(null);

                var results = validator.Validate(command);

                results.IsValid.ShouldBeFalse();
                results.Errors.Count.ShouldBeInRange(1, int.MaxValue);
                var error = results.Errors.SingleOrDefault(e => e.PropertyName == "DisplayName");

                error.ShouldNotBeNull();
                // ReSharper disable PossibleNullReferenceException
                error.ErrorMessage.ShouldEqual(ValidatePerson.FailedBecauseDisplayNameWasEmpty);
                // ReSharper restore PossibleNullReferenceException
            }
            public void IsInvalidWhen_Principal_IsNull()
            {
                var command = new UpdateMyNameCommand
                {
                    Principal = null,
                };
                var validator = new UpdateMyNameValidator(null);

                var results = validator.Validate(command);

                results.IsValid.ShouldBeFalse();
                results.Errors.Count.ShouldBeInRange(1, int.MaxValue);
                var error = results.Errors.SingleOrDefault(e => e.PropertyName == "Principal");

                error.ShouldNotBeNull();
                // ReSharper disable PossibleNullReferenceException
                error.ErrorMessage.ShouldEqual(ValidatePrincipal.FailedBecausePrincipalWasNull);
                // ReSharper restore PossibleNullReferenceException
            }
            public void IsValidWhen_PrincipalIdentityName_MatchesUser()
            {
                const string principalIdentityName = "*****@*****.**";
                var          principal             = principalIdentityName.AsPrincipal();
                var          command = new UpdateMyNameCommand
                {
                    Principal = principal,
                };
                var user = new User
                {
                    Name = principal.Identity.Name,
                };
                var entities = new Mock <ICommandEntities>(MockBehavior.Strict).Initialize();

                entities.Setup(m => m.Query <User>()).Returns(new[] { user }.AsQueryable);
                var validator = new UpdateMyNameValidator(entities.Object);

                var results = validator.Validate(command);

                var error = results.Errors.SingleOrDefault(e => e.PropertyName == "Principal");

                error.ShouldBeNull();
            }