Skip to content

Commit 24f7e2f

Browse files
committed
core/boxes: Flash footer message on search misses, without narrowing.
1 parent 3444552 commit 24f7e2f

File tree

3 files changed

+65
-6
lines changed

3 files changed

+65
-6
lines changed

tests/core/test_core.py

+56-2
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ def test_stream_muting_confirmation_popup(
518518
"search_within_topic_narrow",
519519
],
520520
)
521-
@pytest.mark.parametrize("msg_ids", [({200, 300, 400}), (set()), ({100})])
522-
def test_search_message(
521+
@pytest.mark.parametrize("msg_ids", [({200, 300, 400}), ({100})])
522+
def test_search_message__hits(
523523
self,
524524
initial_narrow: List[Any],
525525
final_narrow: List[Any],
@@ -550,6 +550,60 @@ def set_msg_ids(*args: Any, **kwargs: Any) -> None:
550550
create_msg.assert_called_once_with(controller.model, msg_ids)
551551
assert controller.model.index == dict(index_search_messages, search=msg_ids)
552552

553+
@pytest.mark.parametrize(
554+
"initial_narrow, final_narrow",
555+
[
556+
([], [["search", "FOO"]]),
557+
([["search", "BOO"]], [["search", "FOO"]]),
558+
([["stream", "PTEST"]], [["stream", "PTEST"], ["search", "FOO"]]),
559+
(
560+
[["pm-with", "foo@zulip.com"], ["search", "BOO"]],
561+
[["pm-with", "foo@zulip.com"], ["search", "FOO"]],
562+
),
563+
(
564+
[["stream", "PTEST"], ["topic", "RDS"]],
565+
[["stream", "PTEST"], ["topic", "RDS"], ["search", "FOO"]],
566+
),
567+
],
568+
ids=[
569+
"Default_all_msg_search",
570+
"redo_default_search",
571+
"search_within_stream",
572+
"pm_search_again",
573+
"search_within_topic_narrow",
574+
],
575+
)
576+
def test_search_message__no_hits(
577+
self,
578+
initial_narrow: List[Any],
579+
final_narrow: List[Any],
580+
controller: Controller,
581+
mocker: MockerFixture,
582+
index_search_messages: Index,
583+
msg_ids: Set[int] = set(),
584+
) -> None:
585+
get_message = mocker.patch(MODEL + ".get_messages")
586+
create_msg = mocker.patch(MODULE + ".create_msg_box_list")
587+
mocker.patch(MODEL + ".get_message_ids_in_current_narrow", return_value=msg_ids)
588+
controller.model.index = index_search_messages # Any initial search index
589+
controller.view.message_view = mocker.patch("urwid.ListBox")
590+
controller.model.narrow = initial_narrow
591+
592+
def set_msg_ids(*args: Any, **kwargs: Any) -> None:
593+
controller.model.index["search"].update(msg_ids)
594+
595+
get_message.side_effect = set_msg_ids
596+
assert controller.model.index["search"] == {500}
597+
598+
controller.search_messages("FOO")
599+
600+
assert controller.model.narrow == final_narrow
601+
get_message.assert_called_once_with(
602+
num_after=0, num_before=30, anchor=10000000000
603+
)
604+
create_msg.assert_not_called()
605+
assert controller.model.index == dict(index_search_messages, search=msg_ids)
606+
553607
@pytest.mark.parametrize(
554608
"screen_size, expected_popup_size",
555609
[

zulipterminal/core.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -504,20 +504,23 @@ def show_media_confirmation_popup(
504504
self, question, callback, location="center"
505505
)
506506

507-
def search_messages(self, text: str) -> None:
507+
def search_messages(self, text: str) -> bool:
508508
# Search for a text in messages
509509
self.model.index["search"].clear()
510510
self.model.set_search_narrow(text)
511511

512512
self.model.get_messages(num_after=0, num_before=30, anchor=10000000000)
513513
msg_id_list = self.model.get_message_ids_in_current_narrow()
514+
if len(msg_id_list) == 0:
515+
return False
514516

515517
w_list = create_msg_box_list(self.model, msg_id_list)
516518
self.view.message_view.log.clear()
517519
self.view.message_view.log.extend(w_list)
518520
focus_position = 0
519521
if 0 <= focus_position < len(w_list):
520522
self.view.message_view.set_focus(focus_position)
523+
return True
521524

522525
def save_draft_confirmation_popup(self, draft: Composition) -> None:
523526
question = urwid.Text(

zulipterminal/ui_tools/boxes.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1032,9 +1032,11 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
10321032
return key
10331033

10341034
elif is_command_key("EXECUTE_SEARCH", key):
1035-
self.controller.exit_editor_mode()
1036-
self.controller.search_messages(self.text_box.edit_text)
1037-
self.controller.view.middle_column.set_focus("body")
1035+
if self.controller.search_messages(self.text_box.edit_text):
1036+
self.controller.exit_editor_mode()
1037+
self.controller.view.middle_column.set_focus("body")
1038+
else:
1039+
self.controller.report_error(["No results found."])
10381040
return key
10391041

10401042
key = super().keypress(size, key)

0 commit comments

Comments
 (0)