@@ -46,6 +46,38 @@ def test_task(mocker: MockerFixture) -> None:
4646 my_task .assert_called_once_with (cast (release .ReleaseShelf , db ))
4747
4848
49+ @pytest .mark .parametrize (
50+ ["test_inputs" , "expected" ],
51+ [
52+ (["yes" ], True ),
53+ (["no" ], False ),
54+ (["maybe" , "yes" ], True ),
55+ (["maybe" , "no" ], False ),
56+ (["" , "nope" , "y" , "yes" ], True ),
57+ (["" , "nope" , "n" , "no" ], False ),
58+ ],
59+ )
60+ def test_ask_question (
61+ mocker : MockerFixture ,
62+ capsys : pytest .CaptureFixture [str ],
63+ test_inputs : list [str ],
64+ expected : bool ,
65+ ) -> None :
66+ # Arrange
67+ mocker .patch ("release.input" , side_effect = test_inputs )
68+
69+ # Act
70+ result = release .ask_question ("Do you want to proceed?" )
71+
72+ # Assert
73+ assert result is expected
74+ captured = capsys .readouterr ()
75+ assert "Do you want to proceed?" in captured .out
76+ # All inputs except the last are invalid
77+ invalid_count = len (test_inputs ) - 1
78+ assert captured .out .count ("Please enter yes or no." ) == invalid_count
79+
80+
4981def test_tweak_patchlevel (tmp_path : Path ) -> None :
5082 # Arrange
5183 tag = release .Tag ("3.14.0b2" )
0 commit comments