1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
import re
import pytest
def test_boolean_question_yes(console):
"""Test that boolean_question returns True when user selects Yes."""
console.values = ["y"]
result = console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=None,
)
assert console.prompts == ["Confirm? [y/n]? "]
assert result is True
def test_boolean_question_no(console):
"""Test that boolean_question returns False when user selects No."""
console.values = ["n"]
result = console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=None,
)
assert console.prompts == ["Confirm? [y/n]? "]
assert result is False
@pytest.mark.parametrize(
"default, expected, prompt",
[
(True, True, "Confirm? [Y/n]? "),
(False, False, "Confirm? [y/N]? "),
],
)
def test_boolean_question_default_used(console, default, expected, prompt):
"""If no input is provided, the default value should be used."""
console.values = [""]
result = console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=default,
)
assert console.prompts == [prompt]
assert result == expected
@pytest.mark.parametrize(
"override_value, expected_result",
[
("Yes", True),
("no", False),
],
)
def test_boolean_question_override_used(
console,
capsys,
override_value,
expected_result,
):
"""The override is used if provided and valid (parametrized for True/False
cases)."""
result = console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=None,
override_value=override_value,
)
output = capsys.readouterr().out
assert f"Using override value {override_value!r}" in output
assert result == expected_result
assert console.prompts == []
def test_boolean_question_override_invalid(console):
"""If override_value is invalid, an error should be raised immediately."""
with pytest.raises(
ValueError,
match=re.escape("Invalid boolean value: 'Yeah Nah'. Expected one of "),
):
console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=True,
override_value="Yeah Nah",
)
def test_boolean_question_empty_input_no_default_returns_false(console):
"""Reprompts the user when no override or default given."""
console.values = ["", "", "n"] # Simulates pressing Enter
result = console.boolean_question(
description="Confirm?",
intro="Are you sure?",
default=None,
override_value=None,
)
assert result is False
|