Made the wiki glue test skippable, in case the python subversion bindings are unavailable. Added creation of temporary directories also for the svn repositores created for wikis during testing.

- Legacy-Id: 12183
This commit is contained in:
Henrik Levkowetz 2016-10-19 21:14:20 +00:00
parent ba5c17ecfd
commit c22842a7c4
2 changed files with 24 additions and 4 deletions

View file

@ -31,7 +31,8 @@ class Command(BaseCommand):
help = "Create group wikis for WGs, RGs and Areas which don't have one." help = "Create group wikis for WGs, RGs and Areas which don't have one."
option_list = BaseCommand.option_list + ( option_list = BaseCommand.option_list + (
make_option('--wiki-dir-pattern', dest='wiki_dir_pattern', help='File containing email (default: stdin)'), make_option('--wiki-dir-pattern', dest='wiki_dir_pattern', help='A pattern with %s placeholder for group wiki path'),
make_option('--svn-dir-pattern', dest='svn_dir_pattern', help='A pattern with %s placeholder for group svn path'),
) )
def note(self, msg): def note(self, msg):
@ -237,6 +238,7 @@ class Command(BaseCommand):
self.verbosity = options['verbosity'] self.verbosity = options['verbosity']
self.errors = 0 self.errors = 0
self.wiki_dir_pattern = options.get('wiki_dir_pattern', settings.TRAC_WIKI_DIR_PATTERN) self.wiki_dir_pattern = options.get('wiki_dir_pattern', settings.TRAC_WIKI_DIR_PATTERN)
self.svn_dir_pattern = options.get('svn_dir_pattern', settings.TRAC_SVN_DIR_PATTERN)
if isinstance(self.verbosity, (type(""), type(u""))) and self.verbosity.isdigit(): if isinstance(self.verbosity, (type(""), type(u""))) and self.verbosity.isdigit():
self.verbosity = int(self.verbosity) self.verbosity = int(self.verbosity)
@ -253,7 +255,7 @@ class Command(BaseCommand):
try: try:
self.note("Processing group %s" % group.acronym) self.note("Processing group %s" % group.acronym)
group.trac_dir = self.wiki_dir_pattern % group.acronym group.trac_dir = self.wiki_dir_pattern % group.acronym
group.svn_dir = settings.TRAC_SVN_DIR_PATTERN % group.acronym group.svn_dir = self.svn_dir_pattern % group.acronym
if not os.path.exists(group.svn_dir): if not os.path.exists(group.svn_dir):
err = self.create_svn(group.svn_dir) err = self.create_svn(group.svn_dir)

View file

@ -4,6 +4,7 @@ import types
import shutil import shutil
from StringIO import StringIO from StringIO import StringIO
from pipe import pipe from pipe import pipe
from unittest import skipIf
from textwrap import dedent from textwrap import dedent
from email.mime.text import MIMEText from email.mime.text import MIMEText
@ -27,6 +28,14 @@ from ietf.utils.test_data import make_test_data
from ietf.utils.test_runner import get_template_paths from ietf.utils.test_runner import get_template_paths
from ietf.group.models import Group from ietf.group.models import Group
skip_wiki_glue_testing = False
skip_wiki_glue_message = ""
try:
import svn # pyflakes:ignore
except ImportError as e:
skip_wiki_glue_testing = True
skip_wiki_glue_message = " Skipping trac tests: %s" % e
class PyFlakesTestCase(TestCase): class PyFlakesTestCase(TestCase):
def test_pyflakes(self): def test_pyflakes(self):
@ -190,15 +199,20 @@ class TemplateChecksTestCase(TestCase):
settings.DEBUG = saved_debug settings.DEBUG = saved_debug
@skipIf(skip_wiki_glue_testing, skip_wiki_glue_message)
class TestWikiGlueManagementCommand(TestCase): class TestWikiGlueManagementCommand(TestCase):
def setUp(self): def setUp(self):
self.wiki_dir_pattern = os.path.abspath('tmp-wiki-dir-root/%s') self.wiki_dir_pattern = os.path.abspath('tmp-wiki-dir-root/%s')
if not os.path.exists(self.wiki_dir_pattern): if not os.path.exists(self.wiki_dir_pattern):
os.mkdir(os.path.dirname(self.wiki_dir_pattern)) os.mkdir(os.path.dirname(self.wiki_dir_pattern))
self.svn_dir_pattern = os.path.abspath('tmp-svn-dir-root/%s')
if not os.path.exists(self.svn_dir_pattern):
os.mkdir(os.path.dirname(self.svn_dir_pattern))
def tearDown(self): def tearDown(self):
shutil.rmtree(os.path.dirname(self.wiki_dir_pattern)) shutil.rmtree(os.path.dirname(self.wiki_dir_pattern))
shutil.rmtree(os.path.dirname(self.svn_dir_pattern))
def test_wiki_create_output(self): def test_wiki_create_output(self):
make_test_data() make_test_data()
@ -207,12 +221,16 @@ class TestWikiGlueManagementCommand(TestCase):
state__slug='active' state__slug='active'
).order_by('acronym') ).order_by('acronym')
out = StringIO() out = StringIO()
call_command('create_group_wikis', stdout=out, verbosity=2, wiki_dir_pattern=self.wiki_dir_pattern) call_command('create_group_wikis', stdout=out, verbosity=2,
wiki_dir_pattern=self.wiki_dir_pattern,
svn_dir_pattern=self.svn_dir_pattern,
)
command_output = out.getvalue() command_output = out.getvalue()
for group in groups: for group in groups:
self.assertIn("Processing group %s" % group.acronym, command_output) self.assertIn("Processing group %s" % group.acronym, command_output)
# Do a bit of verification using trac-admin, too # Do a bit of verification using trac-admin, too
admin_code, admin_output, admin_error = pipe('trac-admin %s permission list' % (self.wiki_dir_pattern % group.acronym)) admin_code, admin_output, admin_error = pipe(
'trac-admin %s permission list' % (self.wiki_dir_pattern % group.acronym))
self.assertEqual(admin_code, 0) self.assertEqual(admin_code, 0)
roles = group.role_set.filter(name_id__in=['chair', 'secr', 'ad']) roles = group.role_set.filter(name_id__in=['chair', 'secr', 'ad'])
for role in roles: for role in roles: