Skip to content

Commit 91bb72c

Browse files
committed
refactor: boxes: Rename & extend msg_edit_id to msg_edit_state.
The id is now within a namedtuple, which will be extended in future. Also explicitly update checks for the value versus None, rather than using truthiness. Tests amended.
1 parent fb0160f commit 91bb72c

File tree

3 files changed

+30
-24
lines changed

3 files changed

+30
-24
lines changed

tests/ui/test_ui_tools.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2291,7 +2291,7 @@ def test_keypress_EDIT_MESSAGE(
22912291
"raw_content": "Edit this message"
22922292
}
22932293
write_box = msg_box.model.controller.view.write_box
2294-
write_box.msg_edit_id = None
2294+
write_box.msg_edit_state = None
22952295
write_box.msg_body_edit_enabled = None
22962296
mocker.patch("zulipterminal.ui_tools.boxes.time", return_value=100)
22972297
# private messages cannot be edited after time-limit, if there is one.
@@ -2305,13 +2305,13 @@ def test_keypress_EDIT_MESSAGE(
23052305
msg_box.keypress(size, key)
23062306

23072307
if expect_editing_to_succeed:
2308-
assert write_box.msg_edit_id == varied_message["id"]
2308+
assert write_box.msg_edit_state.message_id == varied_message["id"]
23092309
write_box.msg_write_box.set_edit_text.assert_called_once_with(
23102310
"Edit this message"
23112311
)
23122312
assert write_box.msg_body_edit_enabled == msg_body_edit_enabled
23132313
else:
2314-
assert write_box.msg_edit_id is None
2314+
assert write_box.msg_edit_state is None
23152315
write_box.msg_write_box.set_edit_text.assert_not_called()
23162316

23172317
@pytest.mark.parametrize(

tests/ui_tools/test_boxes.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
STREAM_MARKER_PRIVATE,
88
STREAM_MARKER_PUBLIC,
99
)
10-
from zulipterminal.ui_tools.boxes import PanelSearchBox, WriteBox
10+
from zulipterminal.ui_tools.boxes import PanelSearchBox, WriteBox, _MessageEditState
1111

1212

1313
BOXES = "zulipterminal.ui_tools.boxes"
@@ -51,7 +51,7 @@ def write_box(
5151
def test_init(self, write_box):
5252
assert write_box.model == self.view.model
5353
assert write_box.view == self.view
54-
assert write_box.msg_edit_id is None
54+
assert write_box.msg_edit_state is None
5555

5656
def test_not_calling_typing_method_without_recipients(self, mocker, write_box):
5757
write_box.model.send_typing_status_by_user_ids = mocker.Mock()
@@ -845,14 +845,16 @@ def test__process_typeaheads(
845845
],
846846
)
847847
@pytest.mark.parametrize(
848-
"msg_edit_id", [10, None], ids=["update_message", "send_message"]
848+
"msg_edit_state",
849+
[_MessageEditState(message_id=10), None],
850+
ids=["update_message", "send_message"],
849851
)
850852
@pytest.mark.parametrize("key", keys_for_command("SEND_MESSAGE"))
851853
def test_keypress_SEND_MESSAGE_no_topic(
852854
self,
853855
mocker,
854856
write_box,
855-
msg_edit_id,
857+
msg_edit_state,
856858
topic_entered_by_user,
857859
topic_sent_to_server,
858860
key,
@@ -864,16 +866,16 @@ def test_keypress_SEND_MESSAGE_no_topic(
864866
write_box.title_write_box = mocker.Mock(edit_text=topic_entered_by_user)
865867
write_box.to_write_box = None
866868
size = widget_size(write_box)
867-
write_box.msg_edit_id = msg_edit_id
869+
write_box.msg_edit_state = msg_edit_state
868870
write_box.edit_mode_button = mocker.Mock(mode=propagate_mode)
869871

870872
write_box.keypress(size, key)
871873

872-
if msg_edit_id:
874+
if msg_edit_state:
873875
write_box.model.update_stream_message.assert_called_once_with(
874876
topic=topic_sent_to_server,
875877
content=write_box.msg_write_box.edit_text,
876-
message_id=msg_edit_id,
878+
message_id=msg_edit_state.message_id,
877879
propagate_mode=propagate_mode,
878880
)
879881
else:
@@ -1063,7 +1065,7 @@ def test_keypress_CYCLE_COMPOSE_FOCUS(
10631065
if message_being_edited:
10641066
mocker.patch(BOXES + ".EditModeButton")
10651067
write_box.stream_box_edit_view(stream_id)
1066-
write_box.msg_edit_id = 10
1068+
write_box.msg_edit_state = _MessageEditState(message_id=10)
10671069
else:
10681070
write_box.stream_box_view(stream_id)
10691071
else:

zulipterminal/ui_tools/boxes.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from datetime import date, datetime, timedelta
66
from sys import platform
77
from time import sleep, time
8-
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
8+
from typing import Any, Callable, Dict, List, NamedTuple, Optional, Tuple, Union
99
from urllib.parse import urljoin, urlparse
1010

1111
import dateutil.parser
@@ -53,14 +53,18 @@
5353
from zulipterminal.model import Model
5454

5555

56+
class _MessageEditState(NamedTuple):
57+
message_id: int
58+
59+
5660
class WriteBox(urwid.Pile):
5761
def __init__(self, view: Any) -> None:
5862
super().__init__(self.main_view(True))
5963
self.model = view.model
6064
self.view = view
6165

62-
# If editing a message, its id - otherwise None
63-
self.msg_edit_id: Optional[int] = None
66+
# If editing a message, its state - otherwise None
67+
self.msg_edit_state: Optional[_MessageEditState] = None
6468
# Determines if the message body (content) can be edited
6569
self.msg_body_edit_enabled = True
6670

@@ -538,9 +542,9 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
538542
else:
539543
topic = self.title_write_box.edit_text
540544

541-
if self.msg_edit_id:
545+
if self.msg_edit_state is not None:
542546
args = dict(
543-
message_id=self.msg_edit_id,
547+
message_id=self.msg_edit_state.message_id,
544548
topic=topic,
545549
propagate_mode=self.edit_mode_button.mode,
546550
)
@@ -555,10 +559,10 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
555559
content=self.msg_write_box.edit_text,
556560
)
557561
else:
558-
if self.msg_edit_id:
562+
if self.msg_edit_state is not None:
559563
success = self.model.update_private_message(
560564
content=self.msg_write_box.edit_text,
561-
msg_id=self.msg_edit_id,
565+
msg_id=self.msg_edit_state.message_id,
562566
)
563567
else:
564568
self.update_recipient_emails(self.to_write_box)
@@ -574,18 +578,18 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
574578
success = None
575579
if success:
576580
self.msg_write_box.edit_text = ""
577-
if self.msg_edit_id:
578-
self.msg_edit_id = None
581+
if self.msg_edit_state is not None:
582+
self.msg_edit_state = None
579583
self.keypress(size, "esc")
580584
elif is_command_key("GO_BACK", key):
581-
self.msg_edit_id = None
585+
self.msg_edit_state = None
582586
self.msg_body_edit_enabled = True
583587
self.send_stop_typing_status()
584588
self.view.controller.exit_editor_mode()
585589
self.main_view(False)
586590
self.view.middle_column.set_focus("body")
587591
elif is_command_key("SAVE_AS_DRAFT", key):
588-
if not self.msg_edit_id:
592+
if self.msg_edit_state is None:
589593
if self.to_write_box:
590594
self.update_recipient_emails(self.to_write_box)
591595
this_draft: Composition = PrivateComposition(
@@ -636,7 +640,7 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
636640
return key
637641
elif (
638642
header.focus_col == self.FOCUS_HEADER_BOX_TOPIC
639-
and self.msg_edit_id
643+
and self.msg_edit_state is not None
640644
):
641645
header.focus_col = self.FOCUS_HEADER_BOX_EDIT
642646
return key
@@ -1612,7 +1616,7 @@ def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
16121616
msg_id = self.message["id"]
16131617
msg = self.model.client.get_raw_message(msg_id)["raw_content"]
16141618
write_box = self.model.controller.view.write_box
1615-
write_box.msg_edit_id = msg_id
1619+
write_box.msg_edit_state = _MessageEditState(message_id=msg_id)
16161620
write_box.msg_write_box.set_edit_text(msg)
16171621
write_box.msg_write_box.set_edit_pos(len(msg))
16181622
write_box.msg_body_edit_enabled = msg_body_edit_enabled

0 commit comments

Comments
 (0)