generalize draft import/export TNL-574
add test for videomodule Import drafts handles modules w/o xml_attributes and ones using the old parent_sequential_url pointer Handle drafts for modules which don't define nor extract xml_attributes Support and in get_items qualifiers Unit test for value query
This commit is contained in:
@@ -250,6 +250,14 @@ class ImportRequiredTestCases(ContentStoreTestCase):
|
||||
# check for about content
|
||||
self.verify_content_existence(self.store, root_dir, course_id, 'about', 'about', '.html')
|
||||
|
||||
# assert that there is an html and video directory in drafts:
|
||||
draft_dir = OSFS(root_dir / 'test_export/drafts')
|
||||
self.assertTrue(draft_dir.exists('html'))
|
||||
self.assertTrue(draft_dir.exists('video'))
|
||||
# and assert that they contain the created modules
|
||||
self.assertIn(self.DRAFT_HTML + ".xml", draft_dir.listdir('html'))
|
||||
self.assertIn(self.DRAFT_VIDEO + ".xml", draft_dir.listdir('video'))
|
||||
|
||||
# check for grading_policy.json
|
||||
filesystem = OSFS(root_dir / 'test_export/policies/2012_Fall')
|
||||
self.assertTrue(filesystem.exists('grading_policy.json'))
|
||||
@@ -302,6 +310,7 @@ class ImportRequiredTestCases(ContentStoreTestCase):
|
||||
"""Verifies all temporary attributes added during export are removed"""
|
||||
self.assertNotIn('index_in_children_list', attributes)
|
||||
self.assertNotIn('parent_sequential_url', attributes)
|
||||
self.assertNotIn('parent_url', attributes)
|
||||
|
||||
vertical = self.store.get_item(course_id.make_usage_key('vertical', self.TEST_VERTICAL))
|
||||
verify_export_attrs_removed(vertical.xml_attributes)
|
||||
|
||||
@@ -7,7 +7,6 @@ from xblock.fields import String
|
||||
|
||||
from xmodule.modulestore.xml_importer import import_from_xml
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore.mongo.draft import as_draft
|
||||
|
||||
|
||||
|
||||
@@ -128,6 +128,8 @@ class CourseTestCase(ModuleStoreTestCase):
|
||||
PRIVATE_VERTICAL = 'a_private_vertical'
|
||||
PUBLISHED_VERTICAL = 'a_published_vertical'
|
||||
SEQUENTIAL = 'vertical_sequential'
|
||||
DRAFT_HTML = 'draft_html'
|
||||
DRAFT_VIDEO = 'draft_video'
|
||||
LOCKED_ASSET_KEY = AssetLocation.from_deprecated_string('/c4x/edX/toy/asset/sample_static.txt')
|
||||
|
||||
def import_and_populate_course(self):
|
||||
@@ -167,6 +169,20 @@ class CourseTestCase(ModuleStoreTestCase):
|
||||
sequential.children.append(public_vertical.location)
|
||||
self.store.update_item(sequential, self.user.id)
|
||||
|
||||
# create an html and video component to make drafts:
|
||||
draft_html = self.store.create_item(self.user.id, course_id, 'html', self.DRAFT_HTML)
|
||||
draft_video = self.store.create_item(self.user.id, course_id, 'video', self.DRAFT_VIDEO)
|
||||
|
||||
# add them as children to the public_vertical
|
||||
public_vertical.children.append(draft_html.location)
|
||||
public_vertical.children.append(draft_video.location)
|
||||
self.store.update_item(public_vertical, self.user.id)
|
||||
# publish changes to vertical
|
||||
self.store.publish(public_vertical.location, self.user.id)
|
||||
# convert html/video to draft
|
||||
self.store.convert_to_draft(draft_html.location, self.user.id)
|
||||
self.store.convert_to_draft(draft_video.location, self.user.id)
|
||||
|
||||
# lock an asset
|
||||
content_store.set_attr(self.LOCKED_ASSET_KEY, 'locked', True)
|
||||
|
||||
@@ -199,18 +215,25 @@ class CourseTestCase(ModuleStoreTestCase):
|
||||
self.assertEqual(self.store.has_published_version(item), publish_state)
|
||||
|
||||
def get_and_verify_publish_state(item_type, item_name, publish_state):
|
||||
"""Gets the given item from the store and verifies the publish state of the item is as expected."""
|
||||
"""
|
||||
Gets the given item from the store and verifies the publish state
|
||||
of the item is as expected.
|
||||
"""
|
||||
item = self.store.get_item(course_id.make_usage_key(item_type, item_name))
|
||||
verify_item_publish_state(item, publish_state)
|
||||
return item
|
||||
|
||||
# verify that the draft vertical is draft
|
||||
# verify draft vertical has a published version with published children
|
||||
vertical = get_and_verify_publish_state('vertical', self.TEST_VERTICAL, True)
|
||||
for child in vertical.get_children():
|
||||
verify_item_publish_state(child, True)
|
||||
|
||||
# make sure that we don't have a sequential that is not in draft mode
|
||||
# verify that it has a draft too
|
||||
self.assertTrue(getattr(vertical, "is_draft", False))
|
||||
|
||||
# make sure that we don't have a sequential that is in draft mode
|
||||
sequential = get_and_verify_publish_state('sequential', self.SEQUENTIAL, True)
|
||||
self.assertFalse(getattr(sequential, "is_draft", False))
|
||||
|
||||
# verify that we have the private vertical
|
||||
private_vertical = get_and_verify_publish_state('vertical', self.PRIVATE_VERTICAL, False)
|
||||
@@ -218,10 +241,24 @@ class CourseTestCase(ModuleStoreTestCase):
|
||||
# verify that we have the public vertical
|
||||
public_vertical = get_and_verify_publish_state('vertical', self.PUBLISHED_VERTICAL, True)
|
||||
|
||||
# verify that we have the draft html
|
||||
draft_html = self.store.get_item(course_id.make_usage_key('html', self.DRAFT_HTML))
|
||||
self.assertTrue(getattr(draft_html, 'is_draft', False))
|
||||
|
||||
# verify that we have the draft video
|
||||
draft_video = self.store.get_item(course_id.make_usage_key('video', self.DRAFT_VIDEO))
|
||||
self.assertTrue(getattr(draft_video, 'is_draft', False))
|
||||
|
||||
# verify verticals are children of sequential
|
||||
for vert in [vertical, private_vertical, public_vertical]:
|
||||
self.assertIn(vert.location, sequential.children)
|
||||
|
||||
# verify draft html is the child of the public vertical
|
||||
self.assertIn(draft_html.location, public_vertical.children)
|
||||
|
||||
# verify draft video is the child of the public vertical
|
||||
self.assertIn(draft_video.location, public_vertical.children)
|
||||
|
||||
# verify textbook exists
|
||||
course = self.store.get_course(course_id)
|
||||
self.assertGreater(len(course.textbooks), 0)
|
||||
|
||||
Reference in New Issue
Block a user