def get_answers_list(self):
return False
+ def answer_choice_to_string(self, guess):
+ return str(guess)
+
class Meta:
verbose_name = "Essay style question"
self.assertEqual(self.essay.check_if_correct(), False)
self.assertEqual(self.essay.get_answers(), False)
self.assertEqual(self.essay.get_answers_list(), False)
+
+ def test_returns_guess(self):
+ guess = "To be or not to be"
+ self.assertEqual(self.essay.answer_choice_to_string(guess), guess)
return [(answer.id, answer.content) for answer in
Answer.objects.filter(question=self)]
+ def answer_choice_to_string(self, guess):
+ return Answer.objects.get(id=guess).content
+
class Meta:
verbose_name = "Multiple Choice Question"
verbose_name_plural = "Multiple Choice Questions"
self.assertEqual(self.q.check_if_correct(123), False)
self.assertEqual(self.q.check_if_correct(456), True)
self.assertEqual(answers_by_method.count(), 2)
+ self.assertEqual(self.q.answer_choice_to_string(123),
+ self.answer1.content)
from django import forms
-from django.forms.widgets import RadioSelect
+from django.forms.widgets import RadioSelect, Textarea
class QuestionForm(forms.Form):
choice_list = [x for x in question.get_answers_list()]
self.fields["answers"] = forms.ChoiceField(choices=choice_list,
widget=RadioSelect)
+
+
+class EssayForm(forms.Form):
+ def __init__(self, question, *args, **kwargs):
+ super(EssayForm, self).__init__(*args, **kwargs)
+ self.fields["answers"] = forms.CharField(widget=Textarea)
question_list=questions,
incorrect_questions="",
current_score=0,
- complete=False)
+ complete=False,
+ user_answers='{}')
new_sitting.save()
return new_sitting
current[question.id] = guess
self.user_answers = json.dumps(current)
+ def questions_with_user_answers(self):
+ output = {}
+ user_answers = json.loads(self.user_answers)
+ questions = self.quiz.question_set.all().select_subclasses()
+ for question in questions:
+ output[question] = user_answers[unicode(question.id)]
+
+ return output
+
class Question(models.Model):
"""
<ul class="list-group">
- {% for answer in form.answers %}
- <li class="list-group-item">
- {{ answer }}
- </li>
- {% endfor %}
+ {{ form }}
+ <!-- {% for answer in form.answers %} -->
+<!-- <li class="list-group-item"> -->
+ <!-- {{ answer }} -->
+<!-- </li> -->
+<!-- {% endfor %} -->
</ul>
<input type="submit" value="Check" class="btn btn-large btn-block btn-warning" >
content='squawk')
self.question1.quiz.add(self.quiz1)
+ self.answer1 = Answer.objects.create(id=123,
+ question=self.question1,
+ content='bing',
+ correct=False)
+
self.question2 = MCQuestion.objects.create(id=2,
content='squeek')
self.question2.quiz.add(self.quiz1)
+ self.answer2 = Answer.objects.create(id=456,
+ question=self.question2,
+ content='bong',
+ correct=True)
+
self.user = User.objects.create_user(username='jacob',
email='jacob@jacob.com',
password='top_secret')
self.assertEqual(self.sitting.complete, True)
def test_add_user_answer(self):
- self.answer1 = Answer.objects.create(id=123,
- question=self.question1,
- content='bing',
- correct=False)
guess = '123'
self.sitting.add_user_answer(self.question1, guess)
self.assertIn('123', self.sitting.user_answers)
+ def test_return_questions_with_answers(self):
+ self.sitting.add_user_answer(self.question1, '123')
+ self.sitting.add_user_answer(self.question2, '456')
+
+ user_answers = self.sitting.questions_with_user_answers()
+ self.assertEqual('123', user_answers[self.question1])
+ self.assertEqual('456', user_answers[self.question2])
+
'''
Tests relating to views
from django.utils.decorators import method_decorator
from django.views.generic import DetailView, ListView, TemplateView, FormView
-from .forms import QuestionForm
+from .forms import QuestionForm, EssayForm
from .models import Quiz, Category, Progress, Sitting, Question
-
+from Essay_Question.models import Essay_Question
class QuizMarkerMixin(object):
@method_decorator(login_required)
if self.sitting is False:
return render(request, 'single_complete.html')
- return super(QuizTake, self).dispatch(self.request, *args, **kwargs)
-
- def get_form_kwargs(self):
- kwargs = super(QuizTake, self).get_form_kwargs()
if self.request.user.is_authenticated() is True:
self.question = self.sitting.get_first_question()
else:
self.question = anon_next_question(self)
+ return super(QuizTake, self).dispatch(self.request, *args, **kwargs)
+
+ def get_form(self, form_class):
+ if self.question.__class__ is Essay_Question:
+ form_class = EssayForm
+ return form_class(**self.get_form_kwargs())
+
+ def get_form_kwargs(self):
+ kwargs = super(QuizTake, self).get_form_kwargs()
return dict(kwargs, question=self.question)
def form_valid(self, form):
def get_answers_list(self):
return [(True, True), (False, False)]
+ def answer_choice_to_string(self, guess):
+ return str(guess)
+
class Meta:
verbose_name = "True/False Question"
verbose_name_plural = "True/False Questions"
'content': 'True'},
{'correct': False,
'content': 'False'}])
+ self.assertEqual(self.red.answer_choice_to_string('True'), 'True')