66 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- 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])
 |