Make course ids and usage ids opaque to LMS and Studio [partial commit]
This commit updates common/djangoapps. These keys are now objects with a limited interface, and the particular internal representation is managed by the data storage layer (the modulestore). For the LMS, there should be no outward-facing changes to the system. The keys are, for now, a change to internal representation only. For Studio, the new serialized form of the keys is used in urls, to allow for further migration in the future. Co-Author: Andy Armstrong <andya@edx.org> Co-Author: Christina Roberts <christina@edx.org> Co-Author: David Baumgold <db@edx.org> Co-Author: Diana Huang <dkh@edx.org> Co-Author: Don Mitchell <dmitchell@edx.org> Co-Author: Julia Hansbrough <julia@edx.org> Co-Author: Nimisha Asthagiri <nasthagiri@edx.org> Co-Author: Sarina Canelake <sarina@edx.org> [LMS-2370]
This commit is contained in:
@@ -8,6 +8,7 @@ Replace this with more appropriate tests for your application.
|
||||
from datetime import datetime, timedelta
|
||||
import pytz
|
||||
|
||||
from xmodule.modulestore.locations import SlashSeparatedCourseKey
|
||||
from django.test import TestCase
|
||||
from course_modes.models import CourseMode, Mode
|
||||
|
||||
@@ -18,7 +19,7 @@ class CourseModeModelTest(TestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
self.course_id = 'TestCourse'
|
||||
self.course_key = SlashSeparatedCourseKey('Test', 'TestCourse', 'TestCourseRun')
|
||||
CourseMode.objects.all().delete()
|
||||
|
||||
def create_mode(self, mode_slug, mode_name, min_price=0, suggested_prices='', currency='usd'):
|
||||
@@ -26,7 +27,7 @@ class CourseModeModelTest(TestCase):
|
||||
Create a new course mode
|
||||
"""
|
||||
return CourseMode.objects.get_or_create(
|
||||
course_id=self.course_id,
|
||||
course_id=self.course_key,
|
||||
mode_display_name=mode_name,
|
||||
mode_slug=mode_slug,
|
||||
min_price=min_price,
|
||||
@@ -39,7 +40,7 @@ class CourseModeModelTest(TestCase):
|
||||
If we can't find any modes, we should get back the default mode
|
||||
"""
|
||||
# shouldn't be able to find a corresponding course
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
self.assertEqual([CourseMode.DEFAULT_MODE], modes)
|
||||
|
||||
def test_nodes_for_course_single(self):
|
||||
@@ -48,13 +49,13 @@ class CourseModeModelTest(TestCase):
|
||||
"""
|
||||
|
||||
self.create_mode('verified', 'Verified Certificate')
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
mode = Mode(u'verified', u'Verified Certificate', 0, '', 'usd', None)
|
||||
self.assertEqual([mode], modes)
|
||||
|
||||
modes_dict = CourseMode.modes_for_course_dict(self.course_id)
|
||||
modes_dict = CourseMode.modes_for_course_dict(self.course_key)
|
||||
self.assertEqual(modes_dict['verified'], mode)
|
||||
self.assertEqual(CourseMode.mode_for_course(self.course_id, 'verified'),
|
||||
self.assertEqual(CourseMode.mode_for_course(self.course_key, 'verified'),
|
||||
mode)
|
||||
|
||||
def test_modes_for_course_multiple(self):
|
||||
@@ -67,18 +68,18 @@ class CourseModeModelTest(TestCase):
|
||||
for mode in set_modes:
|
||||
self.create_mode(mode.slug, mode.name, mode.min_price, mode.suggested_prices)
|
||||
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
self.assertEqual(modes, set_modes)
|
||||
self.assertEqual(mode1, CourseMode.mode_for_course(self.course_id, u'honor'))
|
||||
self.assertEqual(mode2, CourseMode.mode_for_course(self.course_id, u'verified'))
|
||||
self.assertIsNone(CourseMode.mode_for_course(self.course_id, 'DNE'))
|
||||
self.assertEqual(mode1, CourseMode.mode_for_course(self.course_key, u'honor'))
|
||||
self.assertEqual(mode2, CourseMode.mode_for_course(self.course_key, u'verified'))
|
||||
self.assertIsNone(CourseMode.mode_for_course(self.course_key, 'DNE'))
|
||||
|
||||
def test_min_course_price_for_currency(self):
|
||||
"""
|
||||
Get the min course price for a course according to currency
|
||||
"""
|
||||
# no modes, should get 0
|
||||
self.assertEqual(0, CourseMode.min_course_price_for_currency(self.course_id, 'usd'))
|
||||
self.assertEqual(0, CourseMode.min_course_price_for_currency(self.course_key, 'usd'))
|
||||
|
||||
# create some modes
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 10, '', 'usd', None)
|
||||
@@ -88,27 +89,27 @@ class CourseModeModelTest(TestCase):
|
||||
for mode in set_modes:
|
||||
self.create_mode(mode.slug, mode.name, mode.min_price, mode.suggested_prices, mode.currency)
|
||||
|
||||
self.assertEqual(10, CourseMode.min_course_price_for_currency(self.course_id, 'usd'))
|
||||
self.assertEqual(80, CourseMode.min_course_price_for_currency(self.course_id, 'cny'))
|
||||
self.assertEqual(10, CourseMode.min_course_price_for_currency(self.course_key, 'usd'))
|
||||
self.assertEqual(80, CourseMode.min_course_price_for_currency(self.course_key, 'cny'))
|
||||
|
||||
def test_modes_for_course_expired(self):
|
||||
expired_mode, _status = self.create_mode('verified', 'Verified Certificate')
|
||||
expired_mode.expiration_datetime = datetime.now(pytz.UTC) + timedelta(days=-1)
|
||||
expired_mode.save()
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
self.assertEqual([CourseMode.DEFAULT_MODE], modes)
|
||||
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 0, '', 'usd', None)
|
||||
self.create_mode(mode1.slug, mode1.name, mode1.min_price, mode1.suggested_prices)
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
self.assertEqual([mode1], modes)
|
||||
|
||||
expiration_datetime = datetime.now(pytz.UTC) + timedelta(days=1)
|
||||
expired_mode.expiration_datetime = expiration_datetime
|
||||
expired_mode.save()
|
||||
expired_mode_value = Mode(u'verified', u'Verified Certificate', 0, '', 'usd', expiration_datetime)
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
modes = CourseMode.modes_for_course(self.course_key)
|
||||
self.assertEqual([expired_mode_value, mode1], modes)
|
||||
|
||||
modes = CourseMode.modes_for_course('second_test_course')
|
||||
modes = CourseMode.modes_for_course(SlashSeparatedCourseKey('TestOrg', 'TestCourse', 'TestRun'))
|
||||
self.assertEqual([CourseMode.DEFAULT_MODE], modes)
|
||||
|
||||
Reference in New Issue
Block a user