Commit 86bc70c3 by Will Daly

Reverted cms changes back

parent f652fb5f
'''
Utilities for contentstore tests
'''
#pylint: disable=W0603
import json import json
import copy import copy
from uuid import uuid4 from uuid import uuid4
...@@ -16,17 +10,6 @@ from django.contrib.auth.models import User ...@@ -16,17 +10,6 @@ from django.contrib.auth.models import User
import xmodule.modulestore.django import xmodule.modulestore.django
from xmodule.templates import update_templates from xmodule.templates import update_templates
# Share modulestore setup between classes
# We need to use global variables, because
# each ModuleStoreTestCase subclass will have its
# own class variables, and we want to re-use the
# same modulestore for all test cases.
#pylint: disable=C0103
test_modulestore = None
#pylint: disable=C0103
orig_modulestore = None
class ModuleStoreTestCase(TestCase): class ModuleStoreTestCase(TestCase):
""" Subclass for any test case that uses the mongodb """ Subclass for any test case that uses the mongodb
...@@ -34,88 +17,37 @@ class ModuleStoreTestCase(TestCase): ...@@ -34,88 +17,37 @@ class ModuleStoreTestCase(TestCase):
collection with templates before running the TestCase collection with templates before running the TestCase
and drops it they are finished. """ and drops it they are finished. """
@staticmethod def _pre_setup(self):
def flush_mongo_except_templates(): super(ModuleStoreTestCase, self)._pre_setup()
'''
Delete everything in the module store except templates
'''
modulestore = xmodule.modulestore.django.modulestore()
# This query means: every item in the collection
# that is not a template
query = { "_id.course": { "$ne": "templates" }}
# Remove everything except templates
modulestore.collection.remove(query)
@staticmethod
def load_templates_if_necessary():
'''
Load templates into the modulestore only if they do not already exist.
We need the templates, because they are copied to create
XModules such as sections and problems
'''
modulestore = xmodule.modulestore.django.modulestore()
# Count the number of templates
query = { "_id.course": "templates"}
num_templates = modulestore.collection.find(query).count()
if num_templates < 1:
update_templates()
@classmethod
def setUpClass(cls):
'''
Flush the mongo store and set up templates
'''
global test_modulestore
global orig_modulestore
# Use a uuid to differentiate # Use a uuid to differentiate
# the mongo collections on jenkins. # the mongo collections on jenkins.
if test_modulestore is None: self.orig_MODULESTORE = copy.deepcopy(settings.MODULESTORE)
orig_modulestore = copy.deepcopy(settings.MODULESTORE) self.test_MODULESTORE = self.orig_MODULESTORE
test_modulestore = orig_modulestore self.test_MODULESTORE['default']['OPTIONS']['collection'] = 'modulestore_%s' % uuid4().hex
test_modulestore['default']['OPTIONS']['collection'] = 'modulestore_%s' % uuid4().hex self.test_MODULESTORE['direct']['OPTIONS']['collection'] = 'modulestore_%s' % uuid4().hex
test_modulestore['direct']['OPTIONS']['collection'] = 'modulestore_%s' % uuid4().hex settings.MODULESTORE = self.test_MODULESTORE
xmodule.modulestore.django._MODULESTORES = {}
# Flush and initialize the module store
settings.MODULESTORE = test_modulestore # It needs the templates because it creates new records
# by cloning from the template.
TestCase.setUpClass() # Note that if your test module gets in some weird state
# (though it shouldn't), do this manually
@classmethod # from the bash shell to drop it:
def tearDownClass(cls): # $ mongo test_xmodule --eval "db.dropDatabase()"
''' xmodule.modulestore.django._MODULESTORES = {}
Revert to the old modulestore settings update_templates()
'''
settings.MODULESTORE = orig_modulestore
def _pre_setup(self):
'''
Remove everything but the templates before each test
'''
# Flush anything that is not a template
ModuleStoreTestCase.flush_mongo_except_templates()
# Check that we have templates loaded; if not, load them
ModuleStoreTestCase.load_templates_if_necessary()
# Call superclass implementation
TestCase._pre_setup(self)
def _post_teardown(self): def _post_teardown(self):
''' # Make sure you flush out the modulestore.
Flush everything we created except the templates # Drop the collection at the end of the test,
''' # otherwise there will be lingering collections leftover
# Flush anything that is not a template # from executing the tests.
ModuleStoreTestCase.flush_mongo_except_templates() xmodule.modulestore.django._MODULESTORES = {}
xmodule.modulestore.django.modulestore().collection.drop()
# Call superclass implementation settings.MODULESTORE = self.orig_MODULESTORE
TestCase._post_teardown(self)
super(ModuleStoreTestCase, self)._post_teardown()
def parse_json(response): def parse_json(response):
......
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