events: don't serialize the rel_type twice for Thread relationships
This commit is contained in:
parent
fec2152d87
commit
e5a370f7e5
@ -84,7 +84,6 @@ impl<C> Replacement<C> {
|
||||
/// [thread]: https://spec.matrix.org/latest/client-server-api/#threading
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
#[serde(tag = "rel_type", rename = "m.thread")]
|
||||
pub struct Thread {
|
||||
/// The ID of the root message in the thread.
|
||||
pub event_id: OwnedEventId,
|
||||
|
@ -19,7 +19,7 @@ use ruma_events::{
|
||||
},
|
||||
EncryptedFileInit, JsonWebKeyInit, MediaSource,
|
||||
},
|
||||
AnySyncTimelineEvent, Mentions, MessageLikeUnsigned,
|
||||
AnySyncTimelineEvent, EventContent, Mentions, MessageLikeUnsigned, RawExt,
|
||||
};
|
||||
use serde_json::{
|
||||
from_value as from_json_value, json, to_value as to_json_value, Value as JsonValue,
|
||||
@ -484,6 +484,49 @@ fn reply_thread_fallback() {
|
||||
assert!(thread_info.is_falling_back);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reply_thread_serialization_roundtrip() {
|
||||
let thread_root = OriginalRoomMessageEvent {
|
||||
content: RoomMessageEventContent::text_plain("Thread root"),
|
||||
event_id: owned_event_id!("$thread_root"),
|
||||
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(10_000)),
|
||||
room_id: owned_room_id!("!testroomid:example.org"),
|
||||
sender: owned_user_id!("@user:example.org"),
|
||||
unsigned: MessageLikeUnsigned::default(),
|
||||
};
|
||||
let threaded_message = OriginalRoomMessageEvent {
|
||||
content: RoomMessageEventContent::text_plain("Threaded message").make_for_thread(
|
||||
&thread_root,
|
||||
ReplyWithinThread::No,
|
||||
AddMentions::No,
|
||||
),
|
||||
event_id: owned_event_id!("$threaded_message"),
|
||||
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(10_000)),
|
||||
room_id: owned_room_id!("!testroomid:example.org"),
|
||||
sender: owned_user_id!("@user:example.org"),
|
||||
unsigned: MessageLikeUnsigned::default(),
|
||||
};
|
||||
|
||||
let reply_as_thread_fallback = RoomMessageEventContent::text_plain(
|
||||
"Reply from a thread client",
|
||||
)
|
||||
.make_reply_to(&threaded_message, ForwardThread::Yes, AddMentions::No);
|
||||
|
||||
let as_raw = Raw::new(&reply_as_thread_fallback).unwrap();
|
||||
|
||||
let reply_as_thread_fallback =
|
||||
as_raw.deserialize_with_type(reply_as_thread_fallback.event_type()).unwrap();
|
||||
|
||||
let relation = reply_as_thread_fallback.relates_to.unwrap();
|
||||
assert_matches!(relation, Relation::Thread(thread_info));
|
||||
assert_eq!(
|
||||
thread_info.in_reply_to.map(|in_reply_to| in_reply_to.event_id),
|
||||
Some(threaded_message.event_id)
|
||||
);
|
||||
assert_eq!(thread_info.event_id, thread_root.event_id);
|
||||
assert!(thread_info.is_falling_back);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reply_add_mentions() {
|
||||
let user = owned_user_id!("@user:example.org");
|
||||
|
Loading…
x
Reference in New Issue
Block a user