Coverage for tests/test_cli.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-16 16:07 +0000

1import functools 

2from importlib.metadata import version 

3from types import FunctionType 

4 

5import pytest 

6from click.testing import CliRunner 

7 

8from sample_project.cli import main 

9 

10# See https://click.palletsprojects.com/testing/ 

11 

12 

13@pytest.fixture 

14def cli() -> FunctionType: 

15 runner = CliRunner() 

16 yield functools.partial(runner.invoke, main) 

17 

18 

19def test_cli_output(cli: FunctionType): 

20 assert cli().output.rstrip() == "Hello, Sample Project!" 

21 

22 

23def test_cli_version(cli: FunctionType): 

24 expected_version = version("sample-project") 

25 assert cli(["--version"]).output.rstrip() == expected_version 

26 

27 

28def test_cli_reverse(cli: FunctionType): 

29 assert cli(["Foo"]).output.rstrip().endswith("ooF") 

30 

31 

32@pytest.mark.parametrize("input_str,expected_output", [("Foo", "OOF"), ("Bar", "RAB")]) 

33def test_cli_option_capitalize(cli: FunctionType, input_str, expected_output): 

34 assert cli(["--capitalize", input_str]).output.rstrip().endswith(expected_output)