cookiecutter
41 строка · 1.2 Кб
1"""Tests around prompting for and handling of choice variables."""
2
3import pytest4
5from cookiecutter.prompt import read_user_choice6
7OPTIONS = ['hello', 'world', 'foo', 'bar']8OPTIONS_INDEX = ['1', '2', '3', '4']9
10EXPECTED_PROMPT = """Select varname11[bold magenta]1[/] - [bold]hello[/]
12[bold magenta]2[/] - [bold]world[/]
13[bold magenta]3[/] - [bold]foo[/]
14[bold magenta]4[/] - [bold]bar[/]
15Choose from"""
16
17
18@pytest.mark.parametrize('user_choice, expected_value', enumerate(OPTIONS, 1))19def test_click_invocation(mocker, user_choice, expected_value) -> None:20"""Test click function called correctly by cookiecutter.21
22Test for choice type invocation.
23"""
24prompt = mocker.patch('rich.prompt.Prompt.ask')25prompt.return_value = f'{user_choice}'26
27assert read_user_choice('varname', OPTIONS) == expected_value28
29prompt.assert_called_once_with(EXPECTED_PROMPT, choices=OPTIONS_INDEX, default='1')30
31
32def test_raise_if_options_is_not_a_non_empty_list() -> None:33"""Test function called by cookiecutter raise expected errors.34
35Test for choice type invocation.
36"""
37with pytest.raises(TypeError):38read_user_choice('foo', 'NOT A LIST')39
40with pytest.raises(ValueError):41read_user_choice('foo', [])42