Esempio n. 1
0
        public void IsValid_WhenAllRulesPass()
        {
            var userName  = FakeData.String();
            var password  = FakeData.String();
            var queries   = new Mock <IProcessQueries>(MockBehavior.Strict);
            var validator = new ValidateSignInCommand(queries.Object);
            var command   = new SignIn {
                UserNameOrVerifiedEmail = userName, Password = password,
            };
            Expression <Func <IsPasswordVerified, bool> > passwordQuery = x =>
                                                                          x.UserNameOrVerifiedEmail == command.UserNameOrVerifiedEmail && x.Password == command.Password;

            queries.Setup(x => x.Execute(It.Is(passwordQuery))).Returns(Task.FromResult(true));
            Expression <Func <UserByNameOrVerifiedEmail, bool> > userQuery = x => x.NameOrEmail == command.UserNameOrVerifiedEmail;

            queries.Setup(x => x.Execute(It.Is(userQuery))).Returns(Task.FromResult(new User()));

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
            queries.Verify(x => x.Execute(It.Is(passwordQuery)), Times.Once);
            queries.Verify(x => x.Execute(It.Is(userQuery)), Times.AtLeastOnce);
        }
Esempio n. 2
0
        public void IsInvalid_WhenUserName_MatchesNoUserOrEmail()
        {
            const string userName  = "******";
            var          queries   = new Mock <IProcessQueries>(MockBehavior.Strict);
            var          validator = new ValidateSignInCommand(queries.Object);
            var          command   = new SignIn {
                UserNameOrVerifiedEmail = userName
            };
            Expression <Func <UserByNameOrVerifiedEmail, bool> > userById = x => x.NameOrEmail == command.UserNameOrVerifiedEmail;

            queries.Setup(x => x.Execute(It.Is(userById))).Returns(Task.FromResult(null as User));

            var result = validator.Validate(command);

            result.IsValid.ShouldBeFalse();
            Func <ValidationFailure, bool> targetError = x => x.PropertyName == command.PropertyName(y => y.UserNameOrVerifiedEmail);

            result.Errors.Count(targetError).ShouldEqual(1);
            result.Errors.Single(targetError).ErrorMessage
            .ShouldEqual(Resources.Validation_CouldNotFind
                         .Replace("{PropertyName}", string.Format("{0} or {1}", User.Constraints.NameLabel, EmailAddress.Constraints.Label).ToLower())
                         .Replace("{PropertyValue}", command.UserNameOrVerifiedEmail));
            queries.Verify(x => x.Execute(It.Is(userById)), Times.Once);
        }
Esempio n. 3
0
        public void AuthenticatesUser_UsingCommand_IsPersistent(bool isPersistent)
        {
            var command = new SignIn {
                UserNameOrVerifiedEmail = "username", Password = "******", IsPersistent = isPersistent
            };
            var user = new User {
                Name = command.UserNameOrVerifiedEmail
            };
            var userResult    = Task.FromResult(user);
            var queries       = new Mock <IProcessQueries>(MockBehavior.Strict);
            var userStore     = new Mock <IUserStore <User, int> >();
            var userManager   = new Mock <UserManager <User, int> >(userStore.Object);
            var authenticator = new Mock <IAuthenticate>(MockBehavior.Strict);
            var handler       = new HandleSignInCommand(queries.Object, userManager.Object, authenticator.Object);
            Expression <Func <UserByNameOrVerifiedEmail, bool> > userByNameOrVerifiedEmail = x => x.NameOrEmail == command.UserNameOrVerifiedEmail;

            queries.Setup(x => x.Execute(It.Is(userByNameOrVerifiedEmail))).Returns(userResult);
            userManager.Setup(x => x.FindAsync(command.UserNameOrVerifiedEmail, command.Password)).Returns(userResult);
            authenticator.Setup(x => x.SignOn(user, isPersistent)).Returns(Task.FromResult(0));

            handler.Handle(command).Wait();

            authenticator.Verify(x => x.SignOn(user, isPersistent), Times.Once);
        }