# -*- coding: utf-8; -*- from unittest.mock import Mock, patch from wuttjamaican.testing import ConfigTestCase from wuttjamaican.cli import problems as mod from wuttjamaican.problems import ProblemHandler, ProblemCheck class FakeCheck(ProblemCheck): system_key = 'wuttatest' problem_key = 'fake_check' title = "Fake problem check" class TestProblems(ConfigTestCase): def test_basic(self): ctx = Mock() ctx.parent.wutta_config = self.config # nb. avoid printing to console with patch.object(mod.rich, 'print') as rich_print: # nb. use fake check with patch.object(ProblemHandler, 'get_all_problem_checks', return_value=[FakeCheck]): with patch.object(ProblemHandler, 'run_problem_checks') as run_problem_checks: # list problem checks orig_organize = ProblemHandler.organize_problem_checks def mock_organize(checks): return orig_organize(None, checks) with patch.object(ProblemHandler, 'organize_problem_checks', side_effect=mock_organize) as organize_problem_checks: mod.problems(ctx, list_checks=True) organize_problem_checks.assert_called_once_with([FakeCheck]) run_problem_checks.assert_not_called() # warning if unknown system key requested rich_print.reset_mock() # nb. just --list for convenience # note that since we also specify invalid --system, no checks will # match and hence nothing significant will be printed to stdout mod.problems(ctx, list_checks=True, systems=['craziness']) rich_print.assert_called_once() self.assertEqual(len(rich_print.call_args.args), 1) self.assertIn("No problem reports exist for system", rich_print.call_args.args[0]) self.assertEqual(len(rich_print.call_args.kwargs), 0) run_problem_checks.assert_not_called() # run problem checks mod.problems(ctx) run_problem_checks.assert_called_once_with([FakeCheck])