Commit 586cc11c by Albert St. Aubin

Added enrollment API tests

parent 0434c493
...@@ -24,9 +24,11 @@ from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls ...@@ -24,9 +24,11 @@ from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from entitlements.tests.factories import CourseEntitlementFactory
from enrollment import api from enrollment import api
from enrollment.errors import CourseEnrollmentError from enrollment.errors import CourseEnrollmentError
from enrollment.views import EnrollmentUserThrottle from enrollment.views import EnrollmentUserThrottle
from entitlements.models import CourseEntitlement
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.embargo.models import Country, CountryAccessRule, RestrictedCourse from openedx.core.djangoapps.embargo.models import Country, CountryAccessRule, RestrictedCourse
from openedx.core.djangoapps.embargo.test_utils import restrict_course from openedx.core.djangoapps.embargo.test_utils import restrict_course
...@@ -35,7 +37,7 @@ from openedx.core.lib.django_test_client_utils import get_absolute_url ...@@ -35,7 +37,7 @@ from openedx.core.lib.django_test_client_utils import get_absolute_url
from openedx.features.enterprise_support.tests.mixins.enterprise import EnterpriseServiceMockMixin from openedx.features.enterprise_support.tests.mixins.enterprise import EnterpriseServiceMockMixin
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.roles import CourseStaffRole from student.roles import CourseStaffRole
from student.tests.factories import AdminFactory, UserFactory from student.tests.factories import AdminFactory, UserFactory, TEST_PASSWORD
from util.models import RateLimitConfiguration from util.models import RateLimitConfiguration
from util.testing import UrlResetMixin from util.testing import UrlResetMixin
...@@ -47,6 +49,7 @@ class EnrollmentTestMixin(object): ...@@ -47,6 +49,7 @@ class EnrollmentTestMixin(object):
def assert_enrollment_status( def assert_enrollment_status(
self, self,
course_id=None, course_id=None,
course_uuid=None,
username=None, username=None,
expected_status=status.HTTP_200_OK, expected_status=status.HTTP_200_OK,
email_opt_in=None, email_opt_in=None,
...@@ -77,6 +80,9 @@ class EnrollmentTestMixin(object): ...@@ -77,6 +80,9 @@ class EnrollmentTestMixin(object):
'enrollment_attributes': enrollment_attributes 'enrollment_attributes': enrollment_attributes
} }
if course_uuid:
data['course_details']['course_uuid'] = course_uuid
if is_active is not None: if is_active is not None:
data['is_active'] = is_active data['is_active'] = is_active
...@@ -133,6 +139,78 @@ class EnrollmentTestMixin(object): ...@@ -133,6 +139,78 @@ class EnrollmentTestMixin(object):
self.assertEqual(actual_mode, expected_mode) self.assertEqual(actual_mode, expected_mode)
# @override_settings(EDX_API_KEY="i am a key")
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
class EntitlementEnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
def setUp(self):
super(EntitlementEnrollmentTest, self).setUp()
self.course = CourseFactory()
self.user = UserFactory()
CourseModeFactory.create(
course_id=self.course.id,
mode_slug=CourseMode.VERIFIED,
mode_display_name=CourseMode.VERIFIED,
)
self.client.login(username=self.user.username, password=TEST_PASSWORD)
def test_enroll_entitlement(self):
entitlement = CourseEntitlementFactory.create(user=self.user, mode='verified')
resp = self.assert_enrollment_status(
course_id=unicode(self.course.id),
course_uuid=str(entitlement.course_uuid),
is_active=True,
mode=None,
max_mongo_calls=4
)
data = json.loads(resp.content)
self.assertEqual(self.course.display_name_with_default, data['course_details']['course_name'])
# Verify that the enrollment was created correctly
self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id))
course_mode, is_active = CourseEnrollment.enrollment_mode_for_user(self.user, self.course.id)
self.assertTrue(is_active)
self.assertEqual(course_mode, entitlement.mode)
entitlement.refresh_from_db()
# Verify the Entitlement settings are correct
self.assertIsNotNone(entitlement.enrollment_course_run)
self.assertEqual(entitlement.enrollment_course_run.course_id, self.course.id)
def test_unenroll_entitlement(self):
entitlement = CourseEntitlementFactory.create(user=self.user, mode='verified')
# Enroll user
self.assert_enrollment_status(
course_id=unicode(self.course.id),
course_uuid=str(entitlement.course_uuid),
is_active=True,
mode=None,
max_mongo_calls=4
)
# Unenroll the user
resp = self.assert_enrollment_status(
course_id=unicode(self.course.id),
course_uuid=str(entitlement.course_uuid),
is_active=False,
mode=None,
max_mongo_calls=4
)
data = json.loads(resp.content)
self.assertEqual(self.course.display_name_with_default, data['course_details']['course_name'])
# Verify that the enrollment was created correctly
self.assertFalse(CourseEnrollment.is_enrolled(self.user, self.course.id))
course_mode, is_active = CourseEnrollment.enrollment_mode_for_user(self.user, self.course.id)
self.assertFalse(is_active)
self.assertEqual(course_mode, entitlement.mode)
entitlement.refresh_from_db()
self.assertIsNone(entitlement.enrollment_course_run)
@attr(shard=3) @attr(shard=3)
@override_settings(EDX_API_KEY="i am a key") @override_settings(EDX_API_KEY="i am a key")
@ddt.ddt @ddt.ddt
......
...@@ -649,7 +649,7 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): ...@@ -649,7 +649,7 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn):
enrollment=CourseEnrollment.get_enrollment(user, course_id) enrollment=CourseEnrollment.get_enrollment(user, course_id)
) )
log.info('Enrolling [%s] entitlement for run [%s] of Course [%s].', username, course_id, course_uuid) log.info('Enrolling [%s] entitlement for run [%s] of Course [%s].', username, course_id, course_uuid)
elif course_entitlement and not is_active: elif course_entitlement and is_active is not None and not is_active:
# Unenroll the course as part of the entitlement # Unenroll the course as part of the entitlement
response = api.update_enrollment( response = api.update_enrollment(
username, username,
......
Markdown is supported
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