internal async Task ValidateOnRate_RatingItemsWithDuplicatedRatings_ThrowsException( QuestionsAnswersRatingValidationService questionsAnswersRatingValidationService) { // Arrange var rating = new AnswersRating { AnswersAssessmentQuestion = new AnswersAssessmentQuestion { Assessment = new Assessment { TestSession = new TestSession { State = TestSessionState.Assessment, }, }, }, }; var ratingItems = new List <QuestionsAnswersRatingItemData> { new QuestionsAnswersRatingItemData { Rating = 1, }, new QuestionsAnswersRatingItemData { Rating = 1, }, }; // Act Func <Task> action = () => questionsAnswersRatingValidationService.ValidateOnRate(rating, ratingItems); // Assert await action.Should().ThrowAsync <InvalidOperationException>(); }
internal async Task ValidateOnRate_TestSessionInAssessmentPhase_Success( QuestionsAnswersRatingValidationService questionsAnswersRatingValidationService) { // Arrange var rating = new AnswersRating { AnswersAssessmentQuestion = new AnswersAssessmentQuestion { Assessment = new Assessment { TestSession = new TestSession { State = TestSessionState.Assessment, }, }, }, }; var ratingItems = new List <QuestionsAnswersRatingItemData>(); // Act Func <Task> action = () => questionsAnswersRatingValidationService.ValidateOnRate(rating, ratingItems); // Assert await action.Should().NotThrowAsync <InvalidOperationException>(); }
public async Task Rate(Guid answersRatingId, IReadOnlyCollection <QuestionsAnswersRatingItemData> ratingItems) { var queryParams = new AnswersRatingQueryParameters { Id = answersRatingId, IsReadOnly = false, }; AnswersRating rating = await _unitOfWork.GetSingle(queryParams); await _questionsAnswersRatingValidationService.ValidateOnRate(rating, ratingItems); // TODO: Do it more elegant var join = rating.AnswersRatingItems.ToArray().Join( ratingItems, item => item.Id, e => e.Id, (target, source) => (Source: source, Target: target)).ToArray(); foreach (var pair in join) { pair.Target.Rating = pair.Source.Rating; } await _unitOfWork.Update(rating); await _unitOfWork.Commit(); }
private void ThrowIfTestSessionNotInAssessmentPhase(AnswersRating rating) { if (rating.AnswersAssessmentQuestion.Assessment.TestSession.State != TestSessionState.Assessment) { throw new InvalidOperationException( $"Can't rank answers for test session in not {TestSessionState.Assessment} state"); } }
public Task ValidateOnRate(AnswersRating rating, IReadOnlyCollection <QuestionsAnswersRatingItemData> ratingItems) { ThrowIfTestSessionNotInAssessmentPhase(rating); // TODO: Validate ratings return(Task.CompletedTask); }