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)); }
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)); }
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); }