Merge pull request #18657 from open-craft/jill/dont-delete-enrollments
Do not delete course enrollments
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.14 on 2018-07-27 01:44
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('student', '0015_manualenrollmentaudit_add_role'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='courseenrollment',
|
||||
name='course',
|
||||
field=models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='course_overviews.CourseOverview'),
|
||||
),
|
||||
]
|
||||
@@ -1162,7 +1162,7 @@ class CourseEnrollment(models.Model):
|
||||
course = models.ForeignKey(
|
||||
CourseOverview,
|
||||
db_constraint=False,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.DO_NOTHING,
|
||||
)
|
||||
|
||||
@property
|
||||
|
||||
@@ -207,6 +207,42 @@ class CourseEnrollmentTests(SharedModuleStoreTestCase):
|
||||
self.assertIsNotNone(enrollment.schedule)
|
||||
self.assertIsNone(enrollment.upgrade_deadline)
|
||||
|
||||
@skip_unless_lms
|
||||
# NOTE: We mute the post_save signal to prevent Schedules from being created for new enrollments
|
||||
@factory.django.mute_signals(signals.post_save)
|
||||
def test_enrollments_not_deleted(self):
|
||||
""" Recreating a CourseOverview with an outdated version should not delete the associated enrollment. """
|
||||
course = CourseFactory(self_paced=True)
|
||||
CourseModeFactory(
|
||||
course_id=course.id,
|
||||
mode_slug=CourseMode.VERIFIED,
|
||||
# This must be in the future to ensure it is returned by downstream code.
|
||||
expiration_datetime=datetime.datetime.now(pytz.UTC) + datetime.timedelta(days=30),
|
||||
)
|
||||
|
||||
# Create a CourseOverview with an outdated version
|
||||
course_overview = CourseOverview.load_from_module_store(course.id)
|
||||
course_overview.version = CourseOverview.VERSION - 1
|
||||
course_overview.save()
|
||||
|
||||
# Create an inactive enrollment with this course overview
|
||||
enrollment = CourseEnrollmentFactory(
|
||||
user=self.user,
|
||||
course_id=course.id,
|
||||
mode=CourseMode.AUDIT,
|
||||
course=course_overview,
|
||||
)
|
||||
|
||||
# Re-fetch the CourseOverview record.
|
||||
# As a side effect, this will recreate the record, and update the version.
|
||||
course_overview_new = CourseOverview.get_from_id(course.id)
|
||||
self.assertEqual(course_overview_new.version, CourseOverview.VERSION)
|
||||
|
||||
# Ensure that the enrollment record was unchanged during this re-creation
|
||||
enrollment_refetched = CourseEnrollment.objects.filter(id=enrollment.id)
|
||||
self.assertTrue(enrollment_refetched.exists())
|
||||
self.assertEqual(enrollment_refetched.all()[0], enrollment)
|
||||
|
||||
|
||||
class PendingNameChangeTests(SharedModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user