3
0
Fork 0
wuttjamaican/tests/cli/test_problems.py

67 lines
2.5 KiB
Python
Raw Normal View History

# -*- 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])