Skip to content

Commit fbac681

Browse files
committed
boxes: Inform the user to use autocomplete on invalid recipients.
This commit modifies the `invalid_recipients_error` message to also mention the keys used for autocompleting recipients, so the user is able to quickly reach the valid form of the intended recipients. Tests added.
1 parent 84b203e commit fbac681

File tree

2 files changed

+63
-3
lines changed

2 files changed

+63
-3
lines changed

tests/ui_tools/test_boxes.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,58 @@ def test_tidying_recipients_on_keypresses(
143143

144144
assert write_box.to_write_box.edit_text == tidied_recipients
145145

146+
@pytest.mark.parametrize(
147+
["raw_recipients", "invalid_recipients"],
148+
[
149+
("Human 1 <[email protected]>", "Human 1 <[email protected]>"),
150+
151+
("Human 1", "Human 1"),
152+
],
153+
ids=["name_email_mismatch", "no_name_specified", "no_email_specified"],
154+
)
155+
@pytest.mark.parametrize(
156+
"key",
157+
keys_for_command("SEND_MESSAGE")
158+
+ keys_for_command("SAVE_AS_DRAFT")
159+
+ keys_for_command("CYCLE_COMPOSE_FOCUS"),
160+
)
161+
def test_footer_notification_on_invalid_recipients(
162+
self,
163+
write_box,
164+
key,
165+
mocker,
166+
widget_size,
167+
raw_recipients,
168+
invalid_recipients,
169+
):
170+
171+
write_box.model.is_valid_private_recipient = mocker.Mock(return_value=False)
172+
write_box.private_box_view()
173+
write_box.focus_position = write_box.FOCUS_CONTAINER_HEADER
174+
write_box.header_write_box.focus_col = write_box.FOCUS_HEADER_BOX_RECIPIENT
175+
176+
write_box.to_write_box.edit_text = raw_recipients
177+
write_box.to_write_box.set_edit_pos(len(raw_recipients))
178+
expected_lines = [
179+
"Invalid recipient(s) - " + invalid_recipients,
180+
" - Use ",
181+
("footer_contrast", primary_key_for_command("AUTOCOMPLETE")),
182+
" or ",
183+
("footer_contrast", primary_key_for_command("AUTOCOMPLETE_REVERSE")),
184+
" to autocomplete.",
185+
]
186+
187+
size = widget_size(write_box)
188+
write_box.keypress(size, key)
189+
190+
self.view.controller.report_error.assert_called_once_with(expected_lines)
191+
# If there are invalid recipients, we expect the focus
192+
# to remain in the to_write_box.
193+
assert write_box.focus_position == write_box.FOCUS_CONTAINER_HEADER
194+
assert (
195+
write_box.header_write_box.focus_col == write_box.FOCUS_HEADER_BOX_RECIPIENT
196+
)
197+
146198
@pytest.mark.parametrize(
147199
"text, state",
148200
[

zulipterminal/ui_tools/boxes.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,17 @@ def tidy_valid_recipients_and_notify_invalid_ones(
252252
write_box.edit_pos = len(write_box.edit_text)
253253

254254
if invalid_recipients:
255-
invalid_recipients_error = (
256-
f"Invalid recipient(s) - {', '.join(invalid_recipients)}"
257-
)
255+
invalid_recipients_error = [
256+
"Invalid recipient(s) - " + ", ".join(invalid_recipients),
257+
" - Use ",
258+
("footer_contrast", primary_key_for_command("AUTOCOMPLETE")),
259+
" or ",
260+
(
261+
"footer_contrast",
262+
primary_key_for_command("AUTOCOMPLETE" "_REVERSE"),
263+
),
264+
" to autocomplete.",
265+
]
258266
self.view.controller.report_error(invalid_recipients_error)
259267
return False
260268

0 commit comments

Comments
 (0)