public AssignmentStatisticsDto ToAssignmentStatisticsDto( AssignmentWithLastResultsOfMultipleUsers assignmentWithLastResultsOfMultipleUsers) { var passedTestsPerUserQuery = from testWithLastResultOfMultipleUsers in assignmentWithLastResultsOfMultipleUsers.TestsWithLastResultOfMultipleUsers from testResult in testWithLastResultOfMultipleUsers.TestResults group testResult by testResult.UserId into userGroup select new { UserId = userGroup.Key, AmountOfPassedTests = userGroup.Count(g => g.Passed) }; var testPassageStatisticsQuery = from userStatistic in passedTestsPerUserQuery group userStatistic by userStatistic.AmountOfPassedTests into amountGroup select new TestPassageStatistic { AmountOfUsers = amountGroup.Count(), AmountOfPassedTests = amountGroup.Key }; var result = new AssignmentStatisticsDto { AssignmentId = assignmentWithLastResultsOfMultipleUsers.Assignment.Id, TestPassageStatistics = testPassageStatisticsQuery.OrderBy(statistic => statistic.AmountOfPassedTests).ToList() }; return(result); }
public void GetChapterStatisticsAsyncShouldRetrieveAssignmentsWithLastResultsOfMultipleUsersAndConvertThemToStatistics() { //Arrange var chapterId = _random.NextPositive(); var nowUtc = DateTime.UtcNow; var assignmentWithResultsOfMultipleUsers = new AssignmentWithLastResultsOfMultipleUsers(); var assignmentsWithLastResultsOfMultipleUsers = new List <AssignmentWithLastResultsOfMultipleUsers> { assignmentWithResultsOfMultipleUsers }; _testResultRepositoryMock .Setup(repo => repo.GetLastTestResultsOfChapterAsync(It.IsAny <int>(), It.IsAny <DateTime?>())) .ReturnsAsync(assignmentsWithLastResultsOfMultipleUsers); var assignmentStatisticsDto = new AssignmentStatisticsDto(); _testResultConverterMock .Setup(converter => converter.ToAssignmentStatisticsDto(It.IsAny <AssignmentWithLastResultsOfMultipleUsers>())) .Returns(assignmentStatisticsDto); //Act var results = _service.GetChapterStatisticsAsync(chapterId, nowUtc).Result; //Assert Assert.That(results, Has.Exactly(1).EqualTo(assignmentStatisticsDto)); _testResultRepositoryMock.Verify(repo => repo.GetLastTestResultsOfChapterAsync(chapterId, nowUtc), Times.Once); _testResultConverterMock.Verify(converter => converter.ToAssignmentStatisticsDto(assignmentWithResultsOfMultipleUsers), Times.Once); }