コード例 #1
0
        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>();
        }
コード例 #2
0
        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>();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
 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");
     }
 }
コード例 #5
0
 public Task ValidateOnRate(AnswersRating rating, IReadOnlyCollection <QuestionsAnswersRatingItemData> ratingItems)
 {
     ThrowIfTestSessionNotInAssessmentPhase(rating);
     // TODO: Validate ratings
     return(Task.CompletedTask);
 }