Skip to content
Snippets Groups Projects
Unverified Commit 28f09c38 authored by Alessandro Roux's avatar Alessandro Roux Committed by GitHub
Browse files

Merge pull request #17988 from edx/unlink-courseenrollment-allowed

EDUCATOR-2688: Retire users in CourseEnrollmentAllowed model.
parents e50fc86c 5b9d3473
No related merge requests found
......@@ -2091,7 +2091,7 @@ class ManualEnrollmentAudit(models.Model):
return manual_enrollment
class CourseEnrollmentAllowed(models.Model):
class CourseEnrollmentAllowed(DeletableByUserValue, models.Model):
"""
Table of users (specified by email address strings) who are allowed to enroll in a specified course.
The user may or may not (yet) exist. Enrollment by users listed in this table is allowed
......
......@@ -10,15 +10,17 @@ from django.contrib.auth.models import AnonymousUser
from django.core.cache import cache
from django.db.models import signals
from django.db.models.functions import Lower
from django.test import TestCase
from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory
from courseware.models import DynamicUpgradeDeadlineConfiguration
from opaque_keys.edx.keys import CourseKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.schedules.models import Schedule
from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory
from openedx.core.djangolib.testing.utils import skip_unless_lms
from student.models import CourseEnrollment, PendingEmailChange
from student.models import CourseEnrollment, CourseEnrollmentAllowed, PendingEmailChange
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
......@@ -226,3 +228,39 @@ class PendingEmailChangeTests(SharedModuleStoreTestCase):
record_was_deleted = PendingEmailChange.delete_by_user_value(self.user2, field='user')
self.assertFalse(record_was_deleted)
self.assertEqual(1, len(PendingEmailChange.objects.all()))
class TestCourseEnrollmentAllowed(TestCase):
def setUp(self):
super(TestCourseEnrollmentAllowed, self).setUp()
self.email = 'learner@example.com'
self.course_key = CourseKey.from_string("course-v1:edX+DemoX+Demo_Course")
self.user = UserFactory.create()
self.allowed_enrollment = CourseEnrollmentAllowed.objects.create(
email=self.email,
course_id=self.course_key,
user=self.user
)
def test_retiring_user_deletes_record(self):
is_successful = CourseEnrollmentAllowed.delete_by_user_value(
value=self.email,
field='email'
)
self.assertTrue(is_successful)
user_search_results = CourseEnrollmentAllowed.objects.filter(
email=self.email
)
self.assertFalse(user_search_results)
def test_retiring_nonexistent_user_doesnt_modify_records(self):
is_successful = CourseEnrollmentAllowed.delete_by_user_value(
value='nonexistentlearner@example.com',
field='email'
)
self.assertFalse(is_successful)
user_search_results = CourseEnrollmentAllowed.objects.filter(
email=self.email
)
self.assertTrue(user_search_results.exists())
......@@ -17,7 +17,7 @@ class DeprecatedModelMixin(object):
class DeletableByUserValue(object):
"""
This mixin allows inheriting models to delete instances of the model
associated with some user.
associated with some specified user.
"""
@classmethod
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment