Stop relying on PartialEq for tests
This commit is contained in:
parent
752ea73010
commit
8e4ff82a83
@ -15,14 +15,15 @@ edition = "2018"
|
||||
[dependencies]
|
||||
js_int = { version = "0.1.5", features = ["serde"] }
|
||||
ruma-events-macros = { path = "ruma-events-macros", version = "=0.21.0-beta.1" }
|
||||
ruma-identifiers = "0.16.0"
|
||||
ruma-identifiers = "0.16.1"
|
||||
ruma-serde = "0.1.2"
|
||||
serde = { version = "1.0.106", features = ["derive"] }
|
||||
serde_json = { version = "1.0.52", features = ["raw_value"] }
|
||||
|
||||
[dev-dependencies]
|
||||
maplit = "1.0.2"
|
||||
ruma-identifiers = { version = "0.16.0", features = ["rand"] }
|
||||
matches = "0.1.8"
|
||||
ruma-identifiers = { version = "0.16.1", features = ["rand"] }
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
|
@ -76,6 +76,7 @@ mod tests {
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use js_int::UInt;
|
||||
use matches::assert_matches;
|
||||
use ruma_identifiers::UserId;
|
||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||
|
||||
@ -113,18 +114,6 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn deserialization() {
|
||||
let event = PresenceEvent {
|
||||
content: PresenceEventContent {
|
||||
avatar_url: Some("mxc://localhost:wefuiwegh8742w".to_string()),
|
||||
currently_active: Some(false),
|
||||
displayname: None,
|
||||
last_active_ago: Some(UInt::try_from(2_478_593).unwrap()),
|
||||
presence: PresenceState::Online,
|
||||
status_msg: Some("Making cupcakes".to_string()),
|
||||
},
|
||||
sender: UserId::try_from("@example:localhost").unwrap(),
|
||||
};
|
||||
|
||||
let json = json!({
|
||||
"content": {
|
||||
"avatar_url": "mxc://localhost:wefuiwegh8742w",
|
||||
@ -137,12 +126,25 @@ mod tests {
|
||||
"type": "m.presence"
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<PresenceEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
event
|
||||
PresenceEvent {
|
||||
content: PresenceEventContent {
|
||||
avatar_url: Some(avatar_url),
|
||||
currently_active: Some(false),
|
||||
displayname: None,
|
||||
last_active_ago: Some(last_active_ago),
|
||||
presence: PresenceState::Online,
|
||||
status_msg: Some(status_msg),
|
||||
},
|
||||
sender,
|
||||
} if avatar_url == "mxc://localhost:wefuiwegh8742w"
|
||||
&& status_msg == "Making cupcakes"
|
||||
&& sender == "@example:localhost"
|
||||
&& last_active_ago == UInt::from(2_478_593u32)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -393,6 +393,7 @@ pub struct SenderNotificationPermissionCondition {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use matches::assert_matches;
|
||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||
|
||||
use super::{
|
||||
@ -410,13 +411,10 @@ mod tests {
|
||||
fn serialize_tweak_sound_action() {
|
||||
assert_eq!(
|
||||
to_json_value(&Action::SetTweak(Tweak::Sound {
|
||||
value: "default".to_string()
|
||||
value: "default".into()
|
||||
}))
|
||||
.unwrap(),
|
||||
json!({
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
})
|
||||
json!({ "set_tweak": "sound", "value": "default" })
|
||||
);
|
||||
}
|
||||
|
||||
@ -424,13 +422,13 @@ mod tests {
|
||||
fn serialize_tweak_highlight_action() {
|
||||
assert_eq!(
|
||||
to_json_value(&Action::SetTweak(Tweak::Highlight { value: true })).unwrap(),
|
||||
json!({"set_tweak": "highlight", "value": true})
|
||||
json!({ "set_tweak": "highlight", "value": true })
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_string_action() {
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<Action>(json!("notify")).unwrap(),
|
||||
Action::Notify
|
||||
);
|
||||
@ -442,11 +440,9 @@ mod tests {
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
});
|
||||
assert_eq!(
|
||||
from_json_value::<Action>(json_data).unwrap(),
|
||||
Action::SetTweak(Tweak::Sound {
|
||||
value: "default".to_string()
|
||||
})
|
||||
assert_matches!(
|
||||
&from_json_value::<Action>(json_data).unwrap(),
|
||||
Action::SetTweak(Tweak::Sound { value }) if value == "default"
|
||||
);
|
||||
}
|
||||
|
||||
@ -456,7 +452,7 @@ mod tests {
|
||||
"set_tweak": "highlight",
|
||||
"value": true
|
||||
});
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<Action>(json_data).unwrap(),
|
||||
Action::SetTweak(Tweak::Highlight { value: true })
|
||||
);
|
||||
@ -464,8 +460,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn deserialize_tweak_highlight_action_with_default_value() {
|
||||
assert_eq!(
|
||||
from_json_value::<Action>(json!({"set_tweak": "highlight"})).unwrap(),
|
||||
assert_matches!(
|
||||
from_json_value::<Action>(json!({ "set_tweak": "highlight" })).unwrap(),
|
||||
Action::SetTweak(Tweak::Highlight { value: true })
|
||||
);
|
||||
}
|
||||
@ -534,20 +530,18 @@ mod tests {
|
||||
"kind": "event_match",
|
||||
"pattern": "m.notice"
|
||||
});
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<PushCondition>(json_data).unwrap(),
|
||||
PushCondition::EventMatch(EventMatchCondition {
|
||||
key: "content.msgtype".to_string(),
|
||||
pattern: "m.notice".to_string(),
|
||||
})
|
||||
PushCondition::EventMatch(EventMatchCondition { key, pattern })
|
||||
if key == "content.msgtype" && pattern == "m.notice"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_contains_display_name_condition() {
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<PushCondition>(json!({"kind": "contains_display_name"})).unwrap(),
|
||||
PushCondition::ContainsDisplayName,
|
||||
PushCondition::ContainsDisplayName
|
||||
);
|
||||
}
|
||||
|
||||
@ -557,11 +551,10 @@ mod tests {
|
||||
"is": "2",
|
||||
"kind": "room_member_count"
|
||||
});
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<PushCondition>(json_data).unwrap(),
|
||||
PushCondition::RoomMemberCount(RoomMemberCountCondition {
|
||||
is: "2".to_string(),
|
||||
})
|
||||
PushCondition::RoomMemberCount(RoomMemberCountCondition { is })
|
||||
if is == "2"
|
||||
);
|
||||
}
|
||||
|
||||
@ -571,11 +564,11 @@ mod tests {
|
||||
"key": "room",
|
||||
"kind": "sender_notification_permission"
|
||||
});
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<PushCondition>(json_data).unwrap(),
|
||||
PushCondition::SenderNotificationPermission(SenderNotificationPermissionCondition {
|
||||
key: "room".to_string(),
|
||||
})
|
||||
key
|
||||
}) if key == "room"
|
||||
);
|
||||
}
|
||||
|
||||
@ -586,196 +579,197 @@ mod tests {
|
||||
"content": {
|
||||
"global": {
|
||||
"content": [
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"pattern": "alice",
|
||||
"rule_id": ".m.rule.contains_user_name"
|
||||
}
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"pattern": "alice",
|
||||
"rule_id": ".m.rule.contains_user_name"
|
||||
}
|
||||
],
|
||||
"override": [
|
||||
{
|
||||
"actions": [
|
||||
"dont_notify"
|
||||
],
|
||||
"conditions": [],
|
||||
"default": true,
|
||||
"enabled": false,
|
||||
"rule_id": ".m.rule.master"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"dont_notify"
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "content.msgtype",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.notice"
|
||||
"actions": [
|
||||
"dont_notify"
|
||||
],
|
||||
"conditions": [],
|
||||
"default": true,
|
||||
"enabled": false,
|
||||
"rule_id": ".m.rule.master"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"dont_notify"
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "content.msgtype",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.notice"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.suppress_notices"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.suppress_notices"
|
||||
}
|
||||
],
|
||||
"room": [],
|
||||
"sender": [],
|
||||
"underride": [
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "ring"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.call.invite"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.call"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "ring"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight"
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.call.invite"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"kind": "contains_display_name"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.contains_display_name"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"is": "2",
|
||||
"kind": "room_member_count"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.room_one_to_one"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.member"
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.call"
|
||||
},
|
||||
{
|
||||
"key": "content.membership",
|
||||
"kind": "event_match",
|
||||
"pattern": "invite"
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"kind": "contains_display_name"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.contains_display_name"
|
||||
},
|
||||
{
|
||||
"key": "state_key",
|
||||
"kind": "event_match",
|
||||
"pattern": "@alice:example.com"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.invite_for_me"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
"is": "2",
|
||||
"kind": "room_member_count"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.room_one_to_one"
|
||||
},
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.member"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.member_event"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "sound",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.member"
|
||||
},
|
||||
{
|
||||
"key": "content.membership",
|
||||
"kind": "event_match",
|
||||
"pattern": "invite"
|
||||
},
|
||||
{
|
||||
"key": "state_key",
|
||||
"kind": "event_match",
|
||||
"pattern": "@alice:example.com"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.invite_for_me"
|
||||
},
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.message"
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.member"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.member_event"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
"notify",
|
||||
{
|
||||
"set_tweak": "highlight",
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"key": "type",
|
||||
"kind": "event_match",
|
||||
"pattern": "m.room.message"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.message"
|
||||
}
|
||||
],
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"rule_id": ".m.rule.message"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "m.push_rules"
|
||||
});
|
||||
assert!(from_json_value::<EventJson<PushRulesEvent>>(json_data)
|
||||
|
||||
let _ = from_json_value::<EventJson<PushRulesEvent>>(json_data)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.is_ok());
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ fn default_room_version_id() -> RoomVersionId {
|
||||
mod tests {
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use matches::assert_matches;
|
||||
use ruma_identifiers::{RoomVersionId, UserId};
|
||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||
|
||||
@ -76,25 +77,24 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn deserialization() {
|
||||
let content = CreateEventContent {
|
||||
creator: UserId::try_from("@carl:example.com").unwrap(),
|
||||
federate: true,
|
||||
room_version: RoomVersionId::version_4(),
|
||||
predecessor: None,
|
||||
};
|
||||
|
||||
let json = json!({
|
||||
"creator": "@carl:example.com",
|
||||
"m.federate": true,
|
||||
"room_version": "4"
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<CreateEventContent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
content
|
||||
CreateEventContent {
|
||||
creator,
|
||||
federate: true,
|
||||
room_version,
|
||||
predecessor: None,
|
||||
} if creator == "@carl:example.com"
|
||||
&& room_version == RoomVersionId::version_4()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -238,13 +238,14 @@ pub struct MegolmV1AesSha2Content {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use matches::assert_matches;
|
||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||
|
||||
use super::{Algorithm, EncryptedEventContent, MegolmV1AesSha2Content};
|
||||
use crate::EventJson;
|
||||
|
||||
#[test]
|
||||
fn serializtion() {
|
||||
fn serialization() {
|
||||
let key_verification_start_content =
|
||||
EncryptedEventContent::MegolmV1AesSha2(MegolmV1AesSha2Content {
|
||||
algorithm: Algorithm::MegolmV1AesSha2,
|
||||
@ -270,15 +271,6 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn deserialization() {
|
||||
let key_verification_start_content =
|
||||
EncryptedEventContent::MegolmV1AesSha2(MegolmV1AesSha2Content {
|
||||
algorithm: Algorithm::MegolmV1AesSha2,
|
||||
ciphertext: "ciphertext".to_string(),
|
||||
sender_key: "sender_key".to_string(),
|
||||
device_id: "device_id".to_string(),
|
||||
session_id: "session_id".to_string(),
|
||||
});
|
||||
|
||||
let json_data = json!({
|
||||
"algorithm": "m.megolm.v1.aes-sha2",
|
||||
"ciphertext": "ciphertext",
|
||||
@ -287,12 +279,21 @@ mod tests {
|
||||
"session_id": "session_id"
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<EncryptedEventContent>>(json_data)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
key_verification_start_content
|
||||
EncryptedEventContent::MegolmV1AesSha2(MegolmV1AesSha2Content {
|
||||
algorithm: Algorithm::MegolmV1AesSha2,
|
||||
ciphertext,
|
||||
sender_key,
|
||||
device_id,
|
||||
session_id,
|
||||
}) if ciphertext == "ciphertext"
|
||||
&& sender_key == "sender_key"
|
||||
&& device_id == "device_id"
|
||||
&& session_id == "session_id"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -219,35 +219,19 @@ impl MemberEvent {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::{
|
||||
convert::TryFrom,
|
||||
time::{Duration, UNIX_EPOCH},
|
||||
use std::time::{Duration, UNIX_EPOCH};
|
||||
|
||||
use maplit::btreemap;
|
||||
use matches::assert_matches;
|
||||
use serde_json::{from_value as from_json_value, json};
|
||||
|
||||
use super::{
|
||||
MemberEvent, MemberEventContent, MembershipState, SignedContent, ThirdPartyInvite,
|
||||
};
|
||||
|
||||
use ruma_identifiers::{EventId, RoomId, UserId};
|
||||
use serde_json::json;
|
||||
|
||||
use super::*;
|
||||
use crate::{util::serde_json_eq_try_from_raw, UnsignedData};
|
||||
use crate::EventJson;
|
||||
|
||||
#[test]
|
||||
fn serde_with_no_prev_content() {
|
||||
let event = MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()),
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
state_key: "example.com".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
prev_content: None,
|
||||
};
|
||||
let json = json!({
|
||||
"type": "m.room.member",
|
||||
"content": {
|
||||
@ -259,33 +243,38 @@ mod tests {
|
||||
"sender": "@carl:example.com",
|
||||
"state_key": "example.com"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<MemberEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
prev_content: None,
|
||||
} if event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& room_id == "!n8f893n9:example.com"
|
||||
&& sender == "@carl:example.com"
|
||||
&& state_key == "example.com"
|
||||
&& unsigned.is_empty()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn serde_with_prev_content() {
|
||||
let event = MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()),
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
state_key: "example.com".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
prev_content: Some(MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
}),
|
||||
};
|
||||
let json = json!({
|
||||
"type": "m.room.member",
|
||||
"content": {
|
||||
@ -300,42 +289,44 @@ mod tests {
|
||||
"sender": "@carl:example.com",
|
||||
"state_key": "example.com"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<MemberEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
prev_content: Some(MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
}),
|
||||
} if event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& room_id == "!n8f893n9:example.com"
|
||||
&& sender == "@carl:example.com"
|
||||
&& state_key == "example.com"
|
||||
&& unsigned.is_empty()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn serde_with_content_full() {
|
||||
let signatures = vec![(
|
||||
"magic.forest".to_owned(),
|
||||
vec![("ed25519:3".to_owned(), "foobar".to_owned())]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
)]
|
||||
.into_iter()
|
||||
.collect();
|
||||
let event = MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: Some("mxc://example.org/SEsfnsuifSDFSSEF".to_owned()),
|
||||
displayname: Some("Alice Margatroid".to_owned()),
|
||||
is_direct: Some(true),
|
||||
membership: MembershipState::Invite,
|
||||
third_party_invite: Some(ThirdPartyInvite {
|
||||
display_name: "alice".to_owned(),
|
||||
signed: SignedContent {
|
||||
mxid: UserId::try_from("@alice:example.org").unwrap(),
|
||||
signatures,
|
||||
token: "abc123".to_owned(),
|
||||
},
|
||||
}),
|
||||
},
|
||||
event_id: EventId::try_from("$143273582443PhrSn:example.org").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(233),
|
||||
room_id: Some(RoomId::try_from("!jEsUZKDJdhlrceRyVU:example.org").unwrap()),
|
||||
sender: UserId::try_from("@alice:example.org").unwrap(),
|
||||
state_key: "@alice:example.org".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
prev_content: None,
|
||||
};
|
||||
let json = json!({
|
||||
"type": "m.room.member",
|
||||
"content": {
|
||||
@ -362,48 +353,51 @@ mod tests {
|
||||
"sender": "@alice:example.org",
|
||||
"state_key": "@alice:example.org"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<MemberEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: Some(avatar_url),
|
||||
displayname: Some(displayname),
|
||||
is_direct: Some(true),
|
||||
membership: MembershipState::Invite,
|
||||
third_party_invite: Some(ThirdPartyInvite {
|
||||
display_name: third_party_displayname,
|
||||
signed: SignedContent { mxid, signatures, token },
|
||||
}),
|
||||
},
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
prev_content: None,
|
||||
} if avatar_url == "mxc://example.org/SEsfnsuifSDFSSEF"
|
||||
&& displayname == "Alice Margatroid"
|
||||
&& third_party_displayname == "alice"
|
||||
&& mxid == "@alice:example.org"
|
||||
&& signatures == btreemap! {
|
||||
"magic.forest".to_owned() => btreemap! {
|
||||
"ed25519:3".to_owned() => "foobar".to_owned()
|
||||
}
|
||||
}
|
||||
&& token == "abc123"
|
||||
&& event_id == "$143273582443PhrSn:example.org"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(233)
|
||||
&& room_id == "!jEsUZKDJdhlrceRyVU:example.org"
|
||||
&& sender == "@alice:example.org"
|
||||
&& state_key == "@alice:example.org"
|
||||
&& unsigned.is_empty()
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn serde_with_prev_content_full() {
|
||||
let signatures = vec![(
|
||||
"magic.forest".to_owned(),
|
||||
vec![("ed25519:3".to_owned(), "foobar".to_owned())]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
)]
|
||||
.into_iter()
|
||||
.collect();
|
||||
let event = MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id: EventId::try_from("$143273582443PhrSn:example.org").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(233),
|
||||
room_id: Some(RoomId::try_from("!jEsUZKDJdhlrceRyVU:example.org").unwrap()),
|
||||
sender: UserId::try_from("@alice:example.org").unwrap(),
|
||||
state_key: "@alice:example.org".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
prev_content: Some(MemberEventContent {
|
||||
avatar_url: Some("mxc://example.org/SEsfnsuifSDFSSEF".to_owned()),
|
||||
displayname: Some("Alice Margatroid".to_owned()),
|
||||
is_direct: Some(true),
|
||||
membership: MembershipState::Invite,
|
||||
third_party_invite: Some(ThirdPartyInvite {
|
||||
display_name: "alice".to_owned(),
|
||||
signed: SignedContent {
|
||||
mxid: UserId::try_from("@alice:example.org").unwrap(),
|
||||
signatures,
|
||||
token: "abc123".to_owned(),
|
||||
},
|
||||
}),
|
||||
}),
|
||||
};
|
||||
let json = json!({
|
||||
"type": "m.room.member",
|
||||
"content": {
|
||||
@ -433,6 +427,52 @@ mod tests {
|
||||
"sender": "@alice:example.org",
|
||||
"state_key": "@alice:example.org"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<MemberEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
MemberEvent {
|
||||
content: MemberEventContent {
|
||||
avatar_url: None,
|
||||
displayname: None,
|
||||
is_direct: None,
|
||||
membership: MembershipState::Join,
|
||||
third_party_invite: None,
|
||||
},
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
prev_content: Some(MemberEventContent {
|
||||
avatar_url: Some(avatar_url),
|
||||
displayname: Some(displayname),
|
||||
is_direct: Some(true),
|
||||
membership: MembershipState::Invite,
|
||||
third_party_invite: Some(ThirdPartyInvite {
|
||||
display_name: third_party_displayname,
|
||||
signed: SignedContent { mxid, signatures, token },
|
||||
}),
|
||||
}),
|
||||
} if event_id == "$143273582443PhrSn:example.org"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(233)
|
||||
&& room_id == "!jEsUZKDJdhlrceRyVU:example.org"
|
||||
&& sender == "@alice:example.org"
|
||||
&& state_key == "@alice:example.org"
|
||||
&& unsigned.is_empty()
|
||||
&& avatar_url == "mxc://example.org/SEsfnsuifSDFSSEF"
|
||||
&& displayname == "Alice Margatroid"
|
||||
&& third_party_displayname == "alice"
|
||||
&& mxid == "@alice:example.org"
|
||||
&& signatures == btreemap! {
|
||||
"magic.forest".to_owned() => btreemap! {
|
||||
"ed25519:3".to_owned() => "foobar".to_owned()
|
||||
}
|
||||
}
|
||||
&& token == "abc123"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -657,6 +657,7 @@ impl TextMessageEventContent {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use matches::assert_matches;
|
||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||
|
||||
use super::{AudioMessageEventContent, MessageEventContent};
|
||||
@ -727,25 +728,23 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn deserialization() {
|
||||
let message_event_content = MessageEventContent::Audio(AudioMessageEventContent {
|
||||
body: "test".to_string(),
|
||||
info: None,
|
||||
url: Some("http://example.com/audio.mp3".to_string()),
|
||||
file: None,
|
||||
});
|
||||
|
||||
let json_data = json!({
|
||||
"body": "test",
|
||||
"msgtype": "m.audio",
|
||||
"url": "http://example.com/audio.mp3"
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<MessageEventContent>>(json_data)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
message_event_content
|
||||
MessageEventContent::Audio(AudioMessageEventContent {
|
||||
body,
|
||||
info: None,
|
||||
url: Some(url),
|
||||
file: None,
|
||||
}) if body == "test" && url == "http://example.com/audio.mp3"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,6 @@ mod tests {
|
||||
assert_eq!(parsed_event.event_id(), event.event_id());
|
||||
assert_eq!(parsed_event.room_id(), event.room_id());
|
||||
assert_eq!(parsed_event.sender(), event.sender());
|
||||
assert_eq!(parsed_event.unsigned(), event.unsigned());
|
||||
assert_eq!(parsed_event.state_key(), event.state_key());
|
||||
assert_eq!(parsed_event.origin_server_ts(), event.origin_server_ts());
|
||||
|
||||
|
21
src/util.rs
21
src/util.rs
@ -1,9 +1,7 @@
|
||||
use std::fmt::Debug;
|
||||
|
||||
use serde::{de::DeserializeOwned, Serialize};
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::{EventJson, TryFromRaw};
|
||||
use crate::TryFromRaw;
|
||||
|
||||
pub fn try_convert_variant<Enum: TryFromRaw, Content: TryFromRaw>(
|
||||
variant: fn(Content) -> Enum,
|
||||
@ -41,18 +39,3 @@ where
|
||||
)
|
||||
.map_err(serde_json_error_to_generic_de_error)
|
||||
}
|
||||
|
||||
// This would be #[cfg(test)] if it wasn't used from external tests
|
||||
pub fn serde_json_eq_try_from_raw<T>(de: T, se: serde_json::Value)
|
||||
where
|
||||
T: Clone + Debug + PartialEq + Serialize + TryFromRaw,
|
||||
{
|
||||
assert_eq!(se, serde_json::to_value(de.clone()).unwrap());
|
||||
assert_eq!(
|
||||
de,
|
||||
serde_json::from_value::<EventJson<_>>(se)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
|
@ -5,11 +5,12 @@ use std::{
|
||||
};
|
||||
|
||||
use js_int::Int;
|
||||
use ruma_events::util::serde_json_eq_try_from_raw;
|
||||
use ruma_events::UnsignedData;
|
||||
use maplit::btreemap;
|
||||
use matches::assert_matches;
|
||||
use ruma_events::{EventJson, UnsignedData};
|
||||
use ruma_events_macros::ruma_event;
|
||||
use ruma_identifiers::{EventId, RoomAliasId, RoomId, UserId};
|
||||
use serde_json::json;
|
||||
use ruma_identifiers::{RoomAliasId, RoomId, UserId};
|
||||
use serde_json::{from_value as from_json_value, json};
|
||||
|
||||
// See note about wrapping macro expansion in a module from `src/lib.rs`
|
||||
mod common_case {
|
||||
@ -29,18 +30,6 @@ mod common_case {
|
||||
|
||||
#[test]
|
||||
fn optional_fields_as_none() {
|
||||
let event = AliasesEvent {
|
||||
content: AliasesEventContent {
|
||||
aliases: Vec::with_capacity(0),
|
||||
},
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
prev_content: None,
|
||||
room_id: None,
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
state_key: "example.com".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
};
|
||||
let json = json!({
|
||||
"content": {
|
||||
"aliases": []
|
||||
@ -51,25 +40,32 @@ mod common_case {
|
||||
"state_key": "example.com",
|
||||
"type": "m.room.aliases"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<AliasesEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
AliasesEvent {
|
||||
content: AliasesEventContent { aliases },
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
prev_content: None,
|
||||
room_id: None,
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
} if aliases.is_empty()
|
||||
&& event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& sender == "@carl:example.com"
|
||||
&& state_key == "example.com"
|
||||
&& unsigned.is_empty()
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn some_optional_fields_as_some() {
|
||||
let event = AliasesEvent {
|
||||
content: AliasesEventContent {
|
||||
aliases: vec![RoomAliasId::try_from("#room:example.org").unwrap()],
|
||||
},
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
prev_content: Some(AliasesEventContent {
|
||||
aliases: Vec::with_capacity(0),
|
||||
}),
|
||||
room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()),
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
state_key: "example.com".to_string(),
|
||||
unsigned: UnsignedData::default(),
|
||||
};
|
||||
let json = json!({
|
||||
"content": {
|
||||
"aliases": ["#room:example.org"]
|
||||
@ -84,28 +80,34 @@ mod common_case {
|
||||
"state_key": "example.com",
|
||||
"type": "m.room.aliases"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<AliasesEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
AliasesEvent {
|
||||
content: AliasesEventContent { aliases, },
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
prev_content: Some(AliasesEventContent { aliases: prev_aliases }),
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned,
|
||||
} if aliases == vec![RoomAliasId::try_from("#room:example.org").unwrap()]
|
||||
&& event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& prev_aliases.is_empty()
|
||||
&& room_id == "!n8f893n9:example.com"
|
||||
&& sender == "@carl:example.com"
|
||||
&& state_key == "example.com"
|
||||
&& unsigned.is_empty()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn all_optional_fields_as_some() {
|
||||
let event = AliasesEvent {
|
||||
content: AliasesEventContent {
|
||||
aliases: vec![RoomAliasId::try_from("#room:example.org").unwrap()],
|
||||
},
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
prev_content: Some(AliasesEventContent {
|
||||
aliases: Vec::with_capacity(0),
|
||||
}),
|
||||
room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()),
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
state_key: "example.com".to_string(),
|
||||
unsigned: UnsignedData {
|
||||
age: Some(Int::from(100)),
|
||||
..UnsignedData::default()
|
||||
},
|
||||
};
|
||||
let json = json!({
|
||||
"content": {
|
||||
"aliases": ["#room:example.org"]
|
||||
@ -123,7 +125,34 @@ mod common_case {
|
||||
},
|
||||
"type": "m.room.aliases"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<AliasesEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
AliasesEvent {
|
||||
content: AliasesEventContent { aliases },
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
prev_content: Some(AliasesEventContent { aliases: prev_aliases }),
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
state_key,
|
||||
unsigned: UnsignedData {
|
||||
age: Some(age),
|
||||
redacted_because: None,
|
||||
transaction_id: None,
|
||||
},
|
||||
} if aliases == vec![RoomAliasId::try_from("#room:example.org").unwrap()]
|
||||
&& event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& prev_aliases.is_empty()
|
||||
&& room_id == "!n8f893n9:example.com"
|
||||
&& sender == "@carl:example.com"
|
||||
&& state_key == "example.com"
|
||||
&& age == Int::from(100)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,18 +177,6 @@ mod extra_fields {
|
||||
|
||||
#[test]
|
||||
fn field_serialization_deserialization() {
|
||||
let event = RedactionEvent {
|
||||
content: RedactionEventContent { reason: None },
|
||||
redacts: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(),
|
||||
origin_server_ts: UNIX_EPOCH + Duration::from_millis(1),
|
||||
room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()),
|
||||
sender: UserId::try_from("@carl:example.com").unwrap(),
|
||||
unsigned: UnsignedData {
|
||||
age: Some(Int::from(100)),
|
||||
..UnsignedData::default()
|
||||
},
|
||||
};
|
||||
let json = json!({
|
||||
"content": {
|
||||
"reason": null
|
||||
@ -174,7 +191,31 @@ mod extra_fields {
|
||||
},
|
||||
"type": "m.room.redaction"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
assert_matches!(
|
||||
from_json_value::<EventJson<RedactionEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap(),
|
||||
RedactionEvent {
|
||||
content: RedactionEventContent { reason: None },
|
||||
redacts,
|
||||
event_id,
|
||||
origin_server_ts,
|
||||
room_id: Some(room_id),
|
||||
sender,
|
||||
unsigned: UnsignedData {
|
||||
age: Some(age),
|
||||
redacted_because: None,
|
||||
transaction_id: None,
|
||||
},
|
||||
} if redacts == "$h29iv0s8:example.com"
|
||||
&& event_id == "$h29iv0s8:example.com"
|
||||
&& origin_server_ts == UNIX_EPOCH + Duration::from_millis(1)
|
||||
&& room_id == "!n8f893n9:example.com"
|
||||
&& sender == "@carl:example.com"
|
||||
&& age == Int::from(100)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -198,31 +239,38 @@ mod type_alias {
|
||||
|
||||
#[test]
|
||||
fn alias_is_not_empty() {
|
||||
let content = vec![(
|
||||
UserId::try_from("@bob:example.com").unwrap(),
|
||||
vec![RoomId::try_from("!n8f893n9:example.com").unwrap()],
|
||||
)]
|
||||
.into_iter()
|
||||
.collect();
|
||||
|
||||
let event = DirectEvent { content };
|
||||
let json = json!({
|
||||
"content": {
|
||||
"@bob:example.com": ["!n8f893n9:example.com"]
|
||||
},
|
||||
"type": "m.direct"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
let event = from_json_value::<EventJson<DirectEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
event.content,
|
||||
btreemap! {
|
||||
UserId::try_from("@bob:example.com").unwrap() => vec![
|
||||
RoomId::try_from("!n8f893n9:example.com").unwrap()
|
||||
]
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn alias_empty() {
|
||||
let content = Default::default();
|
||||
let event = DirectEvent { content };
|
||||
let json = json!({
|
||||
"content": {},
|
||||
"type": "m.direct"
|
||||
});
|
||||
serde_json_eq_try_from_raw(event, json);
|
||||
|
||||
let _ = from_json_value::<EventJson<DirectEvent>>(json)
|
||||
.unwrap()
|
||||
.deserialize()
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user