The existing pattern of using `override_settings(MODULESTORE=...)` prevented
us from having more than one layer of subclassing in modulestore tests.
In a structure like:
@override_settings(MODULESTORE=store_a)
class BaseTestCase(ModuleStoreTestCase):
def setUp(self):
# use store
@override_settings(MODULESTORE=store_b)
class ChildTestCase(BaseTestCase):
def setUp(self):
# use store
In this case, the store actions performed in `BaseTestCase` on behalf of
`ChildTestCase` would still use `store_a`, even though the `ChildTestCase`
had specified to use `store_b`. This is because the `override_settings`
decorator would be the innermost wrapper around the `BaseTestCase.setUp` method,
no matter what `ChildTestCase` does.
To remedy this, we move the call to `override_settings` into the
`ModuleStoreTestCase.setUp` method, and use a cleanup to remove the override.
Subclasses can just defined the `MODULESTORE` class attribute to specify which
modulestore to use _for the entire `setUp` chain_.
[PLAT-419]
120 lines
3.9 KiB
Python
120 lines
3.9 KiB
Python
"""
|
|
Python tests for the Survey models
|
|
"""
|
|
|
|
from collections import OrderedDict
|
|
|
|
from django.test import TestCase
|
|
from django.test.client import Client
|
|
from django.contrib.auth.models import User
|
|
|
|
from survey.models import SurveyForm
|
|
|
|
from xmodule.modulestore.tests.factories import CourseFactory
|
|
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
|
|
|
from survey.utils import is_survey_required_for_course, must_answer_survey
|
|
|
|
|
|
class SurveyModelsTests(ModuleStoreTestCase):
|
|
"""
|
|
All tests for the utils.py file
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
Set up the test data used in the specific tests
|
|
"""
|
|
super(SurveyModelsTests, self).setUp()
|
|
|
|
self.client = Client()
|
|
|
|
# Create two accounts
|
|
self.password = 'abc'
|
|
self.student = User.objects.create_user('student', 'student@test.com', self.password)
|
|
self.student2 = User.objects.create_user('student2', 'student2@test.com', self.password)
|
|
|
|
self.staff = User.objects.create_user('staff', 'staff@test.com', self.password)
|
|
self.staff.is_staff = True
|
|
self.staff.save()
|
|
|
|
self.test_survey_name = 'TestSurvey'
|
|
self.test_form = '<input name="foo"></input>'
|
|
|
|
self.student_answers = OrderedDict({
|
|
'field1': 'value1',
|
|
'field2': 'value2',
|
|
})
|
|
|
|
self.student2_answers = OrderedDict({
|
|
'field1': 'value3'
|
|
})
|
|
|
|
self.course = CourseFactory.create(
|
|
course_survey_required=True,
|
|
course_survey_name=self.test_survey_name
|
|
)
|
|
|
|
self.survey = SurveyForm.create(self.test_survey_name, self.test_form)
|
|
|
|
def test_is_survey_required_for_course(self):
|
|
"""
|
|
Assert the a requried course survey is when both the flags is set and a survey name
|
|
is set on the course descriptor
|
|
"""
|
|
self.assertTrue(is_survey_required_for_course(self.course))
|
|
|
|
def test_is_survey_not_required_for_course(self):
|
|
"""
|
|
Assert that if various data is not available or if the survey is not found
|
|
then the survey is not considered required
|
|
"""
|
|
course = CourseFactory.create()
|
|
self.assertFalse(is_survey_required_for_course(course))
|
|
|
|
course = CourseFactory.create(
|
|
course_survey_required=False
|
|
)
|
|
self.assertFalse(is_survey_required_for_course(course))
|
|
|
|
course = CourseFactory.create(
|
|
course_survey_required=True,
|
|
course_survey_name="NonExisting"
|
|
)
|
|
self.assertFalse(is_survey_required_for_course(course))
|
|
|
|
course = CourseFactory.create(
|
|
course_survey_required=False,
|
|
course_survey_name=self.test_survey_name
|
|
)
|
|
self.assertFalse(is_survey_required_for_course(course))
|
|
|
|
def test_user_not_yet_answered_required_survey(self):
|
|
"""
|
|
Assert that a new course which has a required survey but user has not answered it yet
|
|
"""
|
|
self.assertTrue(must_answer_survey(self.course, self.student))
|
|
|
|
temp_course = CourseFactory.create(
|
|
course_survey_required=False
|
|
)
|
|
self.assertFalse(must_answer_survey(temp_course, self.student))
|
|
|
|
temp_course = CourseFactory.create(
|
|
course_survey_required=True,
|
|
course_survey_name="NonExisting"
|
|
)
|
|
self.assertFalse(must_answer_survey(temp_course, self.student))
|
|
|
|
def test_user_has_answered_required_survey(self):
|
|
"""
|
|
Assert that a new course which has a required survey and user has answers for it
|
|
"""
|
|
self.survey.save_user_answers(self.student, self.student_answers)
|
|
self.assertFalse(must_answer_survey(self.course, self.student))
|
|
|
|
def test_staff_must_answer_survey(self):
|
|
"""
|
|
Assert that someone with staff level permissions does not have to answer the survey
|
|
"""
|
|
self.assertFalse(must_answer_survey(self.course, self.staff))
|