def test_add_muted_user_valid_data(self) -> None: hamlet = self.example_user("hamlet") self.login_user(hamlet) cordelia = self.example_user("cordelia") mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) with mock.patch("zerver.views.muting.timezone_now", return_value=mute_time): url = "/api/v1/users/me/muted_users/{}".format(cordelia.id) result = self.api_post(hamlet, url) self.assert_json_success(result) self.assertIn( { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, get_user_mutes(hamlet), ) self.assertIsNotNone(get_mute_object(hamlet, cordelia)) audit_log_entries = list( RealmAuditLog.objects.filter(acting_user=hamlet, modified_user=hamlet).values_list( "event_type", "event_time", "extra_data" ) ) self.assert_length(audit_log_entries, 1) audit_log_entry = audit_log_entries[0] self.assertEqual( audit_log_entry, ( RealmAuditLog.USER_MUTED, mute_time, orjson.dumps({"muted_user_id": cordelia.id}).decode(), ), )
def _test_remove_muted_user_valid_data(self, deactivate_user: bool = False ) -> None: hamlet = self.example_user("hamlet") self.login_user(hamlet) cordelia = self.example_user("cordelia") mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) if deactivate_user: do_deactivate_user(cordelia, acting_user=None) with mock.patch("zerver.views.muting.timezone_now", return_value=mute_time): url = f"/api/v1/users/me/muted_users/{cordelia.id}" result = self.api_post(hamlet, url) self.assert_json_success(result) with mock.patch("zerver.lib.actions.timezone_now", return_value=mute_time): # To test that `RealmAuditLog` entry has correct `event_time`. url = f"/api/v1/users/me/muted_users/{cordelia.id}" result = self.api_delete(hamlet, url) self.assert_json_success(result) self.assertNotIn( { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, get_user_mutes(hamlet), ) self.assertIsNone(get_mute_object(hamlet, cordelia)) audit_log_entries = list( RealmAuditLog.objects.filter(acting_user=hamlet, modified_user=hamlet).values_list( "event_type", "event_time", "extra_data").order_by("id")) self.assert_length(audit_log_entries, 2) audit_log_entry = audit_log_entries[1] self.assertEqual( audit_log_entry, ( RealmAuditLog.USER_UNMUTED, mute_time, orjson.dumps({ "unmuted_user_id": cordelia.id }).decode(), ), )
def test_get_user_mutes(self) -> None: hamlet = self.example_user("hamlet") cordelia = self.example_user("cordelia") muted_users = get_user_mutes(hamlet) self.assertEqual(muted_users, []) mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) with mock.patch("zerver.views.muting.timezone_now", return_value=mute_time): url = "/api/v1/users/me/muted_users/{}".format(cordelia.id) result = self.api_post(hamlet, url) self.assert_json_success(result) muted_users = get_user_mutes(hamlet) self.assert_length(muted_users, 1) self.assertDictEqual( muted_users[0], { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, )
def test_get_user_mutes(self) -> None: othello = self.example_user("othello") cordelia = self.example_user("cordelia") muted_users = get_user_mutes(othello) self.assertEqual(muted_users, []) mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) with mock.patch( "zerver.lib.user_mutes.timezone_now", return_value=mute_time, ): add_user_mute(user_profile=othello, muted_user=cordelia) muted_users = get_user_mutes(othello) self.assertEqual(len(muted_users), 1) self.assertDictEqual( muted_users[0], { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, )
def do_unmute_user(mute_object: MutedUser) -> None: user_profile = mute_object.user_profile muted_user = mute_object.muted_user mute_object.delete() event = dict(type="muted_users", muted_users=get_user_mutes(user_profile)) send_event(user_profile.realm, event, [user_profile.id]) RealmAuditLog.objects.create( realm=user_profile.realm, acting_user=user_profile, modified_user=user_profile, event_type=RealmAuditLog.USER_UNMUTED, event_time=timezone_now(), extra_data=orjson.dumps({"unmuted_user_id": muted_user.id}).decode(), )
def test_add_muted_user_valid_data(self) -> None: hamlet = self.example_user("hamlet") self.login_user(hamlet) cordelia = self.example_user("cordelia") mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) with mock.patch("zerver.views.muting.timezone_now", return_value=mute_time): url = "/api/v1/users/me/muted_users/{}".format(cordelia.id) result = self.api_post(hamlet, url) self.assert_json_success(result) self.assertIn( { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, get_user_mutes(hamlet), ) self.assertIsNotNone(get_mute_object(hamlet, cordelia))
def test_add_muted_user_valid_data(self) -> None: user = self.example_user("hamlet") self.login_user(user) muted_user = self.example_user("cordelia") muted_id = muted_user.id mock_date_muted = datetime(2021, 1, 1, tzinfo=timezone.utc).timestamp() with mock.patch( "zerver.views.muting.timezone_now", return_value=datetime(2021, 1, 1, tzinfo=timezone.utc), ): url = "/api/v1/users/me/muted_users/{}".format(muted_id) result = self.api_post(user, url) self.assert_json_success(result) self.assertIn({ "id": muted_id, "timestamp": mock_date_muted }, get_user_mutes(user)) self.assertTrue(user_is_muted(user, muted_user))
def do_mute_user( user_profile: UserProfile, muted_user: UserProfile, date_muted: Optional[datetime.datetime] = None, ) -> None: if date_muted is None: date_muted = timezone_now() add_user_mute(user_profile, muted_user, date_muted) do_mark_muted_user_messages_as_read(user_profile, muted_user) event = dict(type="muted_users", muted_users=get_user_mutes(user_profile)) send_event(user_profile.realm, event, [user_profile.id]) RealmAuditLog.objects.create( realm=user_profile.realm, acting_user=user_profile, modified_user=user_profile, event_type=RealmAuditLog.USER_MUTED, event_time=date_muted, extra_data=orjson.dumps({"muted_user_id": muted_user.id}).decode(), )
def test_remove_muted_user_valid_data(self) -> None: hamlet = self.example_user("hamlet") self.login_user(hamlet) cordelia = self.example_user("cordelia") mute_time = datetime(2021, 1, 1, tzinfo=timezone.utc) url = "/api/v1/users/me/muted_users/{}".format(cordelia.id) result = self.api_post(hamlet, url) self.assert_json_success(result) url = "/api/v1/users/me/muted_users/{}".format(cordelia.id) result = self.api_delete(hamlet, url) self.assert_json_success(result) self.assertNotIn( { "id": cordelia.id, "timestamp": datetime_to_timestamp(mute_time), }, get_user_mutes(hamlet), ) self.assertIsNone(get_mute_object(hamlet, cordelia))
def test_remove_muted_user_valid_data(self) -> None: user = self.example_user("hamlet") self.login_user(user) muted_user = self.example_user("cordelia") muted_id = muted_user.id add_user_mute( user_profile=user, muted_user=muted_user, date_muted=datetime(2021, 1, 1, tzinfo=timezone.utc), ) url = "/api/v1/users/me/muted_users/{}".format(muted_id) result = self.api_delete(user, url) mock_date_muted = datetime(2021, 1, 1, tzinfo=timezone.utc).timestamp() self.assert_json_success(result) self.assertNotIn({ "id": muted_id, "timestamp": mock_date_muted }, get_user_mutes(user)) self.assertFalse(user_is_muted(user, muted_user))