From cb2422a3e22a3d5120f56391f4e392702037d25a Mon Sep 17 00:00:00 2001 From: Don Mitchell Date: Wed, 9 Jul 2014 17:06:44 -0400 Subject: [PATCH] Unit test to demonstrate bug --- .../lib/xmodule/xmodule/modulestore/mixed.py | 3 +-- .../tests/test_mixed_modulestore.py | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/common/lib/xmodule/xmodule/modulestore/mixed.py b/common/lib/xmodule/xmodule/modulestore/mixed.py index d7b887b7e8..d279b585de 100644 --- a/common/lib/xmodule/xmodule/modulestore/mixed.py +++ b/common/lib/xmodule/xmodule/modulestore/mixed.py @@ -127,8 +127,7 @@ class MixedModuleStore(ModuleStoreWriteBase): def get_item(self, usage_key, depth=0, **kwargs): """ - This method is explicitly not implemented as we need a course_id to disambiguate - We should be able to fix this when the data-model rearchitecting is done + see parent doc """ store = self._get_modulestore_for_courseid(usage_key.course_key) return store.get_item(usage_key, depth, **kwargs) diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py index 9485d9323b..6ac1897c2a 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py @@ -17,6 +17,7 @@ from xmodule.modulestore.tests.test_location_mapper import LocMapperSetupSansDja # before importing the module from django.conf import settings from opaque_keys.edx.locations import SlashSeparatedCourseKey +from xmodule.modulestore.mongo.base import MongoRevisionKey if not settings.configured: settings.configure() from xmodule.modulestore.mixed import MixedModuleStore @@ -330,6 +331,32 @@ class TestMixedModuleStore(LocMapperSetupSansDjango): with self.assertRaises(ItemNotFoundError): self.store.get_item(self.writable_chapter_location) + # create and delete a private vertical with private children + private_vert_loc = self.course_locations[self.MONGO_COURSEID].course_key.make_usage_key('vertical', 'private') + private_vert = self.store.create_and_save_xmodule(private_vert_loc, self.user_id, runtime=self.course.runtime) + self.course.children.append(private_vert_loc) + self.store.update_item(self.course, self.user_id) + private_leaf_loc = self.course_locations[self.MONGO_COURSEID].course_key.make_usage_key('html', 'private_leaf') + self.store.create_and_save_xmodule(private_leaf_loc, self.user_id, runtime=self.course.runtime) + private_vert.children.append(private_leaf_loc) + self.store.update_item(private_vert, self.user_id) + + # verify pre delete state (just to verify that the test is valid) + self.assertTrue(hasattr(private_vert, 'is_draft') or private_vert.location.branch == MongoRevisionKey.draft) + self.assertIsNotNone(self.store.get_item(private_vert_loc)) + self.assertIsNotNone(self.store.get_item(private_leaf_loc)) + course = self.store.get_course(self.course_locations[self.MONGO_COURSEID].course_key, 0) + self.assertIn(private_vert_loc, course.children) + + # delete the vertical and ensure the course no longer points to it + self.store.delete_item(private_vert_loc, self.user_id) + with self.assertRaises(ItemNotFoundError): + self.store.get_item(private_vert_loc) + with self.assertRaises(ItemNotFoundError): + self.store.get_item(private_leaf_loc) + course = self.store.get_course(self.course_locations[self.MONGO_COURSEID].course_key, 0) + self.assertNotIn(private_vert_loc, course.children) + @ddt.data('draft', 'split') def test_get_courses(self, default_ms): self.initdb(default_ms)