public async Task <SurveyModel> Handle(CreateSurveyCommand request, CancellationToken cancellationToken) { var survey = new Survey(request.SurveyTopic, request.NumberOfRespondents, request.RespondentType); foreach (var option in request.SurveyOptions) { if (option.PreferredNumberOfVotes.HasValue) { survey.AddSurveyOption(option.OptionText, option.PreferredNumberOfVotes.Value); } else { survey.AddSurveyOption(option.OptionText); } } IVoteDistribution voteDistribution; if (request.SurveyOptions.Any(option => option.PreferredNumberOfVotes > 0)) { voteDistribution = new FixedVoteDistribution(); } else { voteDistribution = new RandomVoteDistribution(); } var result = survey.CalculateOutcome(voteDistribution); _surveyRepository.Add(result); await _surveyRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); return(_mapper.Map <SurveyModel>(result)); }
public void Should_Be_Able_To_Calculate_Results_Of_Survey_With_Fixed_Outcome() { var topic = "Tabs or spaces?"; var numberOfRespondents = 1000; var respondentType = "Developers"; var survey = new Survey(topic, numberOfRespondents, respondentType); survey.AddSurveyOption("Tabs", 600); survey.AddSurveyOption("Spaces", 400); var voteDistribution = new FixedVoteDistribution(); var result = survey.CalculateOutcome(voteDistribution); Assert.Equal(600, result.Options.First().NumberOfVotes); Assert.Equal(400, result.Options.Last().NumberOfVotes); }