Example #1
0
        public void Handler_ReturnsNullUserView_WhenPrincipalIdentity_HasNoNameIdentifierClaim()
        {
            var userId = new Random().Next(1, int.MaxValue - 3);
            var user   = new ProxiedUser(userId)
            {
                Name = Guid.NewGuid().ToString(),
            };
            var data = new[] { user }.AsQueryable();
            var claims = new[]
            {
                new Claim(ClaimTypes.Name, userId.ToString(CultureInfo.InvariantCulture)),
            };
            var identity  = new ClaimsIdentity(claims, "authentication type");
            var principal = new GenericPrincipal(identity, null);
            var query     = new UserViewBy(principal);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #2
0
        public void Query_IntCtor_SetsIdProperty()
        {
            var id    = new Random().Next(int.MinValue, int.MaxValue);
            var query = new UserViewBy(id);

            query.Id.ShouldEqual(id);
            query.Name.ShouldBeNull();
            query.Principal.ShouldBeNull();
        }
Example #3
0
        public void Query_PrincipalCtor_SetsPrincipalProperty()
        {
            var principal = new Mock <IPrincipal>(MockBehavior.Strict);
            var query     = new UserViewBy(principal.Object);

            query.Id.ShouldBeNull();
            query.Name.ShouldBeNull();
            query.Principal.ShouldEqual(principal.Object);
        }
Example #4
0
        public void Query_StringCtor_SetsNameProperty()
        {
            var name  = Guid.NewGuid().ToString();
            var query = new UserViewBy(name);

            query.Id.ShouldBeNull();
            query.Name.ShouldEqual(name);
            query.Principal.ShouldBeNull();
        }
Example #5
0
        public void Query_IntCtor_SetsIdProperty()
        {
            var id    = FakeData.Id();
            var query = new UserViewBy(id);

            query.Id.ShouldEqual(id);
            query.Name.ShouldBeNull();
            query.Principal.ShouldBeNull();
        }
Example #6
0
        public void Handler_ReturnsNonNullUserView_WhenFound_ByPrincipal()
        {
            var userId = new Random().Next(1, int.MaxValue - 3);
            var user   = new ProxiedUser(userId)
            {
                Name = Guid.NewGuid().ToString(),
            };
            var primaryEmail = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
                IsPrimary   = true,
                IsVerified  = true,
            };
            var secondaryEmail1 = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
                IsVerified  = true,
            };
            var secondaryEmail2 = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
            };

            user.EmailAddresses.Add(secondaryEmail1);
            user.EmailAddresses.Add(secondaryEmail2);
            user.EmailAddresses.Add(primaryEmail);
            var data = new[] { user }.AsQueryable();
            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userId.ToString(CultureInfo.InvariantCulture)),
            };
            var identity  = new ClaimsIdentity(claims, "authentication type");
            var principal = new GenericPrincipal(identity, null);
            var query     = new UserViewBy(principal);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldNotBeNull();
            result.UserId.ShouldEqual(user.Id);
            result.UserName.ShouldEqual(user.Name);
            result.PrimaryEmailAddress.ShouldEqual(primaryEmail.Value);
            result.PrimaryEmailHash.ShouldEqual(primaryEmail.HashedValue);
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #7
0
        public void Handler_ReturnsNullUserView_WhenNotFound_ByPrincipal()
        {
            var userId      = FakeData.Id();
            var otherUserId = FakeData.Id(canNotBe: userId);
            var user        = new ProxiedUser(otherUserId)
            {
                Name = FakeData.String(),
            };
            var primaryEmail = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
                IsPrimary   = true,
                IsVerified  = true,
            };
            var secondaryEmail1 = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
                IsVerified  = true,
            };
            var secondaryEmail2 = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
            };

            user.EmailAddresses.Add(secondaryEmail1);
            user.EmailAddresses.Add(secondaryEmail2);
            user.EmailAddresses.Add(primaryEmail);
            var data = new[] { user }.AsQueryable();
            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userId.ToString(CultureInfo.InvariantCulture)),
            };
            var identity  = new ClaimsIdentity(claims, "authenticationType");
            var principal = new GenericPrincipal(identity, null);
            var query     = new UserViewBy(principal);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #8
0
        public async Task <UserView> Handle(UserViewBy query)
        {
            var queryable = _entities.Query <User>();

            if (query.Id.HasValue)
            {
                queryable = queryable.Where(EntityExtensions.ById <User>(query.Id.Value));
            }

            else if (query.Principal != null && query.Principal.Identity.IsAuthenticated)
            {
                queryable = queryable.Where(EntityExtensions.ById <User>(query.Principal.Identity.GetUserId <int>()));
            }

            else
            {
                queryable = queryable.Where(QueryUsers.ByName(query.Name));
            }

            // project before querying to only get the data needed for the view.
            var projection = await queryable.Select(x => new
            {
                UserId              = x.Id,
                UserName            = x.Name,
                PrimaryEmailAddress = x.EmailAddresses.Where(y => y.IsPrimary)
                                      .Select(y => new
                {
                    y.Value,
                    y.HashedValue,
                })
                                      .FirstOrDefault(),
            })
                             .SingleOrDefaultAsync().ConfigureAwait(false);

            if (projection == null)
            {
                return(null);
            }

            var view = new UserView
            {
                UserId              = projection.UserId,
                UserName            = projection.UserName,
                PrimaryEmailAddress = projection.PrimaryEmailAddress.Value,
                PrimaryEmailHash    = projection.PrimaryEmailAddress.HashedValue,
            };

            return(view);
        }
Example #9
0
        public void Handler_ReturnsNonNullUserView_WhenFound_ByName()
        {
            var userId   = FakeData.Id();
            var userName = FakeData.String();
            var user     = new ProxiedUser(userId)
            {
                Name = userName,
            };
            var primaryEmail = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
                IsPrimary   = true,
                IsVerified  = true,
            };
            var secondaryEmail1 = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
                IsVerified  = true,
            };
            var secondaryEmail2 = new EmailAddress
            {
                Value       = FakeData.Email(),
                HashedValue = FakeData.String(),
            };

            user.EmailAddresses.Add(secondaryEmail1);
            user.EmailAddresses.Add(secondaryEmail2);
            user.EmailAddresses.Add(primaryEmail);
            var data = new[] { user }.AsQueryable();
            var query     = new UserViewBy(userName);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldNotBeNull();
            result.UserId.ShouldEqual(user.Id);
            result.UserName.ShouldEqual(user.Name);
            result.PrimaryEmailAddress.ShouldEqual(primaryEmail.Value);
            result.PrimaryEmailHash.ShouldEqual(primaryEmail.HashedValue);
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #10
0
        public void Handler_ReturnsNullUserView_WhenNotFound_ByName()
        {
            var userId   = new Random().Next(1, int.MaxValue - 3);
            var userName = Guid.NewGuid().ToString();
            var user     = new ProxiedUser(userId)
            {
                Name = Guid.NewGuid().ToString(),
            };
            var primaryEmail = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
                IsPrimary   = true,
                IsVerified  = true,
            };
            var secondaryEmail1 = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
                IsVerified  = true,
            };
            var secondaryEmail2 = new EmailAddress
            {
                Value       = string.Format("{0}@domain.tld", Guid.NewGuid()),
                HashedValue = Guid.NewGuid().ToString(),
            };

            user.EmailAddresses.Add(secondaryEmail1);
            user.EmailAddresses.Add(secondaryEmail2);
            user.EmailAddresses.Add(primaryEmail);
            var data = new[] { user }.AsQueryable();
            var query     = new UserViewBy(userName);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #11
0
        public void Handler_ReturnsNullUserView_WhenPrincipalIsNull()
        {
            var userId = new Random().Next(1, int.MaxValue - 3);
            var user   = new ProxiedUser(userId)
            {
                Name = Guid.NewGuid().ToString(),
            };
            var data = new[] { user }.AsQueryable();
            var query     = new UserViewBy(null as IPrincipal);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <User>(), Times.Once);
        }
Example #12
0
        public void Handler_ReturnsNullUserView_WhenPrincipalIdentity_IsNotClaimsIdentity()
        {
            var userId = FakeData.Id();
            var user   = new ProxiedUser(userId)
            {
                Name = FakeData.String(),
            };
            var data = new[] { user }.AsQueryable();
            var identity  = new GenericIdentity(user.Name, "authentication type");
            var principal = new GenericPrincipal(identity, null);
            var query     = new UserViewBy(principal);
            var dbSet     = new Mock <DbSet <User> >(MockBehavior.Strict).SetupDataAsync(data);
            var entities  = new Mock <IReadEntities>(MockBehavior.Strict);
            var entitySet = new EntitySet <User>(dbSet.Object, entities.Object);
            IQueryable <User> toBeReturned = entitySet;

            entities.Setup(x => x.Query <User>()).Returns(toBeReturned);
            var handler = new HandleUserViewByQuery(entities.Object);

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

            result.ShouldBeNull();
            entities.Verify(x => x.Query <User>(), Times.Once);
        }