Coverage for tests / test_tutorial / test_commands / test_help / test_tutorial005.py: 100%

47 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-03-26 21:46 +0000

1import importlib 1abcdefg

2import os 1abcdefg

3import subprocess 1abcdefg

4import sys 1abcdefg

5from types import ModuleType 1abcdefg

6 

7import pytest 1abcdefg

8from typer.testing import CliRunner 1abcdefg

9 

10runner = CliRunner() 1abcdefg

11 

12 

13@pytest.fixture( 1abcdefg

14 name="mod", 

15 params=[ 

16 pytest.param("tutorial005_py310"), 

17 pytest.param("tutorial005_an_py310"), 

18 ], 

19) 

20def get_mod(request: pytest.FixtureRequest) -> ModuleType: 1abcdefg

21 module_name = f"docs_src.commands.help.{request.param}" 1abcdefg

22 mod = importlib.import_module(module_name) 1abcdefg

23 return mod 1abcdefg

24 

25 

26def test_help(mod: ModuleType): 1abcdefg

27 result = runner.invoke(mod.app, ["--help"]) 1abcdefg

28 assert result.exit_code == 0 1abcdefg

29 assert "create" in result.output 1abcdefg

30 assert "Create a new shiny user. ✨" in result.output 1abcdefg

31 assert "delete" in result.output 1abcdefg

32 assert "Delete a user with USERNAME." in result.output 1abcdefg

33 assert "Some internal utility function to create." not in result.output 1abcdefg

34 assert "Some internal utility function to delete." not in result.output 1abcdefg

35 

36 

37def test_help_create(mod: ModuleType): 1abcdefg

38 result = runner.invoke(mod.app, ["create", "--help"]) 1abcdefg

39 assert result.exit_code == 0 1abcdefg

40 assert "Create a new shiny user. ✨" in result.output 1abcdefg

41 assert "The username to be created" in result.output 1abcdefg

42 assert "Learn more at the Typer docs website" in result.output 1abcdefg

43 assert "Some internal utility function to create." not in result.output 1abcdefg

44 

45 

46def test_help_delete(mod: ModuleType): 1abcdefg

47 result = runner.invoke(mod.app, ["delete", "--help"]) 1abcdefg

48 assert result.exit_code == 0 1abcdefg

49 assert "Delete a user with USERNAME." in result.output 1abcdefg

50 assert "The username to be deleted" in result.output 1abcdefg

51 assert "Force the deletion 💥" in result.output 1abcdefg

52 assert "Some internal utility function to delete." not in result.output 1abcdefg

53 

54 

55def test_create(mod: ModuleType): 1abcdefg

56 result = runner.invoke(mod.app, ["create", "Camila"]) 1abcdefg

57 assert result.exit_code == 0 1abcdefg

58 assert "Creating user: Camila" in result.output 1abcdefg

59 

60 

61def test_delete(mod: ModuleType): 1abcdefg

62 result = runner.invoke(mod.app, ["delete", "Camila"]) 1abcdefg

63 assert result.exit_code == 0 1abcdefg

64 assert "Deleting user: Camila" in result.output 1abcdefg

65 

66 

67def test_script(mod: ModuleType): 1abcdefg

68 result = subprocess.run( 1abcdefg

69 [sys.executable, "-m", "coverage", "run", mod.__file__, "--help"], 

70 capture_output=True, 

71 encoding="utf-8", 

72 env={**os.environ, "PYTHONIOENCODING": "utf-8"}, 

73 ) 

74 assert "Usage" in result.stdout 1abcdefg