diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index 37ce66b62..dc5904cda 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -34,7 +34,15 @@ def choose_plugin(prepared, question): question, opts, help_label="More Info") if code == display_util.OK: - return prepared[index] + plugin_ep = prepared[index] + if plugin_ep.misconfigured: + util(interfaces.IDisplay).notification( + "The selected plugin encountered an error while parsing " + "your server configuration and cannot be used. The error " + "was:\n\n{0}".format(plugin_ep.prepare()), + height=display_util.HEIGHT, pause=False) + else: + return plugin_ep elif code == display_util.HELP: if prepared[index].misconfigured: msg = "Reported Error: %s" % prepared[index].prepare() diff --git a/letsencrypt/tests/display/ops_test.py b/letsencrypt/tests/display/ops_test.py index 9d4a3a933..7427a1dc0 100644 --- a/letsencrypt/tests/display/ops_test.py +++ b/letsencrypt/tests/display/ops_test.py @@ -41,9 +41,11 @@ class ChoosePluginTest(unittest.TestCase): return choose_plugin(self.plugins, "Question?") @mock.patch("letsencrypt.display.ops.util") - def test_successful_choice(self, mock_util): - mock_util().menu.return_value = (display_util.OK, 0) - self.assertEqual(self.mock_apache, self._call()) + def test_selection(self, mock_util): + mock_util().menu.side_effect = [(display_util.OK, 0), + (display_util.OK, 1)] + self.assertEqual(self.mock_stand, self._call()) + self.assertEqual(mock_util().notification.call_count, 1) @mock.patch("letsencrypt.display.ops.util") def test_more_info(self, mock_util):