def test_has_item(self): ''' has_item(BlockUsageLocator) ''' course_id = 'GreekHero' # positive tests of various forms locator = BlockUsageLocator(version_guid=self.GUID_D1, usage_id='head12345') self.assertTrue(modulestore().has_item(course_id, locator), "couldn't find in %s" % self.GUID_D1) locator = BlockUsageLocator(course_id='GreekHero', usage_id='head12345', branch='draft') self.assertTrue( modulestore().has_item(locator.course_id, locator), "couldn't find in 12345" ) self.assertTrue( modulestore().has_item(locator.course_id, BlockUsageLocator( course_id=locator.course_id, branch='draft', usage_id=locator.usage_id )), "couldn't find in draft 12345" ) self.assertFalse( modulestore().has_item(locator.course_id, BlockUsageLocator( course_id=locator.course_id, branch='published', usage_id=locator.usage_id)), "found in published 12345" ) locator.branch = 'draft' self.assertTrue( modulestore().has_item(locator.course_id, locator), "not found in draft 12345" ) # not a course obj locator = BlockUsageLocator(course_id='GreekHero', usage_id='chapter1', branch='draft') self.assertTrue( modulestore().has_item(locator.course_id, locator), "couldn't find chapter1" ) # in published course locator = BlockUsageLocator(course_id="wonderful", usage_id="head23456", branch='draft') self.assertTrue( modulestore().has_item( locator.course_id, BlockUsageLocator(course_id=locator.course_id, usage_id=locator.usage_id, branch='published') ), "couldn't find in 23456" ) locator.branch = 'published' self.assertTrue(modulestore().has_item(course_id, locator), "couldn't find in 23456")
def test_get_item(self): ''' get_item(blocklocator) ''' # positive tests of various forms locator = BlockUsageLocator(version_guid=self.GUID_D1, usage_id='head12345') block = modulestore().get_item(locator) self.assertIsInstance(block, CourseDescriptor) locator = BlockUsageLocator(course_id='GreekHero', usage_id='head12345', branch='draft') block = modulestore().get_item(locator) self.assertEqual(block.location.course_id, "GreekHero") # look at this one in detail self.assertEqual(len(block.tabs), 6, "wrong number of tabs") self.assertEqual(block.display_name, "The Ancient Greek Hero") self.assertEqual(block.advertised_start, "Fall 2013") self.assertEqual(len(block.children), 3) self.assertEqual(block.definition_locator.definition_id, "head12345_12") # check dates and graders--forces loading of descriptor self.assertEqual(block.edited_by, "*****@*****.**") self.assertDictEqual( block.grade_cutoffs, {"Pass": 0.45}, ) # try to look up other branches self.assertRaises(ItemNotFoundError, modulestore().get_item, BlockUsageLocator(course_id=locator.as_course_locator(), usage_id=locator.usage_id, branch='published')) locator.branch = 'draft' self.assertIsInstance( modulestore().get_item(locator), CourseDescriptor )
def test_get_item(self): ''' get_item(blocklocator) ''' # positive tests of various forms locator = BlockUsageLocator(version_guid=self.GUID_D1, usage_id='head12345') block = modulestore().get_item(locator) self.assertIsInstance(block, CourseDescriptor) # get_instance just redirects to get_item, ignores course_id self.assertIsInstance(modulestore().get_instance("course_id", locator), CourseDescriptor) def verify_greek_hero(block): self.assertEqual(block.location.course_id, "GreekHero") self.assertEqual(len(block.tabs), 6, "wrong number of tabs") self.assertEqual(block.display_name, "The Ancient Greek Hero") self.assertEqual(block.advertised_start, "Fall 2013") self.assertEqual(len(block.children), 3) self.assertEqual(block.definition_locator.definition_id, "head12345_12") # check dates and graders--forces loading of descriptor self.assertEqual(block.edited_by, "*****@*****.**") self.assertDictEqual( block.grade_cutoffs, {"Pass": 0.45}, ) locator = BlockUsageLocator(course_id='GreekHero', usage_id='head12345', branch='draft') verify_greek_hero(modulestore().get_item(locator)) # get_instance just redirects to get_item, ignores course_id verify_greek_hero(modulestore().get_instance("course_id", locator)) # try to look up other branches self.assertRaises(ItemNotFoundError, modulestore().get_item, BlockUsageLocator(course_id=locator.as_course_locator(), usage_id=locator.usage_id, branch='published')) locator.branch = 'draft' self.assertIsInstance( modulestore().get_item(locator), CourseDescriptor )
def test_translate_locator(self): """ tests translate_locator_to_location(BlockUsageLocator) """ # lookup for non-existent course org = 'foo_org' course = 'bar_course' new_style_package_id = '{}.geek_dept.{}.baz_run'.format(org, course) prob_locator = BlockUsageLocator( package_id=new_style_package_id, block_id='problem2', branch='published' ) prob_location = loc_mapper().translate_locator_to_location(prob_locator) self.assertIsNone(prob_location, 'found entry in empty map table') loc_mapper().create_map_entry( Location('i4x', org, course, 'course', 'baz_run'), new_style_package_id, block_map={ 'abc123': {'problem': 'problem2'}, '48f23a10395384929234': {'chapter': 'chapter48f'}, 'baz_run': {'course': 'root'}, } ) # only one course matches prob_location = loc_mapper().translate_locator_to_location(prob_locator) # default branch self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # test get_course keyword prob_location = loc_mapper().translate_locator_to_location(prob_locator, get_course=True) self.assertEqual(prob_location, Location('i4x', org, course, 'course', 'baz_run', None)) # explicit branch prob_locator = BlockUsageLocator( package_id=prob_locator.package_id, branch='draft', block_id=prob_locator.block_id ) prob_location = loc_mapper().translate_locator_to_location(prob_locator) # Even though the problem was set as draft, we always return revision=None to work # with old mongo/draft modulestores. self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) prob_locator = BlockUsageLocator( package_id=new_style_package_id, block_id='problem2', branch='production' ) prob_location = loc_mapper().translate_locator_to_location(prob_locator) self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # same for chapter except chapter cannot be draft in old system chap_locator = BlockUsageLocator( package_id=new_style_package_id, block_id='chapter48f', branch='production' ) chap_location = loc_mapper().translate_locator_to_location(chap_locator) self.assertEqual(chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) # explicit branch chap_locator.branch = 'draft' chap_location = loc_mapper().translate_locator_to_location(chap_locator) self.assertEqual(chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) chap_locator = BlockUsageLocator( package_id=new_style_package_id, block_id='chapter48f', branch='production' ) chap_location = loc_mapper().translate_locator_to_location(chap_locator) self.assertEqual(chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) # look for non-existent problem prob_locator2 = BlockUsageLocator( package_id=new_style_package_id, branch='draft', block_id='problem3' ) prob_location = loc_mapper().translate_locator_to_location(prob_locator2) self.assertIsNone(prob_location, 'Found non-existent problem') # add a distractor course new_style_package_id = '{}.geek_dept.{}.{}'.format(org, course, 'delta_run') loc_mapper().create_map_entry( Location('i4x', org, course, 'course', 'delta_run'), new_style_package_id, block_map={'abc123': {'problem': 'problem3'}} ) prob_location = loc_mapper().translate_locator_to_location(prob_locator) self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # add a default course pointing to the delta_run loc_mapper().create_map_entry( Location('i4x', org, course, 'problem', '789abc123efg456'), new_style_package_id, block_map={'abc123': {'problem': 'problem3'}} ) # now query delta (2 entries point to it) prob_locator = BlockUsageLocator( package_id=new_style_package_id, branch='production', block_id='problem3' ) prob_location = loc_mapper().translate_locator_to_location(prob_locator) self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123'))
def test_translate_locator(self): """ tests translate_locator_to_location(BlockUsageLocator) """ # lookup for non-existent course org = 'foo_org' course = 'bar_course' new_style_course_id = '{}.geek_dept.{}.baz_run'.format(org, course) prob_locator = BlockUsageLocator(course_id=new_style_course_id, usage_id='problem2', branch='published') prob_location = loc_mapper().translate_locator_to_location( prob_locator) self.assertIsNone(prob_location, 'found entry in empty map table') loc_mapper().create_map_entry(Location('i4x', org, course, 'course', 'baz_run'), new_style_course_id, block_map={ 'abc123': { 'problem': 'problem2' }, '48f23a10395384929234': { 'chapter': 'chapter48f' }, 'baz_run': { 'course': 'root' }, }) # only one course matches prob_location = loc_mapper().translate_locator_to_location( prob_locator) # default branch self.assertEqual( prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # test get_course keyword prob_location = loc_mapper().translate_locator_to_location( prob_locator, get_course=True) self.assertEqual( prob_location, Location('i4x', org, course, 'course', 'baz_run', None)) # explicit branch prob_locator = BlockUsageLocator(course_id=prob_locator.course_id, branch='draft', usage_id=prob_locator.usage_id) prob_location = loc_mapper().translate_locator_to_location( prob_locator) # Even though the problem was set as draft, we always return revision=None to work # with old mongo/draft modulestores. self.assertEqual( prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) prob_locator = BlockUsageLocator(course_id=new_style_course_id, usage_id='problem2', branch='production') prob_location = loc_mapper().translate_locator_to_location( prob_locator) self.assertEqual( prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # same for chapter except chapter cannot be draft in old system chap_locator = BlockUsageLocator(course_id=new_style_course_id, usage_id='chapter48f', branch='production') chap_location = loc_mapper().translate_locator_to_location( chap_locator) self.assertEqual( chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) # explicit branch chap_locator.branch = 'draft' chap_location = loc_mapper().translate_locator_to_location( chap_locator) self.assertEqual( chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) chap_locator = BlockUsageLocator(course_id=new_style_course_id, usage_id='chapter48f', branch='production') chap_location = loc_mapper().translate_locator_to_location( chap_locator) self.assertEqual( chap_location, Location('i4x', org, course, 'chapter', '48f23a10395384929234')) # look for non-existent problem prob_locator2 = BlockUsageLocator(course_id=new_style_course_id, branch='draft', usage_id='problem3') prob_location = loc_mapper().translate_locator_to_location( prob_locator2) self.assertIsNone(prob_location, 'Found non-existent problem') # add a distractor course new_style_course_id = '{}.geek_dept.{}.{}'.format( org, course, 'delta_run') loc_mapper().create_map_entry( Location('i4x', org, course, 'course', 'delta_run'), new_style_course_id, block_map={'abc123': { 'problem': 'problem3' }}) prob_location = loc_mapper().translate_locator_to_location( prob_locator) self.assertEqual( prob_location, Location('i4x', org, course, 'problem', 'abc123', None)) # add a default course pointing to the delta_run loc_mapper().create_map_entry( Location('i4x', org, course, 'problem', '789abc123efg456'), new_style_course_id, block_map={'abc123': { 'problem': 'problem3' }}) # now query delta (2 entries point to it) prob_locator = BlockUsageLocator(course_id=new_style_course_id, branch='production', usage_id='problem3') prob_location = loc_mapper().translate_locator_to_location( prob_locator) self.assertEqual(prob_location, Location('i4x', org, course, 'problem', 'abc123'))