public void Handler_ReturnsNullUser_WhenFound_ByUnverifiedEmail()
        {
            var nameOrEmail = FakeData.Email();
            var query = new UserByNameOrVerifiedEmail(nameOrEmail);
            var queries = new Mock<IProcessQueries>(MockBehavior.Strict);
            Expression<Func<UserBy, bool>> expectedUserQuery =
                x => x.Name == nameOrEmail;
            queries.Setup(x => x.Execute(It.Is(expectedUserQuery)))
                .Returns(Task.FromResult(null as User));
            var user = new User { Name = FakeData.String(), };
            var emailAddress = new EmailAddress
            {
                Value = nameOrEmail,
                UserId = user.Id,
                User = user,
                IsVerified = false,
            };
            Expression<Func<EmailAddressBy, bool>> expectedEmailQuery =
                x => x.Value == nameOrEmail && x.IsVerified == true;
            queries.Setup(x => x.Execute(It.Is(expectedEmailQuery)))
                .Returns(Task.FromResult(emailAddress));
            var handler = new HandleUserByNameOrVerifiedEmailQuery(queries.Object);

            User result = handler.Handle(query).Result;

            result.ShouldBeNull();
            queries.Verify(x => x.Execute(It.Is(expectedUserQuery)), Times.Once);
            queries.Verify(x => x.Execute(It.Is(expectedEmailQuery)), Times.Once);
        }
        public void Handler_ReturnsNonNullUser_WhenFound_ByUserName()
        {
            var nameOrEmail = FakeData.Email();
            var query = new UserByNameOrVerifiedEmail(nameOrEmail);
            var queries = new Mock<IProcessQueries>(MockBehavior.Strict);
            var user = new User { Name = nameOrEmail, };
            Expression<Func<UserBy, bool>> expectedUserQuery =
                x => x.Name == nameOrEmail;
            queries.Setup(x => x.Execute(It.Is(expectedUserQuery)))
                .Returns(Task.FromResult(user));
            queries.Setup(x => x.Execute(It.IsAny<EmailAddressBy>()))
                .Returns(Task.FromResult(null as EmailAddress));
            var handler = new HandleUserByNameOrVerifiedEmailQuery(queries.Object);

            User result = handler.Handle(query).Result;

            result.ShouldNotBeNull();
            result.Name.ShouldEqual(nameOrEmail);
            queries.Verify(x => x.Execute(It.Is(expectedUserQuery)), Times.Once);
            queries.Verify(x => x.Execute(It.IsAny<EmailAddressBy>()), Times.Never);
        }
 public void Query_Ctor_SetsNameOrEmailProperty()
 {
     var nameOrEmail = FakeData.Email();
     var query = new UserByNameOrVerifiedEmail(nameOrEmail);
     query.NameOrEmail.ShouldEqual(nameOrEmail);
 }