mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Merge pull request #1818 from jeromelebleu/load_initial_data
Catch errors in load_initial_data command
This commit is contained in:
@@ -61,9 +61,18 @@ class Command(BaseCommand):
|
||||
|
||||
for extname in list(extensions.exts_pool.extensions.keys()):
|
||||
extension = extensions.exts_pool.get_extension(extname)
|
||||
extension.load_initial_data()
|
||||
signals.initial_data_loaded.send(
|
||||
sender=self.__class__, extname=extname)
|
||||
try:
|
||||
extension.load_initial_data()
|
||||
except Exception as e:
|
||||
self.stderr.write(
|
||||
"Unable to load initial data for '{}' ({}).".format(
|
||||
extname, str(e)
|
||||
)
|
||||
)
|
||||
else:
|
||||
signals.initial_data_loaded.send(
|
||||
sender=self.__class__, extname=extname
|
||||
)
|
||||
|
||||
if options["extra_fixtures"]:
|
||||
from modoboa.admin import factories
|
||||
|
||||
@@ -19,7 +19,9 @@ class StupidExtension1(extensions.ModoExtension):
|
||||
pass
|
||||
|
||||
def load_initial_data(self):
|
||||
raise RuntimeError
|
||||
from modoboa.admin.factories import DomainFactory
|
||||
|
||||
DomainFactory(name="stupid_1.com")
|
||||
|
||||
|
||||
extensions.exts_pool.register_extension(StupidExtension1)
|
||||
|
||||
@@ -15,5 +15,8 @@ class StupidExtension2(extensions.ModoExtension):
|
||||
version = "1.0.0"
|
||||
description = "A stupid extension"
|
||||
|
||||
def load_initial_data(self):
|
||||
raise RuntimeError
|
||||
|
||||
|
||||
extensions.exts_pool.register_extension(StupidExtension2, show=False)
|
||||
|
||||
@@ -6,13 +6,15 @@ from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import sys
|
||||
from io import StringIO
|
||||
|
||||
from testfixtures import compare
|
||||
|
||||
from django.core import management
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from .. import extensions
|
||||
from modoboa.admin.models import Domain
|
||||
from .. import extensions, signals
|
||||
|
||||
sys.path.append(os.path.dirname(__file__))
|
||||
|
||||
@@ -74,8 +76,21 @@ class ExtensionTestCase(TestCase):
|
||||
|
||||
def test_load_initial_data(self):
|
||||
"""Check if method is called."""
|
||||
with self.assertRaises(RuntimeError):
|
||||
management.call_command("load_initial_data")
|
||||
self.signal_called = 0
|
||||
|
||||
def handler(sender, extname, **kwargs):
|
||||
self.assertEqual(extname, "stupid_extension_1")
|
||||
self.signal_called += 1
|
||||
|
||||
signals.initial_data_loaded.connect(handler)
|
||||
|
||||
stderr_out = StringIO()
|
||||
management.call_command("load_initial_data", stderr=stderr_out)
|
||||
self.assertTrue(Domain.objects.filter(name="stupid_1.com").exists())
|
||||
self.assertIn("stupid_extension_2", stderr_out.getvalue())
|
||||
self.assertEqual(self.signal_called, 1)
|
||||
|
||||
signals.initial_data_loaded.disconnect(handler)
|
||||
|
||||
def test_get_urls(self):
|
||||
"""Load extensions urls."""
|
||||
|
||||
Reference in New Issue
Block a user