def handle(self, *args, **options): course = get_course_by_id(CourseKey.from_string(options['course'])) print( 'Warning: this command directly edits the list of course tabs in mongo.' ) print('Tabs before any changes:') print_course(course) try: if options['delete']: num = int(options['delete'][0]) if num < 3: raise CommandError("Tabs 1 and 2 cannot be changed.") if query_yes_no(f'Deleting tab {num} Confirm?', default='no'): tabs.primitive_delete(course, num - 1) # -1 for 0-based indexing elif options['insert']: num, tab_type, name = options['insert'] num = int(num) if num < 3: raise CommandError("Tabs 1 and 2 cannot be changed.") if query_yes_no( f'Inserting tab {num} "{tab_type}" "{name}" Confirm?', default='no'): tabs.primitive_insert(course, num - 1, tab_type, name) # -1 as above except ValueError as e: # Cute: translate to CommandError so the CLI error prints nicely. raise CommandError(e) # lint-amnesty, pylint: disable=raise-missing-from
def test_delete(self): """Test primitive tab deletion.""" course = CourseFactory.create() with self.assertRaises(ValueError): tabs.primitive_delete(course, 0) with self.assertRaises(ValueError): tabs.primitive_delete(course, 1) with self.assertRaises(IndexError): tabs.primitive_delete(course, 7) tabs.primitive_delete(course, 2) self.assertNotIn({u'type': u'textbooks'}, course.tabs) # Check that discussion has shifted up self.assertEqual(course.tabs[2], {'type': 'discussion', 'name': 'Discussion'})
def test_delete(self): """Test primitive tab deletion.""" course = CourseFactory.create() with self.assertRaises(ValueError): tabs.primitive_delete(course, 0) with self.assertRaises(ValueError): tabs.primitive_delete(course, 1) with self.assertRaises(IndexError): tabs.primitive_delete(course, 7) assert course.tabs[2] != {'type': 'discussion', 'name': 'Discussion'} tabs.primitive_delete(course, 2) assert {'type': 'progress'} not in course.tabs # Check that discussion has shifted up assert course.tabs[2] == {'type': 'discussion', 'name': 'Discussion'}