import json import copy from time import time from django.test import TestCase from django.conf import settings from student.models import Registration from django.contrib.auth.models import User import xmodule.modulestore.django from xmodule.templates import update_templates class ModuleStoreTestCase(TestCase): """ Subclass for any test case that uses the mongodb module store. This populates a uniquely named modulestore collection with templates before running the TestCase and drops it they are finished. """ def _pre_setup(self): super(ModuleStoreTestCase, self)._pre_setup() # Use the current seconds since epoch to differentiate # the mongo collections on jenkins. sec_since_epoch = '%s' % int(time() * 100) self.orig_MODULESTORE = copy.deepcopy(settings.MODULESTORE) self.test_MODULESTORE = self.orig_MODULESTORE self.test_MODULESTORE['default']['OPTIONS']['collection'] = 'modulestore_%s' % sec_since_epoch self.test_MODULESTORE['direct']['OPTIONS']['collection'] = 'modulestore_%s' % sec_since_epoch settings.MODULESTORE = self.test_MODULESTORE # Flush and initialize the module store # It needs the templates because it creates new records # by cloning from the template. # Note that if your test module gets in some weird state # (though it shouldn't), do this manually # from the bash shell to drop it: # $ mongo test_xmodule --eval "db.dropDatabase()" xmodule.modulestore.django._MODULESTORES = {} update_templates() def _post_teardown(self): # Make sure you flush out the modulestore. # Drop the collection at the end of the test, # otherwise there will be lingering collections leftover # from executing the tests. xmodule.modulestore.django._MODULESTORES = {} xmodule.modulestore.django.modulestore().collection.drop() settings.MODULESTORE = self.orig_MODULESTORE super(ModuleStoreTestCase, self)._post_teardown() def parse_json(response): """Parse response, which is assumed to be json""" return json.loads(response.content) def user(email): """look up a user by email""" return User.objects.get(email=email) def registration(email): """look up registration object by email""" return Registration.objects.get(user__email=email)