feat: disable allowed enrollment if enrollment closed
This commit is contained in:
committed by
Piotr Surowiec
parent
d7f2b555c7
commit
99cd4a4715
@@ -830,6 +830,13 @@ def user_post_save_callback(sender, **kwargs):
|
||||
cea.save()
|
||||
continue
|
||||
|
||||
# Skip auto enrollment of user if enrollment is not open for the course
|
||||
# We are checking this here instead of passing check_access=True to CourseEnrollment.enroll()
|
||||
# as we want to skip course full check.
|
||||
if CourseEnrollment.is_enrollment_closed(user, CourseOverview.get_from_id(cea.course_id)):
|
||||
log.info(f'Skipping auto enrollment of user as enrollment for course {cea.course_id} has ended')
|
||||
continue
|
||||
|
||||
enrollment = CourseEnrollment.enroll(user, cea.course_id)
|
||||
|
||||
manual_enrollment_audit = ManualEnrollmentAudit.get_manual_enrollment_by_email(user.email)
|
||||
|
||||
@@ -26,6 +26,7 @@ from openedx_events.learning.signals import ( # lint-amnesty, pylint: disable=w
|
||||
COURSE_UNENROLLMENT_COMPLETED,
|
||||
)
|
||||
from openedx_events.tests.utils import OpenEdxEventsTestMixin # lint-amnesty, pylint: disable=wrong-import-order
|
||||
from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory
|
||||
from openedx.core.djangolib.testing.utils import skip_unless_lms
|
||||
|
||||
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
|
||||
@@ -181,6 +182,10 @@ class TestUserEvents(UserSettingsEventTestMixin, TestCase):
|
||||
"""
|
||||
pending_enrollment = CourseEnrollmentAllowedFactory(auto_enroll=True) # lint-amnesty, pylint: disable=unused-variable
|
||||
|
||||
# Create a CourseOverview for the enrollment course
|
||||
course_overview = CourseOverviewFactory.create(id=pending_enrollment.course_id)
|
||||
course_overview.save()
|
||||
|
||||
# the e-mail will change to test@edx.org (from something else)
|
||||
assert self.user.email != 'test@edx.org'
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import pytz
|
||||
from crum import set_current_request
|
||||
from django.contrib.auth.models import AnonymousUser, User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.core.cache import cache
|
||||
from django.conf import settings
|
||||
from django.db.models import signals # pylint: disable=unused-import
|
||||
from django.db.models.functions import Lower
|
||||
from django.test import TestCase, override_settings
|
||||
@@ -39,6 +40,7 @@ from lms.djangoapps.courseware.toggles import (
|
||||
COURSEWARE_MICROFRONTEND_PROGRESS_MILESTONES_STREAK_CELEBRATION,
|
||||
)
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory
|
||||
from openedx.core.djangoapps.schedules.models import Schedule
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
from openedx.core.djangolib.testing.utils import skip_unless_lms
|
||||
@@ -760,6 +762,42 @@ class TestUserPostSaveCallback(SharedModuleStoreTestCase):
|
||||
assert actual_student.is_active is True
|
||||
assert actual_cea.user == student
|
||||
|
||||
@ddt.data(False, True)
|
||||
def test_auto_enrollment_if_course_enrollment_closed(self, feature_enabled):
|
||||
"""
|
||||
Test the following scenarios
|
||||
|
||||
1. Invited students who register when enrollment is closed are not enrolled if
|
||||
DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED is True
|
||||
|
||||
2. Invited students who register when enrollment is closed are enrolled if
|
||||
DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED is False
|
||||
"""
|
||||
|
||||
def register_and_enroll_student():
|
||||
student = self._set_up_invited_student(
|
||||
course=self.course,
|
||||
active=False,
|
||||
enrolled=False
|
||||
)
|
||||
student.is_active = True
|
||||
# trigger the post_save callback
|
||||
student.save()
|
||||
return CourseEnrollment.get_enrollment(student, self.course.id)
|
||||
|
||||
# Set enrollment end date to a past date so that enrollment is ended
|
||||
enrollment_end = datetime.datetime.now(pytz.UTC) - datetime.timedelta(days=2)
|
||||
course_overview = CourseOverviewFactory.create(id=self.course.id, enrollment_end=enrollment_end)
|
||||
course_overview.save()
|
||||
|
||||
if feature_enabled:
|
||||
with override_settings(
|
||||
FEATURES={**settings.FEATURES, 'DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED': True}
|
||||
):
|
||||
assert register_and_enroll_student() is None
|
||||
else:
|
||||
assert register_and_enroll_student() is not None
|
||||
|
||||
def test_verified_student_not_downgraded_when_changing_email(self):
|
||||
"""
|
||||
Make sure that verified students do not get downgrade if they are active + changing their email.
|
||||
|
||||
Reference in New Issue
Block a user