public void Handler_ReturnsNullLocalMembership_WhenNotFound_ByUserName()
        {
            var userName = FakeData.String();
            var user     = new User {
                Name = FakeData.String(),
            };
            var data = new[]
            {
                new LocalMembership {
                    User = user,
                },
            }.AsQueryable();
            var query     = new LocalMembershipByUser(userName);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByUserQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
        public void Handler_ReturnsNullLocalMembership_WhenNotFound_ByUserLoginInfo()
        {
            var loginProvider = FakeData.String();
            var providerKey   = FakeData.String();
            var userLoginInfo = new UserLoginInfo(loginProvider, providerKey);
            var user          = new User();

            user.RemoteMemberships.Add(new ProxiedRemoteMembership(
                                           FakeData.String(), FakeData.String()));
            var data = new[]
            {
                new LocalMembership {
                    User = user,
                },
            }.AsQueryable();
            var query     = new LocalMembershipByUser(userLoginInfo);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByUserQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
        public void Handler_ReturnsNonNullLocalMembership_WhenFound_ByUserId()
        {
            var userId = FakeData.Id();
            var user   = new ProxiedUser(userId);
            var data   = new[]
            {
                new LocalMembership
                {
                    User         = user,
                    PasswordHash = "password hash",
                },
            }.AsQueryable();
            var query     = new LocalMembershipByUser(userId);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByUserQuery(entities.Object);

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

            result.ShouldNotBeNull();
            result.User.ShouldEqual(user);
            result.PasswordHash.ShouldEqual("password hash");
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
        public void Handler_ReturnsNonNullLocalMembership_WhenFound_ByUserName()
        {
            var emailAddress = FakeData.Email();
            var user         = new User();

            user.EmailAddresses.Add(new EmailAddress
            {
                IsVerified = true,
                Value      = emailAddress,
            });
            var data = new[]
            {
                new LocalMembership
                {
                    User         = user,
                    PasswordHash = "password hash",
                },
            }.AsQueryable();
            var query     = new LocalMembershipByVerifiedEmail(emailAddress);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByVerifiedEmailQuery(entities.Object);

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

            result.ShouldNotBeNull();
            result.User.ShouldEqual(user);
            result.PasswordHash.ShouldEqual("password hash");
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
Exemple #5
0
        public async Task Handle(ResetPassword command)
        {
            var verification = await _entities.Get <EmailVerification>()
                               .EagerLoad(x => x.EmailAddress)
                               .ByTicketAsync(command.Ticket, false);

            verification.RedeemedOnUtc = DateTime.UtcNow;
            var user = verification.EmailAddress.User;

            var localMembership = await _queries.Execute(new LocalMembershipByVerifiedEmail(verification.EmailAddress.Value));

            // if the user has a no local membership, create one
            if (localMembership == null)
            {
                localMembership = new LocalMembership {
                    User = user,
                };
                user.LocalMembership = localMembership;
            }

            // update the password
            var passwordHash = await _queries.Execute(new HashedPassword(command.Password));

            user.LocalMembership.PasswordHash = passwordHash;

            user.SecurityStamp = Guid.NewGuid().ToString();
            await _entities.SaveChangesAsync();
        }
Exemple #6
0
        public void Handler_ReturnsNullLocalMembership_WhenNotFound_ByVerifiedEmail()
        {
            var emailAddress = string.Format("{0}@domain.tld", Guid.NewGuid());
            var user         = new User();

            user.EmailAddresses.Add(new EmailAddress
            {
                IsVerified = false,
                Value      = emailAddress,
            });
            var data = new[]
            {
                new LocalMembership {
                    User = user,
                },
            }.AsQueryable();
            var query     = new LocalMembershipByVerifiedEmail(emailAddress);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByVerifiedEmailQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
Exemple #7
0
        public void Handler_ReturnsNonNullLocalMembership_WhenFound_ByUserLoginInfo()
        {
            var loginProvider = Guid.NewGuid().ToString();
            var providerKey   = Guid.NewGuid().ToString();
            var userLoginInfo = new UserLoginInfo(loginProvider, providerKey);
            var user          = new User();

            user.RemoteMemberships.Add(new ProxiedRemoteMembership(
                                           loginProvider, providerKey));
            var data = new[]
            {
                new LocalMembership
                {
                    User         = user,
                    PasswordHash = "password hash",
                },
            }.AsQueryable();
            var query     = new LocalMembershipByUser(userLoginInfo);
            var dbSet     = new Mock <DbSet <LocalMembership> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <LocalMembership>(dbSet.Object, entities.Object);

            entities.Setup(x => x.Query <LocalMembership>()).Returns(entitySet);
            var handler = new HandleLocalMembershipByUserQuery(entities.Object);

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

            result.ShouldNotBeNull();
            result.User.ShouldEqual(user);
            result.PasswordHash.ShouldEqual("password hash");
            entities.Verify(x => x.Query <LocalMembership>(), Times.Once);
        }
Exemple #8
0
        public void Ctor_InitializesNothing()
        {
            var entity = new LocalMembership();

            entity.Id.ShouldEqual(0);
            entity.User.ShouldBeNull();
            entity.PasswordHash.ShouldBeNull();
        }
Exemple #9
0
        public void IsInvalid_WhenLocalMembershipIsFound_ByPrincipal()
        {
            var userId    = FakeData.Id();
            var userName  = FakeData.String();
            var principal = new Mock <IPrincipal>(MockBehavior.Strict);
            var claims    = new[]
            {
                new Claim(ClaimTypes.Name, userName),
                new Claim(ClaimTypes.NameIdentifier, userId.ToString(CultureInfo.InvariantCulture))
            };
            var identity = new ClaimsIdentity(claims);
            var user     = new ProxiedUser(userId)
            {
                Name = userName,
            };
            var localMembership = new LocalMembership {
                User = user,
            };

            principal.SetupGet(x => x.Identity).Returns(identity);
            var queries = new Mock <IProcessQueries>(MockBehavior.Strict);
            var command = new FakeMustNotFindLocalMembershipByPrincipalCommand {
                Principal = principal.Object
            };
            Expression <Func <LocalMembershipByUser, bool> > expectedQuery = x => x.UserId == userId;

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

            var result = validator.Validate(command);

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

            result.Errors.Count(expectedError).ShouldEqual(1);
            result.Errors.Single(expectedError).ErrorMessage.ShouldEqual(Resources
                                                                         .Validation_LocalMembershipByUser_AlreadyExists
                                                                         .Replace("{PropertyName}", User.Constraints.Label)
                                                                         .Replace("{PropertyValue}", userName)
                                                                         .Replace("{PasswordLabel}", LocalMembership.Constraints.Label.ToLower())
                                                                         );
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Once);
            validator.ShouldHaveValidationErrorFor(x => x.Principal, command.Principal);
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Exactly(2));
        }
        public void IsValid_WhenFound_ByPrincipal()
        {
            var userId    = FakeData.Id();
            var userName  = FakeData.String();
            var queries   = new Mock <IProcessQueries>(MockBehavior.Strict);
            var principal = new Mock <IPrincipal>(MockBehavior.Strict);
            var claims    = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userId.ToString(CultureInfo.InvariantCulture)),
                new Claim(ClaimTypes.Name, userName),
            };
            var identity = new ClaimsIdentity(claims);

            principal.SetupGet(x => x.Identity).Returns(identity);
            var command = new FakeMustFindLocalMembershipByPrincipalCommand {
                Principal = principal.Object,
            };
            var user = new ProxiedUser(userId)
            {
                Name = userName
            };
            var localMembership = new LocalMembership {
                User = user
            };
            Expression <Func <LocalMembershipByUser, bool> > expectedQuery = x => x.UserId == userId;

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

            var result = validator.Validate(command);

            result.IsValid.ShouldBeTrue();
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Once);
            validator.ShouldNotHaveValidationErrorFor(x => x.Principal, command.Principal);
            queries.Verify(x => x.Execute(It.Is(expectedQuery)), Times.Exactly(2));
        }