示例#1
0
        public IQueryable <User> Get(UserQueryOptions queryOptions)
        {
            var query = GetAll();

            if (queryOptions.IncludeTokens)
            {
                query = query.Include(x => x.Tokens);
            }

            if (queryOptions.IncludeClaims)
            {
                query = query.Include(x => x.Claims);
            }

            if (queryOptions.IncludeUserRoles)
            {
                query = query.Include(x => x.UserRoles);
            }

            if (queryOptions.IncludeRoles)
            {
                query = query.Include("UserRoles.Role");
            }

            if (queryOptions.AsNoTracking)
            {
                query = query = query.AsNoTracking();
            }

            return(query);
        }
        public ViewResult List(FilterGridDTO values)
        {
            var gridBuilder = new UserGridBuilder(HttpContext.Session, values, nameof(AbsenceCoverageMS.Models.DomainModels.User.FirstName));

            var options = new UserQueryOptions
            {
                Include          = "Campus",
                OrderByDirection = gridBuilder.CurrentGrid.SortDirection,
            };

            options.Search(gridBuilder);
            options.Filter(gridBuilder);
            options.Sort(gridBuilder);


            var model = new UserListViewModel
            {
                Grid     = gridBuilder.CurrentGrid,
                Users    = BuildQuery(options).ToList(),
                Campuses = data.Campuses.List()
            };

            model.TotalPages = gridBuilder.GetTotalPages(model.Users.Count());
            model.Users      = model.Users.Skip((gridBuilder.CurrentGrid.PageNumber - 1) * gridBuilder.CurrentGrid.PageSize).Take(gridBuilder.CurrentGrid.PageSize);

            return(View(model));
        }
        public async Task Get_ShouldReturnListOfUsers()
        {
            // Arrange
            var url            = HostServer.Url + "api/users/";
            var accountService = Container.Resolve <IAccountService>();
            var account        = await accountService.GetAccounts().FirstAsync();

            var userQueryOptions = new UserQueryOptions();

            userQueryOptions.BuyerAccountIds.Add(account.BuyerAccountId);
            var totalCount = await Container.Resolve <IUserService>().GetUsers(userQueryOptions).CountAsync();

            var data = new
            {
                BuyerAccountUuid = account.BuyerAccountUuid,
                PageNumber       = 2,
                PageSize         = 5
            };

            // Act
            var response = await url.SetQueryParams(data)
                           .WithOAuthBearerToken(await TestHelper.Token)
                           .GetAsync()
                           .ReceiveJson();

            // Assert
            Assert.That(response, Is.Not.Null);
            Assert.That(response.Data, Is.Not.Null);
            Assert.That(response.TotalItemCount, Is.EqualTo(totalCount));
        }
        public async Task <IActionResult> Index(int pageNumber = 0, int pageSize = 0)
        {
            var scope = AuthenticationService.GetScope(User, User.IsSuperAdmin());

            var queryOptions = new UserQueryOptions(scope, pageSize, pageNumber);
            var pagedItems   = await UserService.GetUsers(queryOptions);

            return(Ok(pagedItems));
        }
示例#5
0
        public async Task Index()
        {
            var user = new User()
            {
                Id               = Guid.NewGuid(),
                FirstName        = "1",
                LastName         = "2",
                Email            = "3",
                UserName         = "******",
                OrganisationId   = Guid.NewGuid(),
                OrganisationName = "5",
                BranchId         = Guid.NewGuid(),
                BranchName       = "6",
                Scope            = Scope.Branch,
                UserTypeId       = Guid.NewGuid(),
            };

            var pagedItems = new PagedItems <User>()
            {
                TotalItems = 1,
                Items      = new List <User>()
                {
                    user
                }
            };

            var service     = new Mock <IUserService>();
            var authService = TestHelper.MockAuthenticationService(Scope.Branch);

            UserQueryOptions queryOptions = null;

            service.Setup(c => c.GetUsers(It.IsAny <UserQueryOptions>()))
            .Callback((UserQueryOptions options) => queryOptions = options)
            .ReturnsAsync(pagedItems);

            var controller = new UsersController(service.Object, authService.Object);

            controller.ControllerContext = TestHelper.GetControllerContext(new ClaimsPrincipal());

            var result = await controller.Index(2, 15);

            Assert.Equal(Scope.Branch, queryOptions.Scope.Scope);
            Assert.Equal(15, queryOptions.PageOptions.Size);
            Assert.Equal(2, queryOptions.PageOptions.Number);

            var okResult    = Assert.IsType <OkObjectResult>(result);
            var returnValue = Assert.IsType <PagedItems <User> >(okResult.Value);

            Assert.Same(pagedItems, returnValue);
        }
示例#6
0
        public List <UserDTO> GetUsers(UserQueryOptions query)
        {
            var users = _dispatcher.Dispatch(new GetUsersQuery
            {
                IncludeClaims    = query.IncludeClaims,
                IncludeUserRoles = query.IncludeUserRoles,
                IncludeRoles     = query.IncludeRoles,
                AsNoTracking     = query.AsNoTracking,
            }).Select(x => new UserDTO
            {
                Id       = x.Id,
                UserName = x.UserName,
            })
                        .ToList();

            return(users);
        }
示例#7
0
        public void ReturnGetUsers_WhenAdmin_CallsGetUsers()
        {
            var queryOptions = new UserQueryOptions
            {
                Page = 1
            };

            var userHelper = A.Fake <IUserHelper>();

            A.CallTo(() => userHelper.IsAdmin(A <HttpContext> .Ignored)).Returns(true);

            var userRepository  = A.Fake <IUserRepository>();
            var usersController = new UsersController(userRepository, userHelper, null);

            var response = usersController.GetUsers(queryOptions);

            A.CallTo(() => userRepository.GetUsers(queryOptions)).MustHaveHappenedOnceExactly();
            A.CallTo(() => userRepository.HasMore(queryOptions)).MustHaveHappenedOnceExactly();
        }
        protected override void Configure()
        {
            CreateMap <UserQueryViewModel, UserQueryOptions>()
            .ConstructUsing(ctx =>
            {
                var source = (UserQueryViewModel)ctx.SourceValue;

                var retVal = new UserQueryOptions();

                if (source.UserId.HasValue)
                {
                    // retrieve all users under specified user's buyer accounts where the user is AgencyAdministrator
                    var userBuyerRoles = ctx.Resolve <IUserService>().GetUserBuyerRoles(source.UserId.Value)
                                         .Where(x => x.RoleName == StandardRole.Administrator)
                                         .ToList();
                    foreach (var userBuyerRole in userBuyerRoles)
                    {
                        retVal.BuyerAccountIds.Add(userBuyerRole.BuyerAccountId);
                    }
                }

                if (source.BuyerAccountUuid.HasValue)
                {
                    // retrieve all users under specified buyer account
                    var buyerAccountId = ctx.Resolve <IAccountService>().GetAccount(source.BuyerAccountUuid.Value).WaitAndUnwrapException().BuyerAccountId;
                    if (!retVal.BuyerAccountIds.Contains(buyerAccountId))
                    {
                        retVal.BuyerAccountIds.Add(buyerAccountId);
                    }
                }

                if (source.UserId.HasValue && !source.BuyerAccountUuid.HasValue && retVal.BuyerAccountIds.Count == 0)
                {
                    // note: just to make sure specified user is not any admin of any buyer account
                    // the service method should return empty user list
                    retVal.BuyerAccountIds.Add(-1);
                }

                return(retVal);
            });
        }
示例#9
0
        public async Task <PagedItems <User> > GetUsers(UserQueryOptions queryOptions)
        {
            var query = from user in ScopeQuery.GetUserEntityQuery(_context, queryOptions.Scope)
                        join branch in _context.Branch
                        on user.BranchId equals branch.Id
                        join organisation in _context.Organisation
                        on branch.OrganisationId equals organisation.Id
                        select new User()
            {
                Id               = user.Id,
                FirstName        = user.FirstName,
                LastName         = user.LastName,
                Email            = user.Email,
                UserName         = user.UserName,
                BranchId         = user.BranchId,
                BranchName       = branch.Name,
                OrganisationId   = organisation.Id,
                OrganisationName = organisation.Name,
                Scope            = user.Scope,
                EmailConfirmed   = user.EmailConfirmed,
                LockoutEnd       = user.LockoutEnd,
                UserTypeId       = user.UserTypeId,
                Config           = user.Config,
            };

            //Apply filters ----------------------------------------------------------------------------------------
            if (!string.IsNullOrWhiteSpace(queryOptions.FirstName))
            {
                query = query.Where(m => EF.Functions.Like(m.FirstName, queryOptions.FirstName));
            }

            if (!string.IsNullOrWhiteSpace(queryOptions.LastName))
            {
                query = query.Where(m => EF.Functions.Like(m.LastName, queryOptions.LastName));
            }

            if (!string.IsNullOrWhiteSpace(queryOptions.Email))
            {
                query = query.Where(m => EF.Functions.Like(m.Email, queryOptions.Email));
            }

            if (queryOptions.EmailConfirmed.HasValue)
            {
                query = query.Where(m => m.EmailConfirmed == queryOptions.EmailConfirmed);
            }

            if (queryOptions.OrganisationId.Any())
            {
                query = query.Where(m => queryOptions.OrganisationId.Contains(m.OrganisationId));
            }

            if (queryOptions.BranchId.Any())
            {
                query = query.Where(m => queryOptions.BranchId.Contains(m.BranchId));
            }

            if (queryOptions.UserTypeId.Any())
            {
                query = query.Where(m => queryOptions.UserTypeId.Contains(m.UserTypeId));
            }
            //------------------------------------------------------------------------------------------------------

            var pagedItems = new PagedItems <User>();

            //Get total items
            pagedItems.TotalItems = await query.CountAsync();

            //Ordering
            query = query.OrderBy(queryOptions.SortOptions.Column, queryOptions.SortOptions.Direction);

            //Paging
            pagedItems.Items = await query.TakePage(queryOptions.PageOptions.Number, queryOptions.PageOptions.Size).ToListAsync();

            return(pagedItems);
        }
        public async Task GetUsers()
        {
            var options = TestHelper.GetDbContext("GetUsers");

            var userDetailed1 = TestHelper.InsertUserDetailed(options);
            var userDetailed2 = TestHelper.InsertUserDetailed(options);

            var user1 = new UserEntity()
            {
                Id         = Guid.NewGuid(),
                FirstName  = "Bob",
                LastName   = "Jones",
                Email      = "*****@*****.**",
                Scope      = Scope.Organisation,
                BranchId   = userDetailed1.Branch.Id,
                UserTypeId = Guid.NewGuid(),
            };

            var user2 = new UserEntity()
            {
                Id         = Guid.NewGuid(),
                FirstName  = "Jack",
                LastName   = "Reacher",
                Email      = "*****@*****.**",
                Scope      = Scope.Organisation,
                BranchId   = userDetailed1.Branch.Id,
                UserTypeId = Guid.NewGuid(),
            };

            var user3 = new UserEntity()
            {
                Id         = Guid.NewGuid(),
                FirstName  = "Joe",
                LastName   = "Soap",
                Email      = "*****@*****.**",
                Scope      = Scope.Organisation,
                BranchId   = userDetailed2.Branch.Id,
                UserTypeId = Guid.NewGuid(),
            };

            using (var context = new DataContext(options))
            {
                context.Users.Add(user1);
                context.Users.Add(user3);
                context.Users.Add(user2);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var userManager  = TestHelper.MockUserManager(context.Users.ToList());
                var auditService = new AuditServiceMock();
                var service      = new UserService(context, userManager.Object, auditService);

                //When
                var scope        = TestHelper.GetScopeOptions(userDetailed1, Scope.Organisation);
                var queryOptions = new UserQueryOptions(scope, 10, 1);
                var users        = await service.GetUsers(queryOptions);

                //Then
                Assert.Equal(3, users.TotalItems);
                Assert.Equal(3, users.Items.Count());

                var actual1 = users.Items.ToArray()[0];
                Assert.Equal(userDetailed1.User.Id, actual1.Id);

                var actual2 = users.Items.ToArray()[1];
                Assert.Equal(user1.Id, actual2.Id);
                Assert.Equal(user1.FirstName, actual2.FirstName);
                Assert.Equal(user1.LastName, actual2.LastName);
                Assert.Equal(user1.Email, actual2.Email);
                Assert.Equal(user1.Scope, actual2.Scope);
                Assert.Equal(user1.BranchId, actual2.BranchId);
                Assert.Equal(user1.UserTypeId, actual2.UserTypeId);
                Assert.Equal(userDetailed1.Branch.Name, actual2.BranchName);
                Assert.Equal(userDetailed1.Organisation.Id, actual2.OrganisationId);
                Assert.Equal(userDetailed1.Organisation.Name, actual2.OrganisationName);


                var actual3 = users.Items.ToArray()[2];
                Assert.Equal(user2.Id, actual3.Id);
            }
        }