Add Days field to the TUI cert form
This commit is contained in:
@@ -115,11 +115,11 @@ def test_show_cert_form_uses_erase_not_clear():
|
||||
|
||||
|
||||
def test_show_cert_form_confirm():
|
||||
"""Enter advances through the 3 fields to the Continue button; Enter on
|
||||
Continue confirms. That's 4 Enter keypresses total."""
|
||||
"""Enter advances through the 4 fields to the Continue button; Enter on
|
||||
Continue confirms. That's 5 Enter keypresses total."""
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [10, 10, 10, 10]
|
||||
win.getch.side_effect = [10, 10, 10, 10, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="bob@example.com")
|
||||
assert isinstance(result, CertFormResult)
|
||||
@@ -130,11 +130,11 @@ def test_show_cert_form_confirm():
|
||||
|
||||
|
||||
def test_show_cert_form_cancel_button():
|
||||
"""Tab to the Cancel button (4 Tabs from start) and press Enter cancels."""
|
||||
"""Tab to the Cancel button (5 Tabs from start) and press Enter cancels."""
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
# Tab×4: cn→email→password→Continue→Cancel, then Enter
|
||||
win.getch.side_effect = [9, 9, 9, 9, 10]
|
||||
# Tab×5: cn→email→days→password→Continue→Cancel, then Enter
|
||||
win.getch.side_effect = [9, 9, 9, 9, 9, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="alice", email="alice@example.com")
|
||||
assert isinstance(result, CertFormResult)
|
||||
@@ -142,7 +142,7 @@ def test_show_cert_form_cancel_button():
|
||||
|
||||
|
||||
def test_show_cert_form_clamps_to_narrow_screen():
|
||||
"""The form's fixed 13x62 size must not exceed a smaller-than-usual
|
||||
"""The form's fixed 15x62 size must not exceed a smaller-than-usual
|
||||
screen, which would make curses.newwin() raise."""
|
||||
stdscr = _make_stdscr(rows=10, cols=40)
|
||||
win = _make_win()
|
||||
@@ -156,6 +156,58 @@ def test_show_cert_form_clamps_to_narrow_screen():
|
||||
assert x >= 0
|
||||
|
||||
|
||||
def test_show_cert_form_returns_days():
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [10, 10, 10, 10, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="b@c.d", days="90")
|
||||
assert result.confirmed is True
|
||||
assert result.days == "90"
|
||||
|
||||
|
||||
def test_show_cert_form_blank_days_means_inherit():
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [10, 10, 10, 10, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="b@c.d", days="")
|
||||
assert result.confirmed is True
|
||||
assert result.days == ""
|
||||
|
||||
|
||||
def test_show_cert_form_days_field_is_digits_only():
|
||||
# cn is read-only here, so focus starts on email: Tab once to reach days.
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [9] + [ord(c) for c in "9a0!"] + [10, 10, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="b@c.d", days="",
|
||||
cn_readonly=True)
|
||||
assert result.confirmed is True
|
||||
assert result.days == "90"
|
||||
|
||||
|
||||
def test_show_cert_form_refuses_zero_days():
|
||||
# Submitting "0" must keep the form open rather than closing and failing
|
||||
# later inside EasyRSA. Enter×5 tries to submit, Esc then cancels.
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [10, 10, 10, 10, 10, 27]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="b@c.d", days="0")
|
||||
assert result.confirmed is False
|
||||
|
||||
|
||||
def test_show_cert_form_normalises_leading_zero_days():
|
||||
stdscr = _make_stdscr()
|
||||
win = _make_win(rows=20, cols=70)
|
||||
win.getch.side_effect = [10, 10, 10, 10, 10]
|
||||
with patch("curses.newwin", return_value=win):
|
||||
result = show_cert_form(stdscr, cn="bob", email="b@c.d", days="090")
|
||||
assert result.days == "90"
|
||||
|
||||
|
||||
def test_show_cert_form_newwin_failure_returns_cancelled():
|
||||
"""If curses.newwin() still fails despite clamping, show_cert_form must
|
||||
degrade to an unconfirmed result rather than crash the whole app."""
|
||||
|
||||
Reference in New Issue
Block a user