def test_map_into_course_location(self): original_course = CCXLocator(org='org', course='course', run='run', ccx='1') new_course = CCXLocator(org='edX', course='toy', run='2012_Fall', ccx='1') loc = CCXBlockUsageLocator(original_course, 'cat', 'name:more_name') expected = CCXBlockUsageLocator(new_course, 'cat', 'name:more_name') actual = loc.map_into_course(new_course) self.assertEqual(expected, actual)
def test_ccx_constructor_package_id_branch_and_version_guid(self): """Verify a locator constructed with branch and version is correct""" test_id_loc = '519665f6223ebd6980884f2b' org = 'mit.eecs' course = '~6002x' run = '2014_T2' branch = 'draft-1' ccx = '1' expected_urn = '{}+{}+{}+{}@{}+{}@{}+{}@{}'.format( org, course, run, CCXLocator.BRANCH_PREFIX, branch, CCXLocator.VERSION_PREFIX, test_id_loc, CCXLocator.CCX_PREFIX, ccx ) testobj = CCXLocator( org=org, course=course, run=run, branch=branch, version_guid=test_id_loc, ccx=ccx ) self.check_course_locn_fields( testobj, org=org, course=course, run=run, branch=branch, version_guid=ObjectId(test_id_loc) ) self.assertEqual(testobj.ccx, ccx) # Allow access to _to_string # pylint: disable=protected-access self.assertEqual(testobj._to_string(), expected_urn)
def test_ccx_constructor_package_id_separate_branch(self): """Verify a locator constructed with branch is correct""" org = 'mit.eecs' course = '6002x' run = '2014_T2' test_branch = 'published' ccx = '1' expected_urn = '{}+{}+{}+{}@{}+{}@{}'.format( org, course, run, CCXLocator.BRANCH_PREFIX, test_branch, CCXLocator.CCX_PREFIX, ccx ) testobj = CCXLocator( org=org, course=course, run=run, branch=test_branch, ccx=ccx ) self.check_course_locn_fields( testobj, org=org, course=course, run=run, branch=test_branch, ) self.assertEqual(testobj.ccx, ccx) # Allow access to _to_string # pylint: disable=protected-access self.assertEqual(testobj._to_string(), expected_urn)
def test_ccx_constructor_deprecated(self): """Verify that a CCXLocator cannot be built with deprecated=True""" with self.assertRaises(InvalidKeyError): CCXLocator(org='org', course='course', run='run', ccx='1', deprecated=True)
def test_replacement(self, key, newvalue): course_key = CCXLocator(org='org', course='course', run='run', branch='rev', ccx='1', deprecated=False) kwargs = {key: newvalue} self.assertEqual( getattr(CCXBlockUsageLocator(course_key, 'c', 'n', deprecated=False).replace(**kwargs), key), newvalue ) with self.assertRaises(InvalidKeyError): CCXBlockUsageLocator(course_key, 'c', 'n', deprecated=True).replace(block_id='name\xae')
def test_valid_locations(self, org, course, run, ccx, category, name, revision): # pylint: disable=unused-argument course_key = CCXLocator(org=org, course=course, run=run, branch=revision, ccx=ccx) locator = CCXBlockUsageLocator(course_key, block_type=category, block_id=name, ) self.assertEqual(org, locator.org) self.assertEqual(course, locator.course) self.assertEqual(run, locator.run) self.assertEqual(ccx, locator.ccx) self.assertEqual(category, locator.block_type) self.assertEqual(name, locator.block_id) self.assertEqual(revision, locator.branch)
def test_ccx_constructor_package_id(self): """Verify a locator constructed without branch or version is correct""" org = 'mit.eecs' course = '6002x' run = '2014_T2' ccx = '1' testurn = '{}+{}+{}+{}@{}'.format(org, course, run, CCXLocator.CCX_PREFIX, ccx) testobj = CCXLocator(org=org, course=course, run=run, ccx=ccx) self.check_course_locn_fields(testobj, org=org, course=course, run=run) self.assertEqual(testobj.ccx, ccx) # Allow access to _to_string # pylint: disable=protected-access self.assertEqual(testobj._to_string(), testurn)
def test_missing_ccx_id(self, fields): """Verify that otherwise valid arguments fail without ccx""" available_fields = { 'version_guid': '519665f6223ebd6980884f2b', 'org': 'mit.eecs', 'course': '6002x', 'run': '2014_T2', 'branch': 'draft-1', } use_fields = dict( (k, v) for k, v in available_fields.items() if k in fields) with self.assertRaises(InvalidKeyError) as context_manager: CCXLocator(**use_fields) self.assertIn(str(CCXLocator), str(context_manager.exception))
def test_ccx_constructor_version_guid(self): """Verify a locator constructed with only version_guid is correct""" test_id_loc = '519665f6223ebd6980884f2b' ccx = '1' expected_urn = '{}@{}+{}@{}'.format(CCXLocator.VERSION_PREFIX, test_id_loc, CCXLocator.CCX_PREFIX, ccx) testobj = CCXLocator(version_guid=test_id_loc, ccx=ccx) self.check_course_locn_fields( testobj, version_guid=ObjectId(test_id_loc), ) self.assertEqual(testobj.ccx, ccx) # Allow access to _to_string # pylint: disable=protected-access self.assertEqual(testobj._to_string(), expected_urn)
from ccx_keys.locator import CCXLocator from ddt import data, ddt, unpack from opaque_keys.edx.locator import CourseLocator import edx.analytics.tasks.util.opaque_key_util as opaque_key_util from edx.analytics.tasks.tests import unittest VALID_COURSE_ID = unicode( CourseLocator(org='org', course='course_id', run='course_run')) VALID_LEGACY_COURSE_ID = "org/course_id/course_run" INVALID_LEGACY_COURSE_ID = "org:course_id:course_run" INVALID_NONASCII_LEGACY_COURSE_ID = u"org/course\ufffd_id/course_run" VALID_NONASCII_LEGACY_COURSE_ID = u"org/cours\u00e9_id/course_run" VALID_CCX_COURSE_ID = unicode( CCXLocator(org='org', course='course_id', run='course_run', ccx='13')) COURSE_ID_WITH_COLONS = unicode( CourseLocator(org='org', course='course:id', run='course:run')) @ddt class CourseIdTest(unittest.TestCase): """ Verify that course_id filtering works correctly. """ @data( VALID_COURSE_ID, VALID_LEGACY_COURSE_ID, VALID_NONASCII_LEGACY_COURSE_ID, VALID_CCX_COURSE_ID, )
def test_ccx_to_deprecated_string(self): """Verify that _from_deprecated_string raises NotImplemented""" ccx_id = CCXLocator(org='org', course='course', run='run', ccx='1') loc = CCXBlockUsageLocator(ccx_id, 'cat', 'name') with self.assertRaises(NotImplementedError): loc._to_deprecated_string() # pylint: disable=protected-access
def test_ccx_to_deprecated_string(self): """Verify that _from_deprecated_string raises NotImplemented""" testme = CCXLocator(org='org', course='course', run='run', ccx='1') with self.assertRaises(NotImplementedError): testme._to_deprecated_string() # pylint: disable=protected-access