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); }
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()); }