Files
edx-platform/lms/djangoapps/grades/config/tests/test_models.py
2021-02-22 12:58:41 +05:00

94 lines
3.6 KiB
Python

"""
Tests for the models that control the
persistent grading feature.
"""
import itertools
from unittest.mock import patch
import ddt
from django.conf import settings
from django.test import TestCase
from opaque_keys.edx.locator import CourseLocator
from lms.djangoapps.grades.config.models import PersistentGradesEnabledFlag
from lms.djangoapps.grades.config.tests.utils import persistent_grades_feature_flags
@patch.dict(settings.FEATURES, {'PERSISTENT_GRADES_ENABLED_FOR_ALL_TESTS': False})
@ddt.ddt
class PersistentGradesFeatureFlagTests(TestCase):
"""
Tests the behavior of the feature flags for persistent grading.
These are set via Django admin settings.
"""
def setUp(self):
super().setUp()
self.course_id_1 = CourseLocator(org="edx", course="course", run="run")
self.course_id_2 = CourseLocator(org="edx", course="course2", run="run")
@ddt.data(*itertools.product(
(True, False),
(True, False),
(True, False),
))
@ddt.unpack
def test_persistent_grades_feature_flags(self, global_flag, enabled_for_all_courses, enabled_for_course_1):
with persistent_grades_feature_flags(
global_flag=global_flag,
enabled_for_all_courses=enabled_for_all_courses,
course_id=self.course_id_1,
enabled_for_course=enabled_for_course_1
):
assert PersistentGradesEnabledFlag.feature_enabled() == global_flag
assert PersistentGradesEnabledFlag.feature_enabled(
self.course_id_1
) == (global_flag and (enabled_for_all_courses or enabled_for_course_1))
assert PersistentGradesEnabledFlag.feature_enabled(
self.course_id_2
) == (global_flag and enabled_for_all_courses)
def test_enable_disable_course_flag(self):
"""
Ensures that the flag, once enabled for a course, can also be disabled.
"""
with persistent_grades_feature_flags(
global_flag=True,
enabled_for_all_courses=False,
course_id=self.course_id_1,
enabled_for_course=True
):
assert PersistentGradesEnabledFlag.feature_enabled(self.course_id_1)
# Prior to TNL-5698, creating a second object would fail due to db constraints
with persistent_grades_feature_flags(
global_flag=True,
enabled_for_all_courses=False,
course_id=self.course_id_1,
enabled_for_course=False
):
assert not PersistentGradesEnabledFlag.feature_enabled(self.course_id_1)
def test_enable_disable_globally(self):
"""
Ensures that the flag, once enabled globally, can also be disabled.
"""
with persistent_grades_feature_flags(
global_flag=True,
enabled_for_all_courses=True,
):
assert PersistentGradesEnabledFlag.feature_enabled()
assert PersistentGradesEnabledFlag.feature_enabled(self.course_id_1)
with persistent_grades_feature_flags(
global_flag=True,
enabled_for_all_courses=False,
):
assert PersistentGradesEnabledFlag.feature_enabled()
assert not PersistentGradesEnabledFlag.feature_enabled(self.course_id_1)
with persistent_grades_feature_flags(
global_flag=False,
):
assert not PersistentGradesEnabledFlag.feature_enabled()
assert not PersistentGradesEnabledFlag.feature_enabled(self.course_id_1)