public void GetCompletedMemeories_ValidDateRange_ReturnsOk() { _memoriesController.HttpContext.User.AddIdentity(new ClaimsIdentity(new[] { new Claim(ClaimTypes.Role, UserRoles.Coach) })); CompletedMemoryParams queryParams = new CompletedMemoryParams { FromDate = new DateTime(2019, 8, 23), ToDate = new DateTime(2020, 1, 1), }; var kidMemories = new List <KidMemory> { new KidMemory { KidId = 324, MemoryId = 12, DateCompleted = new DateTime(2019, 8, 24), Memory = new Memory { Id = 12, CategoryId = 1 } } }; _memoryRepoMock .Setup(x => x.GetCompletedMemories(queryParams)) .ReturnsAsync(kidMemories); var actual = _memoriesController.GetCompletedMemeories(queryParams).Result; Assert.IsInstanceOfType(actual, typeof(OkObjectResult)); }
public async Task <IActionResult> GetCompletedMemeories([FromQuery] CompletedMemoryParams queryParams) { queryParams.UserId = UserId; queryParams.UserRoles = new[] { UserRole }; if (queryParams?.FromDate > queryParams?.ToDate) { return(BadRequest("Invalid date range")); } var memories = await _repo.GetCompletedMemories(queryParams); var dto = memories .GroupBy(km => km.Memory.Category) .OrderBy(c => c.Key.Id) .Select(c => new KidMemoryCategory { CategoryId = c.Key.Id, CategoryName = c.Key.Name, KidMemories = c.GroupBy(km => km.Kid) .OrderBy(km => km.Key.LastName) .Select(k => new KidMemoryDetail { FirstName = k.Key.FirstName, LastName = k.Key.LastName, Completed = k.OrderByDescending(x => x.DateCompleted).ThenBy(x => x.Memory.Name) .Select(x => new CompletedMemoryDetail { MemoryId = x.Memory.Id, MemoryName = x.Memory.Name, MemoryDescription = x.Memory.Description, DateCompleted = x.DateCompleted, }) }) }); return(Ok(dto)); }