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]
50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
from django.test.utils import override_settings
|
|
from mock import patch
|
|
|
|
from openedx.core.djangoapps.course_groups.models import CourseUserGroup
|
|
from xmodule.modulestore.tests.django_utils import TEST_DATA_MOCK_MODULESTORE
|
|
from django_comment_common.models import Role
|
|
from django_comment_common.utils import seed_permissions_roles
|
|
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
|
from xmodule.modulestore.tests.factories import CourseFactory
|
|
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
|
|
|
|
|
class CohortedContentTestCase(ModuleStoreTestCase):
|
|
"""
|
|
Sets up a course with a student, a moderator and their cohorts.
|
|
"""
|
|
@patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True})
|
|
def setUp(self):
|
|
super(CohortedContentTestCase, self).setUp()
|
|
|
|
self.course = CourseFactory.create(
|
|
discussion_topics={
|
|
"cohorted topic": {"id": "cohorted_topic"},
|
|
"non-cohorted topic": {"id": "non_cohorted_topic"},
|
|
},
|
|
cohort_config={
|
|
"cohorted": True,
|
|
"cohorted_discussions": ["cohorted_topic"]
|
|
}
|
|
)
|
|
self.student_cohort = CourseUserGroup.objects.create(
|
|
name="student_cohort",
|
|
course_id=self.course.id,
|
|
group_type=CourseUserGroup.COHORT
|
|
)
|
|
self.moderator_cohort = CourseUserGroup.objects.create(
|
|
name="moderator_cohort",
|
|
course_id=self.course.id,
|
|
group_type=CourseUserGroup.COHORT
|
|
)
|
|
|
|
seed_permissions_roles(self.course.id)
|
|
self.student = UserFactory.create()
|
|
self.moderator = UserFactory.create()
|
|
CourseEnrollmentFactory(user=self.student, course_id=self.course.id)
|
|
CourseEnrollmentFactory(user=self.moderator, course_id=self.course.id)
|
|
self.moderator.roles.add(Role.objects.get(name="Moderator", course_id=self.course.id))
|
|
self.student_cohort.users.add(self.student)
|
|
self.moderator_cohort.users.add(self.moderator)
|