push: Split push conditions tests

This commit is contained in:
Kévin Commaille 2023-04-07 12:16:33 +02:00 committed by Kévin Commaille
parent 33fa1b48ed
commit 82b4257bfe

View File

@ -424,7 +424,7 @@ mod tests {
}; };
use super::{FlattenedJson, PushCondition, PushConditionRoomCtx, RoomMemberCountIs, StrExt}; use super::{FlattenedJson, PushCondition, PushConditionRoomCtx, RoomMemberCountIs, StrExt};
use crate::{power_levels::NotificationPowerLevels, room_id, serde::Raw, user_id}; use crate::{power_levels::NotificationPowerLevels, room_id, serde::Raw, user_id, OwnedUserId};
#[test] #[test]
fn serialize_event_match_condition() { fn serialize_event_match_condition() {
@ -611,14 +611,15 @@ mod tests {
assert!(!"lunc".matches_pattern("lunc?*", false)); assert!(!"lunc".matches_pattern("lunc?*", false));
} }
#[test] fn sender() -> OwnedUserId {
fn conditions_apply_to_events() { user_id!("@worthy_whale:server.name").to_owned()
let first_sender = user_id!("@worthy_whale:server.name").to_owned(); }
fn push_context() -> PushConditionRoomCtx {
let mut users_power_levels = BTreeMap::new(); let mut users_power_levels = BTreeMap::new();
users_power_levels.insert(first_sender, int!(25)); users_power_levels.insert(sender(), int!(25));
let context = PushConditionRoomCtx { PushConditionRoomCtx {
room_id: room_id!("!room:server.name").to_owned(), room_id: room_id!("!room:server.name").to_owned(),
member_count: uint!(3), member_count: uint!(3),
user_id: user_id!("@gorilla:server.name").to_owned(), user_id: user_id!("@gorilla:server.name").to_owned(),
@ -628,9 +629,11 @@ mod tests {
notification_power_levels: NotificationPowerLevels { room: int!(50) }, notification_power_levels: NotificationPowerLevels { room: int!(50) },
#[cfg(feature = "unstable-msc3931")] #[cfg(feature = "unstable-msc3931")]
supported_features: Default::default(), supported_features: Default::default(),
}; }
}
let first_event_raw = serde_json::from_str::<Raw<JsonValue>>( fn first_flattened_event() -> FlattenedJson {
let raw = serde_json::from_str::<Raw<JsonValue>>(
r#"{ r#"{
"sender": "@worthy_whale:server.name", "sender": "@worthy_whale:server.name",
"content": { "content": {
@ -640,19 +643,30 @@ mod tests {
}"#, }"#,
) )
.unwrap(); .unwrap();
let first_event = FlattenedJson::from_raw(&first_event_raw);
let second_event_raw = serde_json::from_str::<Raw<JsonValue>>( FlattenedJson::from_raw(&raw)
}
fn second_flattened_event() -> FlattenedJson {
let raw = serde_json::from_str::<Raw<JsonValue>>(
r#"{ r#"{
"sender": "@party_bot:server.name", "sender": "@party_bot:server.name",
"content": { "content": {
"msgtype": "m.notice", "msgtype": "m.notice",
"body": "@room Ready to come to the party?" "body": "Everybody come to party!"
} }
}"#, }"#,
) )
.unwrap(); .unwrap();
let second_event = FlattenedJson::from_raw(&second_event_raw);
FlattenedJson::from_raw(&raw)
}
#[test]
fn event_match_applies() {
let context = push_context();
let first_event = first_flattened_event();
let second_event = second_flattened_event();
let correct_room = PushCondition::EventMatch { let correct_room = PushCondition::EventMatch {
key: "room_id".into(), key: "room_id".into(),
@ -677,6 +691,12 @@ mod tests {
assert!(!msgtype.applies(&first_event, &context)); assert!(!msgtype.applies(&first_event, &context));
assert!(msgtype.applies(&second_event, &context)); assert!(msgtype.applies(&second_event, &context));
}
#[test]
fn room_member_count_is_applies() {
let context = push_context();
let event = first_flattened_event();
let member_count_eq = let member_count_eq =
PushCondition::RoomMemberCount { is: RoomMemberCountIs::from(uint!(3)) }; PushCondition::RoomMemberCount { is: RoomMemberCountIs::from(uint!(3)) };
@ -685,14 +705,28 @@ mod tests {
let member_count_lt = let member_count_lt =
PushCondition::RoomMemberCount { is: RoomMemberCountIs::from(..uint!(3)) }; PushCondition::RoomMemberCount { is: RoomMemberCountIs::from(..uint!(3)) };
assert!(member_count_eq.applies(&first_event, &context)); assert!(member_count_eq.applies(&event, &context));
assert!(member_count_gt.applies(&first_event, &context)); assert!(member_count_gt.applies(&event, &context));
assert!(!member_count_lt.applies(&first_event, &context)); assert!(!member_count_lt.applies(&event, &context));
}
#[test]
fn contains_display_name_applies() {
let context = push_context();
let first_event = first_flattened_event();
let second_event = second_flattened_event();
let contains_display_name = PushCondition::ContainsDisplayName; let contains_display_name = PushCondition::ContainsDisplayName;
assert!(contains_display_name.applies(&first_event, &context)); assert!(contains_display_name.applies(&first_event, &context));
assert!(!contains_display_name.applies(&second_event, &context)); assert!(!contains_display_name.applies(&second_event, &context));
}
#[test]
fn sender_notification_permission_applies() {
let context = push_context();
let first_event = first_flattened_event();
let second_event = second_flattened_event();
let sender_notification_permission = let sender_notification_permission =
PushCondition::SenderNotificationPermission { key: "room".into() }; PushCondition::SenderNotificationPermission { key: "room".into() };
@ -703,34 +737,20 @@ mod tests {
#[cfg(feature = "unstable-msc3932")] #[cfg(feature = "unstable-msc3932")]
#[test] #[test]
fn conditions_apply_to_events_in_room_with_feature() { fn room_version_supports_applies() {
let first_sender = user_id!("@worthy_whale:server.name").to_owned(); let context_not_matching = push_context();
let mut users_power_levels = BTreeMap::new();
users_power_levels.insert(first_sender, int!(25));
let context_matching = PushConditionRoomCtx { let context_matching = PushConditionRoomCtx {
room_id: room_id!("!room:server.name").to_owned(), room_id: room_id!("!room:server.name").to_owned(),
member_count: uint!(3), member_count: uint!(3),
user_id: user_id!("@gorilla:server.name").to_owned(), user_id: user_id!("@gorilla:server.name").to_owned(),
user_display_name: "Groovy Gorilla".into(), user_display_name: "Groovy Gorilla".into(),
users_power_levels: users_power_levels.clone(), users_power_levels: context_not_matching.users_power_levels.clone(),
default_power_level: int!(50), default_power_level: int!(50),
notification_power_levels: NotificationPowerLevels { room: int!(50) }, notification_power_levels: NotificationPowerLevels { room: int!(50) },
supported_features: vec![super::RoomVersionFeature::ExtensibleEvents], supported_features: vec![super::RoomVersionFeature::ExtensibleEvents],
}; };
let context_not_matching = PushConditionRoomCtx {
room_id: room_id!("!room:server.name").to_owned(),
member_count: uint!(3),
user_id: user_id!("@gorilla:server.name").to_owned(),
user_display_name: "Groovy Gorilla".into(),
users_power_levels,
default_power_level: int!(50),
notification_power_levels: NotificationPowerLevels { room: int!(50) },
supported_features: vec![],
};
let simple_event_raw = serde_json::from_str::<Raw<JsonValue>>( let simple_event_raw = serde_json::from_str::<Raw<JsonValue>>(
r#"{ r#"{
"sender": "@worthy_whale:server.name", "sender": "@worthy_whale:server.name",