Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
 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)
Beispiel #5
0
    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')
Beispiel #6
0
 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)
Beispiel #7
0
    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)
Beispiel #8
0
    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))
Beispiel #9
0
    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,
    )
Beispiel #11
0
 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
Beispiel #12
0
 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