コード例 #1
0
        public void IsInvalid_WhenEmailVerificationByTicket_IsNotAllowedPurpose(
            EmailVerificationPurpose entityPurpose, EmailVerificationPurpose allowedPurpose1, EmailVerificationPurpose?allowedPurpose2)
        {
            var ticket  = FakeData.String();
            var queries = new Mock <IProcessQueries>(MockBehavior.Strict);
            var command = new FakeMustBePurposedVerifyEmailTicketCommand
            {
                Ticket   = ticket,
                Purpose1 = allowedPurpose1,
                Purpose2 = allowedPurpose2,
            };
            var entity = new EmailVerification {
                Ticket = ticket, Purpose = entityPurpose,
            };
            Expression <Func <EmailVerificationBy, bool> > expectedQuery = x => x.Ticket == command.Ticket;

            queries.Setup(x => x.Execute(It.Is(expectedQuery)))
            .Returns(Task.FromResult(entity));
            var validator = new FakeMustBePurposedVerifyEmailTicketValidator(queries.Object);

            var result = validator.Validate(command);

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

            result.Errors.Count(ticketError).ShouldEqual(1);
            result.Errors.Single(ticketError).ErrorMessage.ShouldEqual(Resources
                                                                       .Validation_EmailVerificationTicket_IsWrongPurpose
                                                                       .Replace("{PropertyName}", EmailVerification.Constraints.Label.ToLower())
                                                                       );
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Once);
            validator.ShouldHaveValidationErrorFor(x => x.Ticket, command);
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Exactly(2));
        }
コード例 #2
0
        public void IsValid_WhenAllRulesPass(EmailVerificationPurpose purpose)
        {
            var queries   = new Mock <IProcessQueries>(MockBehavior.Strict);
            var validator = new ValidateSendVerificationEmailCommand(queries.Object);
            var command   = new SendVerificationEmail
            {
                EmailAddress     = "*****@*****.**",
                IsExpectingEmail = true,
                Purpose          = purpose,
                SendFromUrl      = "[send from this url]",
                VerifyUrlFormat  = "[here is the token:' {0}']",
            };
            Expression <Func <EmailAddressBy, bool> > expectedQuery = x => x.Value == command.EmailAddress;
            User user         = new ProxiedUser(FakeData.Id());
            var  emailAddress = new EmailAddress
            {
                Value = command.EmailAddress,
                User  = user,
            };

            queries.Setup(x => x.Execute(It.Is(expectedQuery))).Returns(Task.FromResult(emailAddress));

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
        }
コード例 #3
0
        public void IsValid_WhenEmailVerificationByTicket_IsAllowedPurpose(
            EmailVerificationPurpose entityPurpose, EmailVerificationPurpose allowedPurpose1, EmailVerificationPurpose?allowedPurpose2)
        {
            var ticket  = FakeData.String();
            var queries = new Mock <IProcessQueries>(MockBehavior.Strict);
            var command = new FakeMustBePurposedVerifyEmailTicketCommand
            {
                Ticket   = ticket,
                Purpose1 = allowedPurpose1,
                Purpose2 = allowedPurpose2,
            };
            var entity = new EmailVerification {
                Ticket = ticket, Purpose = entityPurpose,
            };
            Expression <Func <EmailVerificationBy, bool> > expectedQuery = x => x.Ticket == command.Ticket;

            queries.Setup(x => x.Execute(It.Is(expectedQuery)))
            .Returns(Task.FromResult(entity));
            var validator = new FakeMustBePurposedVerifyEmailTicketValidator(queries.Object);

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Once);
            validator.ShouldNotHaveValidationErrorFor(x => x.Ticket, command);
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Exactly(2));
        }
コード例 #4
0
 public void Query_Ctor_SetsProperties(EmailVerificationPurpose purpose)
 {
     var token = FakeData.String();
     var ticket = FakeData.String();
     var query = new EmailVerificationTokenIsValid(token, ticket, purpose);
     query.Token.ShouldEqual(token);
     query.Ticket.ShouldEqual(ticket);
     query.Purpose.ShouldEqual(purpose);
 }
コード例 #5
0
        public void Query_Ctor_SetsProperties(EmailVerificationPurpose purpose)
        {
            var token  = Guid.NewGuid().ToString();
            var ticket = Guid.NewGuid().ToString();
            var query  = new EmailVerificationTokenIsValid(token, ticket, purpose);

            query.Token.ShouldEqual(token);
            query.Ticket.ShouldEqual(ticket);
            query.Purpose.ShouldEqual(purpose);
        }
コード例 #6
0
        public void IsValid_WhenPurpose_IsNotInvalid(EmailVerificationPurpose purpose)
        {
            var command = new FakeMustBeValidVerifyEmailPurposeCommand {
                Purpose = purpose
            };
            var validator = new FakeMustBeValidVerifyEmailPurposeValidator();

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
            validator.ShouldNotHaveValidationErrorFor(x => x.Purpose, command.Purpose);
        }
コード例 #7
0
        public void Handler_ReturnsFalse_WhenTicketIsEmpty(EmailVerificationPurpose purpose, string ticket)
        {
            string token = FakeData.String();
            var command = new EmailVerificationTokenIsValid(token, ticket, purpose);
            var userStore = new Mock<IUserStore<UserTicket, string>>(MockBehavior.Strict);
            var userManager = new UserManager<UserTicket, string>(userStore.Object);
            var tokenProvider = new Mock<IUserTokenProvider<UserTicket, string>>(MockBehavior.Strict);
            Expression<Func<IUserTokenProvider<UserTicket, string>, Task<bool>>> expectedMethod =
                x => x.ValidateAsync(purpose.ToString(), token, userManager,
                    It.Is<UserTicket>(y => y.UserName == ticket));
            tokenProvider.Setup(expectedMethod)
                .Returns(Task.FromResult(true));
            userManager.UserTokenProvider = tokenProvider.Object;
            var handler = new HandleEmailVerificationTokenIsValidQuery(userManager);

            bool result = handler.Handle(command).Result;

            result.ShouldBeFalse();
            tokenProvider.Verify(expectedMethod, Times.Never);
        }
コード例 #8
0
        public void Handler_ReturnsFalse_WhenTicketIsEmpty(EmailVerificationPurpose purpose, string ticket)
        {
            string token         = Guid.NewGuid().ToString();
            var    command       = new EmailVerificationTokenIsValid(token, ticket, purpose);
            var    userStore     = new Mock <IUserStore <UserTicket, string> >(MockBehavior.Strict);
            var    userManager   = new UserManager <UserTicket, string>(userStore.Object);
            var    tokenProvider = new Mock <IUserTokenProvider <UserTicket, string> >(MockBehavior.Strict);
            Expression <Func <IUserTokenProvider <UserTicket, string>, Task <bool> > > expectedMethod =
                x => x.ValidateAsync(purpose.ToString(), token, userManager,
                                     It.Is <UserTicket>(y => y.UserName == ticket));

            tokenProvider.Setup(expectedMethod)
            .Returns(Task.FromResult(true));
            userManager.UserTokenProvider = tokenProvider.Object;
            var handler = new HandleEmailVerificationTokenIsValidQuery(userManager);

            bool result = handler.Handle(command).Result;

            result.ShouldBeFalse();
            tokenProvider.Verify(expectedMethod, Times.Never);
        }
コード例 #9
0
        public void IsValid_WhenAllRulesPass(EmailVerificationPurpose purpose)
        {
            var queries = new Mock<IProcessQueries>(MockBehavior.Strict);
            var validator = new ValidateSendVerificationEmailCommand(queries.Object);
            var command = new SendVerificationEmail
            {
                EmailAddress = "*****@*****.**",
                IsExpectingEmail = true,
                Purpose = purpose,
                SendFromUrl = "[send from this url]",
                VerifyUrlFormat = "[here is the token:' {0}']",
            };
            Expression<Func<EmailAddressBy, bool>> expectedQuery = x => x.Value == command.EmailAddress;
            User user = new ProxiedUser(FakeData.Id());
            var emailAddress = new EmailAddress
            {
                Value = command.EmailAddress,
                User = user,
            };
            queries.Setup(x => x.Execute(It.Is(expectedQuery))).Returns(Task.FromResult(emailAddress));

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
        }
コード例 #10
0
        public void IsInvalid_WhenPurpose_IsZero(EmailVerificationPurpose? purpose)
        {
            var queries = new Mock<IProcessQueries>(MockBehavior.Strict);
            var validator = new ValidateSendVerificationEmailCommand(queries.Object);
            var command = new SendVerificationEmail();
            if (purpose.HasValue) command.Purpose = purpose.Value;

            var result = validator.Validate(command);

            result.IsValid.ShouldBeFalse();
            Func<ValidationFailure, bool> targetError = x => x.PropertyName == command.PropertyName(y => y.Purpose);
            result.Errors.Count(targetError).ShouldEqual(1);
            result.Errors.Single(targetError).ErrorMessage.ShouldEqual(Resources.Validation_EmailVerificationPurpose_IsEmpty
                .Replace("{PropertyName}", EmailVerification.Constraints.Label.ToLower())
            );
        }
コード例 #11
0
 /// <summary>
 /// Verify that a given token is valid for an EmailVerification ticket and purpose.
 /// </summary>
 /// <param name="token">Token generated for the EmailVerification Ticket.</param>
 /// <param name="ticket">EmailVerification Ticket used to generate the Token.</param>
 /// <param name="purpose">Purpose of the EmailVerification Ticket.</param>
 public EmailVerificationTokenIsValid(string token, string ticket, EmailVerificationPurpose purpose)
 {
     Token   = token;
     Ticket  = ticket;
     Purpose = purpose;
 }