from django.http import HttpRequest
from django.test import TestCase
from django.test.client import Client, RequestFactory
+from django.template import Template, Context
from quiz.models import Category, Quiz, Progress, Sitting, Question
class TestCategory(TestCase):
def setUp(self):
- Category.objects.new_category(category = "elderberries")
- Category.objects.new_category(category = "straw.berries")
- Category.objects.new_category(category = "black berries")
- Category.objects.new_category(category = "squishy berries")
+ Category.objects.new_category(category = 'elderberries')
+ Category.objects.new_category(category = 'straw.berries')
+ Category.objects.new_category(category = 'black berries')
+ Category.objects.new_category(category = 'squishy berries')
def test_categories(self):
c1 = Category.objects.get(id = 1)
c3 = Category.objects.get(id = 3)
c4 = Category.objects.get(id = 4)
- self.assertEqual(c1.category, "elderberries")
- self.assertEqual(c2.category, "straw.berries")
- self.assertEqual(c3.category, "black-berries")
- self.assertEqual(c4.category, "squishy-berries")
+ self.assertEqual(c1.category, 'elderberries')
+ self.assertEqual(c2.category, 'straw.berries')
+ self.assertEqual(c3.category, 'black-berries')
+ self.assertEqual(c4.category, 'squishy-berries')
class TestQuiz(TestCase):
def setUp(self):
- Category.objects.new_category(category = "elderberries")
+ Category.objects.new_category(category = 'elderberries')
Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",)
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',)
Quiz.objects.create(id = 2,
- title = "test quiz 2",
- description = "d2",
- url = "t q2",)
+ title = 'test quiz 2',
+ description = 'd2',
+ url = 't q2',)
Quiz.objects.create(id = 3,
- title = "test quiz 3",
- description = "d3",
- url = "t q3",)
+ title = 'test quiz 3',
+ description = 'd3',
+ url = 't q3',)
Quiz.objects.create(id = 4,
- title = "test quiz 4",
- description = "d4",
- url = "t-!£$%^&*q4",)
+ title = 'test quiz 4',
+ description = 'd4',
+ url = 't-!£$%^&*q4',)
def test_quiz_url(self):
q3 = Quiz.objects.get(id = 3)
q4 = Quiz.objects.get(id = 4)
- self.assertEqual(q1.url, "tq1")
- self.assertEqual(q2.url, "t-q2")
- self.assertEqual(q3.url, "t-q3")
- self.assertEqual(q4.url, "t-q4")
+ self.assertEqual(q1.url, 'tq1')
+ self.assertEqual(q2.url, 't-q2')
+ self.assertEqual(q3.url, 't-q3')
+ self.assertEqual(q4.url, 't-q4')
def test_quiz_options(self):
c1 = Category.objects.get(id = 1)
q5 = Quiz.objects.create(id = 5,
- title = "test quiz 5",
- description = "d5",
- url = "tq5",
+ title = 'test quiz 5',
+ description = 'd5',
+ url = 'tq5',
category = c1,
exam_paper = True,)
class TestProgress(TestCase):
def setUp(self):
- Category.objects.new_category(category = "elderberries")
+ Category.objects.new_category(category = 'elderberries')
Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",)
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',)
- self.user = User.objects.create_user(username = "jacob",
- email = "jacob@jacob.com",
- password = "top_secret")
+ self.user = User.objects.create_user(username = 'jacob',
+ email = 'jacob@jacob.com',
+ password = 'top_secret')
def test_list_all_empty(self):
p1 = Progress.objects.new_progress(self.user)
- self.assertEqual(p1.score, "")
+ self.assertEqual(p1.score, '')
category_dict = p1.list_all_cat_scores()
category_dict = p1.list_all_cat_scores()
- self.assertIn("elderberries", p1.score)
+ self.assertIn('elderberries', p1.score)
- Category.objects.new_category(category = "cheese")
+ Category.objects.new_category(category = 'cheese')
category_dict = p1.list_all_cat_scores()
- self.assertIn("cheese", p1.score)
+ self.assertIn('cheese', p1.score)
def test_check_cat(self):
p1 = Progress.objects.new_progress(self.user)
- elderberry_score = p1.check_cat_score("elderberries")
+ elderberry_score = p1.check_cat_score('elderberries')
self.assertEqual(elderberry_score, (0, 0))
- fake_score = p1.check_cat_score("monkey")
+ fake_score = p1.check_cat_score('monkey')
- self.assertEqual(fake_score, ("error", "category does not exist"))
+ self.assertEqual(fake_score, ('error', 'category does not exist'))
- Category.objects.new_category(category = "cheese")
- cheese_score = p1.check_cat_score("cheese")
+ Category.objects.new_category(category = 'cheese')
+ cheese_score = p1.check_cat_score('cheese')
self.assertEqual(cheese_score, (0, 0))
- self.assertIn("cheese", p1.score)
+ self.assertIn('cheese', p1.score)
def test_update_score(self):
p1 = Progress.objects.new_progress(self.user)
p1.list_all_cat_scores()
- p1.update_score("elderberries", 1, 2)
- elderberry_score = p1.check_cat_score("elderberries")
+ p1.update_score('elderberries', 1, 2)
+ elderberry_score = p1.check_cat_score('elderberries')
self.assertEqual(elderberry_score, (1, 2))
- Category.objects.new_category(category = "cheese")
- p1.update_score("cheese", 3, 4)
- cheese_score = p1.check_cat_score("cheese")
+ Category.objects.new_category(category = 'cheese')
+ p1.update_score('cheese', 3, 4)
+ cheese_score = p1.check_cat_score('cheese')
self.assertEqual(cheese_score, (3, 4))
- fake_cat = p1.update_score("hamster", 3, 4)
+ fake_cat = p1.update_score('hamster', 3, 4)
self.assertIn('error', str(fake_cat))
- non_int = p1.update_score("hamster", "1", "a")
+ non_int = p1.update_score('hamster', '1', 'a')
self.assertIn('error', str(non_int))
class TestSitting(TestCase):
def setUp(self):
quiz1 = Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",)
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',)
question1 = MCQuestion.objects.create(id = 1,
- content = "squawk",)
+ content = 'squawk',)
question1.quiz.add(quiz1)
question2 = MCQuestion.objects.create(id = 2,
- content = "squeek",)
+ content = 'squeek',)
question2.quiz.add(quiz1)
- self.user = User.objects.create_user(username = "jacob",
- email = "jacob@jacob.com",
- password = "top_secret")
+ self.user = User.objects.create_user(username = 'jacob',
+ email = 'jacob@jacob.com',
+ password = 'top_secret')
Sitting.objects.new_sitting(self.user, quiz1)
question1 = MCQuestion.objects.get(id = 1)
s1.add_incorrect_question(question1)
- self.assertIn("1", s1.get_incorrect_questions())
+ self.assertIn('1', s1.get_incorrect_questions())
question3 = TF_Question.objects.create(id = 3,
- content = "oink",)
+ content = 'oink',)
s1.add_incorrect_question(question3)
- self.assertIn("3", s1.get_incorrect_questions())
+ self.assertIn('3', s1.get_incorrect_questions())
quiz = Quiz.objects.get(id = 1)
f_test = s1.add_incorrect_question(quiz)
self.assertEqual(f_test, False)
- self.assertNotIn("test", s1.get_incorrect_questions())
+ self.assertNotIn('test', s1.get_incorrect_questions())
self.assertEqual(s1.complete, False)
s1.mark_quiz_complete()
self.assertEqual(s1.complete, True)
-"""
+'''
Tests relating to views
-"""
+'''
class TestNonQuestionViews(TestCase):
- """
+ '''
Starting on questions not directly involved with questions.
- """
+ '''
def setUp(self):
- Category.objects.new_category(category = "elderberries")
+ Category.objects.new_category(category = 'elderberries')
c1 = Category.objects.get(id = 1)
- Category.objects.new_category(category = "straw.berries")
- Category.objects.new_category(category = "black berries")
+ Category.objects.new_category(category = 'straw.berries')
+ Category.objects.new_category(category = 'black berries')
Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',
category = c1)
Quiz.objects.create(id = 2,
- title = "test quiz 2",
- description = "d2",
- url = "t q2",)
+ title = 'test quiz 2',
+ description = 'd2',
+ url = 't q2',)
def test_index(self):
self.assertContains(response, 'Sign up')
session = self.client.session
- session["session_score"] = 1
- session["session_score_possible"] = 2
+ session['session_score'] = 1
+ session['session_score_possible'] = 2
session.save()
response = self.client.get('/q/progress/')
self.assertContains(response, '1 out of 2')
def test_progress_user(self):
- self.user = User.objects.create_user(username = "jacob",
- email = "jacob@jacob.com",
- password = "top_secret")
+ self.user = User.objects.create_user(username = 'jacob',
+ email = 'jacob@jacob.com',
+ password = 'top_secret')
self.client.login(username='jacob', password='top_secret')
p1 = Progress.objects.new_progress(self.user)
- p1.update_score("elderberries", 1, 2)
+ p1.update_score('elderberries', 1, 2)
response = self.client.get('/q/progress/')
- self.assertContains(response, "elderberries")
+ self.assertContains(response, 'elderberries')
class TestQuestionViewsAnon(TestCase):
def setUp(self):
- Category.objects.new_category(category = "elderberries")
+ Category.objects.new_category(category = 'elderberries')
c1 = Category.objects.get(id = 1)
quiz1 = Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',
category = c1)
question1 = MCQuestion.objects.create(id = 1,
- content = "squawk",)
+ content = 'squawk',)
question1.quiz.add(quiz1)
question2 = MCQuestion.objects.create(id = 2,
- content = "squeek",)
+ content = 'squeek',)
question2.quiz.add(quiz1)
Answer.objects.create(id = 123,
question = question1,
- content = "bing",
+ content = 'bing',
correct = False,)
Answer.objects.create(id = 456,
question = question2,
- content = "bong",
+ content = 'bong',
correct = True,)
def test_quiz_take_anon_view_only(self):
self.assertEqual(self.client.session['1_score'], 0)
self.assertEqual(self.client.session['page_count'], 0)
self.assertEqual(response.context['quiz'].id, 1)
- self.assertEqual(response.context['question'].content, "squawk")
- self.assertEqual(response.context['question_type'], "MCQuestion")
+ self.assertEqual(response.context['question'].content, 'squawk')
+ self.assertEqual(response.context['question_type'], 'MCQuestion')
self.assertEqual(response.context['previous'], {})
self.assertEqual(response.context['show_advert'], False)
self.assertTemplateUsed('question.html')
class TestQuestionViewsUser(TestCase):
def setUp(self):
- Category.objects.new_category(category = "elderberries")
+ Category.objects.new_category(category = 'elderberries')
c1 = Category.objects.get(id = 1)
quiz1 = Quiz.objects.create(id = 1,
- title = "test quiz 1",
- description = "d1",
- url = "tq1",
+ title = 'test quiz 1',
+ description = 'd1',
+ url = 'tq1',
category = c1)
quiz2 = Quiz.objects.create(id = 2,
- title = "test quiz 2",
- description = "d2",
- url = "tq2",
+ title = 'test quiz 2',
+ description = 'd2',
+ url = 'tq2',
category = c1,
answers_at_end = True,
exam_paper = True)
- self.user = User.objects.create_user(username = "jacob",
- email = "jacob@jacob.com",
- password = "top_secret")
+ self.user = User.objects.create_user(username = 'jacob',
+ email = 'jacob@jacob.com',
+ password = 'top_secret')
question1 = MCQuestion.objects.create(id = 1,
- content = "squawk")
+ content = 'squawk')
question1.quiz.add(quiz1)
question1.quiz.add(quiz2)
question2 = MCQuestion.objects.create(id = 2,
- content = "squeek")
+ content = 'squeek')
question2.quiz.add(quiz1)
question3 = TF_Question.objects.create(id = 3,
- content = "oink",
+ content = 'oink',
correct = True)
question3.quiz.add(quiz2)
Answer.objects.create(id = 123,
question = question1,
- content = "bing",
+ content = 'bing',
correct = False,)
Answer.objects.create(id = 456,
question = question2,
- content = "bong",
+ content = 'bong',
correct = True,)
def test_quiz_take_user_view_only(self):
self.assertEqual(sitting.current_score, 0)
self.assertEqual(self.client.session['page_count'], 0)
self.assertEqual(response.context['quiz'].id, 1)
- self.assertEqual(response.context['question'].content, "squawk")
- self.assertEqual(response.context['question_type'], "MCQuestion")
+ self.assertEqual(response.context['question'].content, 'squawk')
+ self.assertEqual(response.context['question_type'], 'MCQuestion')
self.assertEqual(response.context['previous'], {})
self.assertEqual(response.context['show_advert'], False)
self.assertTemplateUsed('question.html')
self.assertEqual(sitting.question_list, '2,')
self.assertEqual(self.client.session['page_count'], 1)
self.assertIn('123', response.context['previous']['previous_answer'])
- self.assertEqual(response.context['question'].content, "squeek")
+ self.assertEqual(response.context['question'].content, 'squeek')
self.assertTemplateUsed('question.html')
response = self.client.get('/q/tq1/',
self.assertIn(question1, response.context['questions'])
self.assertIn(question2, response.context['questions'])
self.assertContains(response, 'correctly')
- self.assertContains(response, 'incorrectly')
+ self.assertNotContains(response, 'incorrectly')
self.assertContains(response, 'True')
self.assertEqual(Sitting.objects.count(), 1)
# test that exam result can be recalled later
self.assertIn(sitting, progress.show_exams())
+
+class TestTemplateTags(TestCase):
+
+ def setUp(self):
+ self.question1 = MCQuestion.objects.create(id = 1,
+ content = 'squawk')
+
+ self.answer1 = Answer.objects.create(id = 123,
+ question = self.question1,
+ content = 'bing',
+ correct = False,)
+
+ self.answer2 = Answer.objects.create(id = 456,
+ question = self.question1,
+ content = 'bong',
+ correct = True,)
+
+ self.question2 = TF_Question.objects.create(id = 3,
+ content = 'oink',
+ correct = True)
+
+ def test_answers_mc(self):
+ template = Template( '{% load quiz_tags %}' +
+ '{% answers_for_mc_question question %}')
+ context = Context({'question': self.question1})
+
+ self.assertTemplateUsed('answers_for_mc_question.html')
+ self.assertIn('bing', template.render(context))
+
+ def test_correct_answer_MC(self):
+ template = Template( '{% load quiz_tags %}' +
+ '{% correct_answer previous %}')
+
+ previous_MC = {'previous_answer': 123,
+ 'previous_outcome': 'incorrect',
+ 'previous_question': self.question1}
+
+ context = Context({'previous': previous_MC})
+
+ self.assertTemplateUsed('correct_answer.html')
+ self.assertIn('bing', template.render(context))
+ self.assertIn('bong', template.render(context))
+ self.assertIn('your answer', template.render(context))
+
+ def test_correct_answer_TF(self):
+ template = Template( '{% load quiz_tags %}' +
+ '{% correct_answer previous %}')
+
+ previous_TF = {'previous_answer': 'T',
+ 'previous_outcome': 'correct',
+ 'previous_question': self.question2}
+
+ context = Context({'previous': previous_TF})
+
+ self.assertTemplateUsed('correct_answer.html')
+ self.assertIn('True', template.render(context))
+ self.assertIn('False', template.render(context))
+ self.assertNotIn('your answer', template.render(context))