message_edit: Show typing indicator for message editing.

This commit adds typing indicators for message editing in stream
as well as in dm, if the send typing notification
for corresponding is enabled.

Based on earlier work in #28585.

Co-authored-by: Rohan Gudimetla <rohan.gudimetla07@gmail.com>

Fixes #25719.
This commit is contained in:
opmkumar
2025-02-07 00:54:43 +05:30
committed by Tim Abbott
parent c2821ef0f4
commit 2a15da47d9
28 changed files with 1477 additions and 38 deletions

View File

@@ -911,6 +911,66 @@ run_test("stream_typing", ({override}) => {
}
});
run_test("message_edit_typing", ({override}) => {
override(current_user, "user_id", typing_person1.user_id + 1);
let event = event_fixtures.message_edit_typing__start;
{
const stub = make_stub();
override(typing_events, "display_message_edit_notification", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("event");
assert_same(args.event.sender_id, typing_person1.user_id);
assert_same(args.event.message_id, event.message_id);
}
event = event_fixtures.message_edit_typing__stop;
{
const stub = make_stub();
override(typing_events, "hide_message_edit_notification", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("event");
assert_same(args.event.sender_id, typing_person1.user_id);
assert_same(args.event.message_id, event.message_id);
}
// Get line coverage--we ignore our own typing events.
override(current_user, "user_id", typing_person1.user_id);
event = event_fixtures.message_edit_typing__start;
dispatch(event);
override(current_user, "user_id", undefined);
});
run_test("stream_typing_message_edit", ({override}) => {
const stream_typing_in_id = events.stream_typing_in_id;
let event = event_fixtures.channel_typing_edit_message__start;
{
const stub = make_stub();
override(typing_events, "display_message_edit_notification", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("event");
assert_same(args.event.sender_id, typing_person1.user_id);
assert_same(args.event.recipient.type, "channel");
assert_same(args.event.recipient.channel_id, stream_typing_in_id);
}
event = event_fixtures.channel_typing_edit_message__stop;
{
const stub = make_stub();
override(typing_events, "hide_message_edit_notification", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("event");
assert_same(args.event.sender_id, typing_person1.user_id);
assert_same(args.event.recipient.type, "channel");
assert_same(args.event.recipient.channel_id, stream_typing_in_id);
}
});
run_test("user_settings", ({override}) => {
settings_preferences.set_default_language_name = () => {};
let event = event_fixtures.user_settings__default_language;
@@ -1362,6 +1422,12 @@ run_test("server_event_dispatch_op_errors", () => {
sender: {user_id: 5},
op: "other",
});
blueslip.expect("error", "Unexpected event type typing_edit_message/other");
server_events_dispatch.dispatch_normal_event({
type: "typing_edit_message",
sender_id: 5,
op: "other",
});
blueslip.expect("error", "Unexpected event type user_group/other");
server_events_dispatch.dispatch_normal_event({type: "user_group", op: "other"});
});