public async Task <Page <User> > GetUsers(SearchUsersParams searchParams)
        {
            var users = _context.User
                        .Include(x => x.UserType)
                        .Include(x => x.UserTitle)
                        .Where(x => x.IsActive == true)
                        .AsQueryable();

            var totalCount = await users.CountAsync().ConfigureAwait(false);

            var searchCount = 0;

            if (!string.IsNullOrWhiteSpace(searchParams.SearchString))
            {
                users = users.Where(l => l.Name.ToLower().Contains(searchParams.SearchString) ||
                                    l.Surname.ToLower().Contains(searchParams.SearchString));
                searchCount = users.Count();
            }

            var results = await users
                          .OrderBy(l => l.Id)
                          .Skip(searchParams.PageIndex * searchParams.PageSize)
                          .Take(searchParams.PageSize)
                          .ToListAsync()
                          .ConfigureAwait(false);

            var pageCount = searchCount == 0 ?
                            Utils.PageCount(totalCount, searchParams.PageSize) :
                            Utils.PageCount(searchCount, searchParams.PageSize);
            var currentPage = searchParams.PageIndex > pageCount  ? pageCount : searchParams.PageIndex;

            var Page = new Page <User>
            {
                Items       = results,
                PageCount   = pageCount,
                TotalCount  = totalCount,
                CurrentPage = currentPage
            };


            return(Page);
        }
Exemple #2
0
        public void GetUsers_WithSearchString_ReturnsListOfUsers(string searchString, int pageIndex, int pageSize)
        {
            // Arrange
            var users        = UserMocks.GetUsers();
            var searchParams = new SearchUsersParams()
            {
                SearchString = searchString,
                PageIndex    = pageIndex,
                PageSize     = pageSize
            };
            var result = new Page <User>()
            {
                Items       = users,
                PageCount   = 1,
                TotalCount  = 1,
                CurrentPage = 1
            };

            var searchParamsDto = new SearchUserParamsDto()
            {
                SearchString = searchString,
                PageIndex    = pageIndex,
                PageSize     = pageSize
            };

            _ = _mockUserRepository.Setup(x => x.GetUsers(It.IsAny <SearchUsersParams>())).ReturnsAsync(result);

            // Act
            var response = _userService.GetUsers(searchParamsDto).Result;
            var items    = response.Items.ToList();

            // Assert
            Assert.IsNotNull(response);
            Assert.AreEqual(items[0].Name, "John");
            Assert.AreEqual(result.Items.Count(), users.Count());
        }