def test_add_repo(self): """ Various exit path tests for test_add_repo """ self.assertEqual(git_add_course.GIT_IMPORT_NO_DIR, git_add_course.add_repo(self.TEST_REPO, None)) try: os.mkdir(getattr(settings, 'GIT_REPO_DIR')) except OSError: pass self.assertEqual(git_add_course.GIT_IMPORT_URL_BAD, git_add_course.add_repo('foo', None)) self.assertEqual( git_add_course.GIT_IMPORT_CANNOT_PULL, git_add_course.add_repo('file:///foobar.git', None) ) # Test git repo that exists, but is "broken" bare_repo = os.path.abspath('{0}/{1}'.format(settings.TEST_ROOT, 'bare.git')) os.mkdir(os.path.abspath(bare_repo)) subprocess.call(['git', '--bare', 'init', ], cwd=bare_repo) self.assertEqual( git_add_course.GIT_IMPORT_BAD_REPO, git_add_course.add_repo('file://{0}'.format(bare_repo), None) ) shutil.rmtree(bare_repo)
def import_mongo_course(self, gitloc): """ Imports course using management command and captures logging output at debug level for display in template """ msg = u'' logging.debug(_('Adding course using git repo {0}').format(gitloc)) # Grab logging output for debugging imports output = StringIO.StringIO() import_log_handler = logging.StreamHandler(output) import_log_handler.setLevel(logging.DEBUG) logger_names = ['xmodule.modulestore.xml_importer', 'dashboard.management.commands.git_add_course', 'xmodule.modulestore.xml', 'xmodule.seq_module', ] loggers = [] for logger_name in logger_names: logger = logging.getLogger(logger_name) logger.old_level = logger.level logger.setLevel(logging.DEBUG) logger.addHandler(import_log_handler) loggers.append(logger) git_add_course.add_repo(gitloc, None) ret = output.getvalue() # Remove handler hijacks for logger in loggers: logger.setLevel(logger.old_level) logger.removeHandler(import_log_handler) msg = u"<h4 style='color:blue'>{0} {1}</h4>".format( _('Added course from'), gitloc) msg += _("<pre>{0}</pre>").format(escape(ret)) return msg