예제 #1
0
        public void ShouldScoreSubmittedAnswers()
        {
            const int expected        = 5;
            var       correctAnswer   = new[] { 0, 1, 2, 0, 1, 2 };
            var       submittedAnswer = new[] { 0, 2, 2, 0, 1, 2 };

            var actual = SubmissionCorrection.Correcting(correctAnswer, submittedAnswer);

            Assert.AreEqual(expected, actual);
        }
예제 #2
0
        public QuizModule(IDocumentSession documentSession)
        {
            this.documentSession = documentSession;

            Post["/api/add"] = _ =>
                {
                    if (Request.Cookies.ContainsKey("quizvote"))
                        return Response.AsRedirect("/highscore", RedirectResponse.RedirectType.Permanent);
                    
                    var questionList = documentSession.Load<QuestionList>("QuestionLists/QuestionList");

                    var submission = this.Bind<Submission>();

                    //Ugly hack due to couldn't get the binding to work correctly, GAH!
                    submission.Answers = new int[questionList.Questions.Count()];
                    for (var i = 1; i <= questionList.Questions.Count(); i++)
                    {
                        if (Request.Form["Answers_" + i] != null && Request.Form["Answers_" + i] != "")
                        {
                            submission.Answers[i-1] = int.Parse(Request.Form["Answers_" + i]);
                        }
                    }

                    var correctScore = questionList.Questions.Select(x => x.CorrectOption).ToList();
                    var score = SubmissionCorrection.Correcting(correctScore,submission.Answers);

                    submission.Score = score;

                    documentSession.Store(submission);
                    documentSession.SaveChanges();

                    return
                        Response.AsRedirect("/highscore", RedirectResponse.RedirectType.Permanent)
                                .AddCookie("quizvote", "true", DateTime.UtcNow.AddDays(365));
                };

            Get["/api/questions"] = _ =>
                {
                    var questionList = documentSession.Load<QuestionList>("QuestionLists/QuestionList");

                    if (questionList == null)
                        return 404;

                    var dictionary =
                        questionList.Questions.ToList().ToDictionary(k => k.QuestionTitle, v => v.Options);

                    var response = dictionary.Select(x => new {question = x.Key, options = x.Value});

                    return Response.AsJson(response);
                };

            Get["/quiz"] = _ =>
            {
                base.Page.Title = "Quiz";

                var questionList = documentSession.Load<QuestionList>("QuestionLists/QuestionList");

                return View["Quiz", questionList];
            };


            Get["/highscore"] = _ =>
                {
                    base.Page.Title = "Highscore";

                    var submissions = documentSession.Query<Submission>().OrderByDescending(x => x.Score).ToList();

                    return View["highscore", submissions];
                };
        }