Features coming down the pipe will want to be able to: * Refer to enrollments before they are actually activated (approval step). * See what courses a user used to be enrolled in for when they re-enroll in the same course, or a different run of that course. * Have different "modes" of enrolling in a course, representing things like honor certificate enrollment, auditing (no certs), etc. This change adds an is_active flag and mode (with default being "honor"). The commit is only as large as it is because many parts of the codebase were manipulating enrollments by adding and removing CourseEnrollment objects directly. It was necessary to create classmethods on CourseEnrollment to encapsulate this functionality and then port everything over to using them. The migration to add columns has been tested on a prod replica, and seems to be fine for running on a live system with single digit millions of rows of enrollments.
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from django.test import TestCase
|
|
|
|
from django_comment_common.models import Role
|
|
from student.models import CourseEnrollment, User
|
|
|
|
class RoleAssignmentTest(TestCase):
|
|
"""
|
|
Basic checks to make sure our Roles get assigned and unassigned as students
|
|
are enrolled and unenrolled from a course.
|
|
"""
|
|
|
|
def setUp(self):
|
|
self.staff_user = User.objects.create_user(
|
|
"patty",
|
|
"patty@fake.edx.org",
|
|
)
|
|
self.staff_user.is_staff = True
|
|
|
|
self.student_user = User.objects.create_user(
|
|
"hacky",
|
|
"hacky@fake.edx.org"
|
|
)
|
|
self.course_id = "edX/Fake101/2012"
|
|
CourseEnrollment.enroll(self.staff_user, self.course_id)
|
|
CourseEnrollment.enroll(self.student_user, self.course_id)
|
|
|
|
def test_enrollment_auto_role_creation(self):
|
|
moderator_role = Role.objects.get(
|
|
course_id=self.course_id,
|
|
name="Moderator"
|
|
)
|
|
student_role = Role.objects.get(
|
|
course_id=self.course_id,
|
|
name="Student"
|
|
)
|
|
self.assertIn(moderator_role, self.staff_user.roles.all())
|
|
|
|
self.assertIn(student_role, self.student_user.roles.all())
|
|
self.assertNotIn(moderator_role, self.student_user.roles.all())
|
|
|
|
# The following was written on the assumption that unenrolling from a course
|
|
# should remove all forum Roles for that student for that course. This is
|
|
# not necessarily the case -- please see comments at the top of
|
|
# django_comment_client.models.assign_default_role(). Leaving it for the
|
|
# forums team to sort out.
|
|
#
|
|
# def test_unenrollment_auto_role_removal(self):
|
|
# another_student = User.objects.create_user("sol", "sol@fake.edx.org")
|
|
# CourseEnrollment.enroll(another_student, self.course_id)
|
|
#
|
|
# CourseEnrollment.unenroll(self.student_user, self.course_id)
|
|
# # Make sure we didn't delete the actual Role
|
|
# student_role = Role.objects.get(
|
|
# course_id=self.course_id,
|
|
# name="Student"
|
|
# )
|
|
# self.assertNotIn(student_role, self.student_user.roles.all())
|
|
# self.assertIn(student_role, another_student.roles.all())
|