Commit 0654665b by Jay Zoldak

Enable XModule factories to work with the currently version of Factory Boy at…

Enable XModule factories to work with the currently version of Factory Boy at PyPI (1.2.0) so that the code will work with 'pip install factory_boy'
parent edb9f8ce
...@@ -6,12 +6,19 @@ from uuid import uuid4 ...@@ -6,12 +6,19 @@ from uuid import uuid4
from xmodule.timeparse import stringify_time from xmodule.timeparse import stringify_time
def XMODULE_COURSE_CREATION(class_to_create, **kwargs):
return XModuleCourseFactory._create(class_to_create, **kwargs)
def XMODULE_ITEM_CREATION(class_to_create, **kwargs):
return XModuleItemFactory._create(class_to_create, **kwargs)
class XModuleCourseFactory(Factory): class XModuleCourseFactory(Factory):
""" """
Factory for XModule courses. Factory for XModule courses.
""" """
ABSTRACT_FACTORY = True ABSTRACT_FACTORY = True
_creation_function = (XMODULE_COURSE_CREATION,)
@classmethod @classmethod
def _create(cls, target_class, *args, **kwargs): def _create(cls, target_class, *args, **kwargs):
...@@ -62,6 +69,7 @@ class XModuleItemFactory(Factory): ...@@ -62,6 +69,7 @@ class XModuleItemFactory(Factory):
""" """
ABSTRACT_FACTORY = True ABSTRACT_FACTORY = True
_creation_function = (XMODULE_ITEM_CREATION,)
@classmethod @classmethod
def _create(cls, target_class, *args, **kwargs): def _create(cls, target_class, *args, **kwargs):
...@@ -74,6 +82,7 @@ class XModuleItemFactory(Factory): ...@@ -74,6 +82,7 @@ class XModuleItemFactory(Factory):
store = modulestore('direct') store = modulestore('direct')
# This code was based off that in cms/djangoapps/contentstore/views.py
parent = store.get_item(parent_location) parent = store.get_item(parent_location)
dest_location = parent_location._replace(category=template.category, name=uuid4().hex) dest_location = parent_location._replace(category=template.category, name=uuid4().hex)
......
...@@ -14,6 +14,7 @@ import xmodule.modulestore.django ...@@ -14,6 +14,7 @@ import xmodule.modulestore.django
from xmodule.modulestore import Location from xmodule.modulestore import Location
from xmodule.modulestore.xml_importer import import_from_xml from xmodule.modulestore.xml_importer import import_from_xml
import copy import copy
from factories import *
def parse_json(response): def parse_json(response):
...@@ -220,12 +221,6 @@ class ContentStoreTest(TestCase): ...@@ -220,12 +221,6 @@ class ContentStoreTest(TestCase):
'display_name': 'Robot Super Course', 'display_name': 'Robot Super Course',
} }
self.section_data = {
'parent_location' : 'i4x://MITx/999/course/Robot_Super_Course',
'template' : 'i4x://edx/templates/chapter/Empty',
'display_name': 'Section One',
}
def tearDown(self): def tearDown(self):
# Make sure you flush out the test modulestore after the end # Make sure you flush out the test modulestore after the end
# of the last test because otherwise on the next run # of the last test because otherwise on the next run
...@@ -271,20 +266,27 @@ class ContentStoreTest(TestCase): ...@@ -271,20 +266,27 @@ class ContentStoreTest(TestCase):
status_code=200, status_code=200,
html=True) html=True)
def test_course_factory(self):
course = CourseFactory.create()
self.assertIsInstance(course, xmodule.course_module.CourseDescriptor)
def test_item_factory(self):
course = CourseFactory.create()
item = ItemFactory.create(parent_location=course.location)
self.assertIsInstance(item, xmodule.seq_module.SequenceDescriptor)
def test_course_index_view_with_course(self): def test_course_index_view_with_course(self):
"""Test viewing the index page with an existing course""" """Test viewing the index page with an existing course"""
# Create a course so there is something to view CourseFactory.create(display_name='Robot Super Educational Course')
resp = self.client.post(reverse('create_new_course'), self.course_data)
resp = self.client.get(reverse('index')) resp = self.client.get(reverse('index'))
self.assertContains(resp, self.assertContains(resp,
'<span class="class-name">Robot Super Course</span>', '<span class="class-name">Robot Super Educational Course</span>',
status_code=200, status_code=200,
html=True) html=True)
def test_course_overview_view_with_course(self): def test_course_overview_view_with_course(self):
"""Test viewing the course overview page with an existing course""" """Test viewing the course overview page with an existing course"""
# Create a course so there is something to view CourseFactory.create(org='MITx', course='999', display_name='Robot Super Course')
resp = self.client.post(reverse('create_new_course'), self.course_data)
data = { data = {
'org': 'MITx', 'org': 'MITx',
...@@ -300,8 +302,15 @@ class ContentStoreTest(TestCase): ...@@ -300,8 +302,15 @@ class ContentStoreTest(TestCase):
def test_clone_item(self): def test_clone_item(self):
"""Test cloning an item. E.g. creating a new section""" """Test cloning an item. E.g. creating a new section"""
resp = self.client.post(reverse('create_new_course'), self.course_data) CourseFactory.create(org='MITx', course='999', display_name='Robot Super Course')
resp = self.client.post(reverse('clone_item'), self.section_data)
section_data = {
'parent_location' : 'i4x://MITx/999/course/Robot_Super_Course',
'template' : 'i4x://edx/templates/chapter/Empty',
'display_name': 'Section One',
}
resp = self.client.post(reverse('clone_item'), section_data)
self.assertEqual(resp.status_code, 200) self.assertEqual(resp.status_code, 200)
data = parse_json(resp) data = parse_json(resp)
...@@ -323,16 +332,4 @@ class ContentStoreTest(TestCase): ...@@ -323,16 +332,4 @@ class ContentStoreTest(TestCase):
def test_edit_unit_full(self): def test_edit_unit_full(self):
self.check_edit_unit('full') self.check_edit_unit('full')
def test_factory(self):
from factories import *
course = CourseFactory.create()
print '\n'
print course
print '\n'
section = ItemFactory.create()
print '\n'
print section
print '\n'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment