Exemplo n.º 1
0
        public void Post_Survey_Answer_Success()
        {
            var cont = new SurveyQuestionAnswer[]
            {
                new SurveyQuestionAnswer {
                    text = "ta mt fixe", choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 1, 2, 3, 3, 3 }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "4", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsTrue(result.Success);

            var result2 = surveyService.GetSurveyResponses(1, "2").Result.Result.Where(elem => elem.authorId == "4").ToList();

            Assert.AreEqual(result2.Count(), 3);

            var questionAnswer = result2.Where(e => e.questionId == 1).FirstOrDefault();

            Assert.IsNotNull(questionAnswer.surveyTextAnswer);
            Assert.AreEqual(questionAnswer.surveyTextAnswer.response, "ta mt fixe");

            surveyService.DeleteSurveyAnswer(result2);
        }
        public Task <int> PostAsync(CreateSurveyAnswer item)
        {
            return(Task.Factory.StartNew(() =>
            {
                using (var dbcxtransaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        foreach (SurveyQuestionAnswer q in item.questions)
                        {
                            var result = new surveyAnswer()
                            {
                                eventId = item.eventId,
                                authorId = item.authorId,
                                questionId = q.questionId
                            };

                            context.surveyAnswer.Add(result);
                            context.SaveChanges();

                            InsertTextAnswer(item, q);

                            InsertChoicesAnswer(item, q);
                        }
                        dbcxtransaction.Commit();
                    }
                    catch (Exception e)
                    {
                        throw new ArgumentException(e.Message);
                    }
                    return 0;
                }
            }));
        }
Exemplo n.º 3
0
        public void Post_Answer_Number_Not_The_Same()
        {
            var cont = new SurveyQuestionAnswer[] {
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "4", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsFalse(result.Success);
            Assert.AreEqual(SurveyService.Messages.ERROR_VALIDATE_ANSWER + SurveyService.Messages.INVALID_NUMBER_QUESTIONS, result.Message);
        }
        private void InsertTextAnswer(CreateSurveyAnswer item, SurveyQuestionAnswer q)
        {
            if (q.text != null)
            {
                var textResult = new surveyTextAnswer()
                {
                    authorId   = item.authorId,
                    questionId = q.questionId,
                    eventId    = item.eventId,
                    response   = q.text
                };

                context.surveyTextAnswer.Add(textResult);
                context.SaveChanges();
            }
        }
        private void InsertChoicesAnswer(CreateSurveyAnswer item, SurveyQuestionAnswer q)
        {
            if (q.choices != null)
            {
                foreach (int c in q.choices)
                {
                    var choiceResult = new surveyChoiceAnswer()
                    {
                        authorId   = item.authorId,
                        questionId = q.questionId,
                        eventId    = item.eventId,
                        choiceId   = c
                    };

                    context.surveyChoiceAnswer.Add(choiceResult);
                    context.SaveChanges();
                }
            }
        }
Exemplo n.º 6
0
        public void Post_Answer_Bad_Multiple_Choice_v2()
        {
            var cont = new SurveyQuestionAnswer[] {
                new SurveyQuestionAnswer {
                    text = "ya"
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 1, 45 }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "4", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsFalse(result.Success);
            Assert.AreEqual("choice doesn't match the question group of possible choices", result.Message);
        }
Exemplo n.º 7
0
        public void Post_Answer_Bad_Multiple_Choice()
        {
            var cont = new SurveyQuestionAnswer[] {
                new SurveyQuestionAnswer {
                    text = "ya"
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] {  }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "4", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsFalse(result.Success);
            Assert.AreEqual(SurveyService.Messages.NO_CHOICES, result.Message);
        }
Exemplo n.º 8
0
        public void Post_Answer_Does_Not_Has_Text_Response()
        {
            var cont = new SurveyQuestionAnswer[] {
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 1, 2, 3, 3, 3 }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "4", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsFalse(result.Success);
            Assert.AreEqual("the question (nr.1) must have a text answer", result.Message);
        }
Exemplo n.º 9
0
        public void Post_Answer_User_Already_Posted()
        {
            var cont = new SurveyQuestionAnswer[] {
                new SurveyQuestionAnswer {
                    text = "ta mt fixe"
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 2 }
                },
                new SurveyQuestionAnswer {
                    choices = new int[] { 1, 2, 3, 3, 3 }
                }
            };
            var param = new CreateSurveyAnswer()
            {
                eventId = 1, authorId = "2", questions = cont
            };
            var result = surveyService.PostSurveyAnswer(param).Result;

            Assert.IsFalse(result.Success);
            Assert.AreEqual(SurveyService.Messages.USER_ALREADY_SUBMITED, result.Message);
        }
Exemplo n.º 10
0
        private OperationResult <bool> ValidateUserAnswer(IEnumerable <surveyQuestion> result, CreateSurveyAnswer content)
        {
            var answerQuestionCount = content.questions.Count();
            var questionTemplate    = result.Count();

            if (questionTemplate != answerQuestionCount)
            {
                return new OperationResult <bool>()
                       {
                           Success = false, Message = Messages.ERROR_VALIDATE_ANSWER + Messages.INVALID_NUMBER_QUESTIONS
                       }
            }
            ;
            var survQuestionArr = result.ToArray();

            for (int i = 0; i < answerQuestionCount; i++)
            {
                content.questions[i].questionId = (i + 1);

                switch (survQuestionArr[i].type)
                {
                case SurveyQuestion.multiple_choices:
                    if (content.questions[i].choices == null || content.questions[i].choices.Count() == 0)
                    {
                        return new OperationResult <bool>()
                               {
                                   Success = false, Message = Messages.NO_CHOICES
                               }
                    }
                    ;;
                    content.questions[i].choices = content.questions[i].choices.Distinct().ToArray();
                    if (!content.questions[i].choices.All(elem => survQuestionArr[i].surveyChoice.Any(e => elem == e.choiceId)))
                    {
                        return new OperationResult <bool>()
                               {
                                   Success = false, Message = "choice doesn't match the question group of possible choices"
                               }
                    }
                    ;;
                    content.questions[i].text = null;
                    break;

                case SurveyQuestion.single_choices:
                    if (content.questions[i].choices == null || content.questions[i].choices.Count() != 1)
                    {
                        return new OperationResult <bool>()
                               {
                                   Success = false, Message = Messages.NO_CHOICES
                               }
                    }
                    ;
                    if (!content.questions[i].choices.All(elem => survQuestionArr[i].surveyChoice.Any(e => elem == e.choiceId)))
                    {
                        return new OperationResult <bool>()
                               {
                                   Success = false, Message = "choice doesn't match the question group of possible choices"
                               }
                    }
                    ;;
                    content.questions[i].text = null;
                    break;

                case SurveyQuestion.open_text:
                    if (content.questions[i].text == null)
                    {
                        return new OperationResult <bool>()
                               {
                                   Success = false, Message = "the question (nr." + (i + 1) + ") must have a text answer"
                               }
                    }
                    ;
                    content.questions[i].choices = null;
                    break;
                }
            }
            return(new OperationResult <bool>()
            {
                Success = true
            });
        }
Exemplo n.º 11
0
        public async Task <OperationResult <bool> > PostSurveyAnswer(CreateSurveyAnswer sur)
        {
            if (!sur.ParameterValid())
            {
                return new OperationResult <bool>()
                       {
                           Success = false, Message = Messages.PARAMETERS_NOT_NULL
                       }
            }
            ;;

            var eventRes = await eventService.GetByIdAsync(sur.eventId);

            if (!eventRes.Success)
            {
                return new OperationResult <bool>()
                       {
                           Success = false, Message = eventRes.Message
                       }
            }
            ;
            if (!eventRes.Result.eventSubscribers.Any(elem => (elem.userId == sur.authorId) && elem.checkIn.Value))
            {
                return new OperationResult <bool>()
                       {
                           Success = false, Message = Messages.USER_CANT_ANSWER
                       }
            }
            ;

            try
            {
                var answerRes = await surveyAnswerRepo.GetByIdAsync(sur.eventId, sur.authorId);

                if (answerRes)
                {
                    return new OperationResult <bool>()
                           {
                               Success = false, Message = Messages.USER_ALREADY_SUBMITED
                           }
                }
                ;

                var templateRes = await GetEventSurvey(sur.eventId, sur.authorId);

                var answer = ValidateUserAnswer(templateRes.Result, sur);
                if (!answer.Success)
                {
                    return(answer);
                }

                var surv = await surveyAnswerRepo.PostAsync(sur);

                return(new OperationResult <bool>()
                {
                    Success = true, Message = Messages.TEMPLATE_INSERTED, Result = true
                });
            }
            catch (Exception ex)
            {
                return(new OperationResult <bool>()
                {
                    Success = false, Message = ex.InnerException.Message
                });
            }
        }