From 36b1794c1d0da73fb8bf8394260408677f70bba9 Mon Sep 17 00:00:00 2001 From: Steve Howell Date: Wed, 20 Jan 2021 18:14:53 +0000 Subject: [PATCH] user_status: Fix bug with resetting away status. The fix is pretty simple here--if the client doesn't send an away status, then don't change it. I improved the tests to cover this case. Fixes #17071 --- zerver/lib/actions.py | 4 +++- zerver/tests/test_user_status.py | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 554c6745e4..ae65ce7b9c 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -4183,7 +4183,9 @@ def do_update_user_status(user_profile: UserProfile, away: Optional[bool], status_text: Optional[str], client_id: int) -> None: - if away: + if away is None: + status = None + elif away: status = UserStatus.AWAY else: status = UserStatus.NORMAL diff --git a/zerver/tests/test_user_status.py b/zerver/tests/test_user_status.py index 455d86d1d6..2b3ab227fd 100644 --- a/zerver/tests/test_user_status.py +++ b/zerver/tests/test_user_status.py @@ -230,3 +230,40 @@ class UserStatusTest(ZulipTestCase): get_user_info_dict(realm_id=realm_id), {}, ) + + # Turn on "away" status again. + payload = dict(away=orjson.dumps(True).decode()) + + event_info = EventInfo() + with capture_event(event_info): + result = self.client_post('/json/users/me/status', payload) + self.assert_json_success(result) + + self.assertEqual( + event_info.payload, + dict(type='user_status', user_id=hamlet.id, away=True), + ) + + away_user_ids = get_away_user_ids(realm_id=realm_id) + self.assertEqual(away_user_ids, {hamlet.id}) + + # And set status text while away. + payload = dict(status_text=' at the beach ') + + event_info = EventInfo() + with capture_event(event_info): + result = self.client_post('/json/users/me/status', payload) + self.assert_json_success(result) + + self.assertEqual( + event_info.payload, + dict(type='user_status', user_id=hamlet.id, status_text='at the beach'), + ) + + self.assertEqual( + user_info(hamlet), + dict(status_text='at the beach', away=True), + ) + + away_user_ids = get_away_user_ids(realm_id=realm_id) + self.assertEqual(away_user_ids, {hamlet.id})