public async Task <SanitizedPollResult> Handle(FetchPollResultsRequest request,
                                                       CancellationToken cancellationToken)
        {
            var(conferenceId, pollId) = request;

            var poll = await _repository.GetPoll(conferenceId, pollId);

            if (poll == null)
            {
                throw PollError.PollNotFound.ToException();
            }

            var answers = await _repository.GetPollAnswers(conferenceId, poll.Id);

            var wrapper = new PollAnswerAggregatorWrapper(_context);
            var result  = await wrapper.AggregateAnswers(poll.Instruction, answers.Values);

            IReadOnlyDictionary <string, string>?participantIdTranslationTable = null;

            if (!poll.Config.IsAnonymous)
            {
                participantIdTranslationTable = answers.ToDictionary(x => x.Value.Key, x => x.Key);
            }

            return(new SanitizedPollResult(result, answers.Count, participantIdTranslationTable));
        }
Beispiel #2
0
        public async Task AggregateAnswers_InvalidAnswer_Throw()
        {
            // arrange
            var container = CreateContainer();

            var wrapper = new PollAnswerAggregatorWrapper(container);

            var instruction = new MultipleChoiceInstruction(new[] {"A", "B"}, null);
            var answers = new[] {new PollAnswerWithKey(new SingleChoiceAnswer("A"), "1")};

            // act
            await Assert.ThrowsAnyAsync<Exception>(async () => await wrapper.AggregateAnswers(instruction, answers));
        }
Beispiel #3
0
        public async Task AggregateAnswers_ValidInstruction_ReturnResult()
        {
            // arrange
            var container = CreateContainer();

            var wrapper = new PollAnswerAggregatorWrapper(container);
            var instruction = new MultipleChoiceInstruction(new[] {"A", "B"}, null);
            var answers = new[] {new PollAnswerWithKey(new MultipleChoiceAnswer(new[] {"A"}), "1")};

            // act
            var result = await wrapper.AggregateAnswers(instruction, answers);

            // assert
            Assert.IsType<SelectionPollResults>(result);
        }